Merge branch 'archive_enums' into 'master'

archive enums

See merge request jschoeberl/netgen!122
This commit is contained in:
Joachim Schöberl 2019-01-30 10:26:04 +00:00
commit 36f9eb1858
2 changed files with 33 additions and 0 deletions

View File

@ -209,6 +209,19 @@ namespace ngcore
return (*this);
}
// archive implementation for enums
template<typename T>
auto operator & (T& val) -> typename std::enable_if<std::is_enum<T>::value, Archive&>::type
{
int enumval;
if(Output())
enumval = int(val);
*this & enumval;
if(Input())
val = T(enumval);
return *this;
}
// vector<bool> has special implementation (like a bitarray) therefore
// it needs a special overload (this could probably be more efficient, but we
// don't use it that often anyway)

View File

@ -248,6 +248,22 @@ void testMap(Archive& in, Archive& out)
CHECK(map2["netgen"] == "v6.2.1901");
}
enum MyEnum
{
CASE1,
CASE2
};
void testEnum(Archive& in, Archive& out)
{
MyEnum en = CASE2;
out & en;
out.FlushBuffer();
MyEnum enin;
in & enin;
CHECK(enin == CASE2);
}
void testArchive(Archive& in, Archive& out)
{
SECTION("Empty String")
@ -301,6 +317,10 @@ void testArchive(Archive& in, Archive& out)
{
testMap(in, out);
}
SECTION("enum")
{
testEnum(in, out);
}
}
TEST_CASE("BinaryArchive")