Fix misalignment between enum and boost::variant. See #200

This commit is contained in:
Thomas Krijnen
2017-04-03 11:41:14 +02:00
parent 06cad59fa2
commit 1856c499b7
2 changed files with 8 additions and 0 deletions
+4
View File
@@ -308,6 +308,8 @@ public:
int operator()(const double& /*i*/) const { return -1; } int operator()(const double& /*i*/) const { return -1; }
int operator()(const std::string& /*i*/) const { return -1; } int operator()(const std::string& /*i*/) const { return -1; }
int operator()(const boost::dynamic_bitset<>& /*i*/) const { return -1; } int operator()(const boost::dynamic_bitset<>& /*i*/) const { return -1; }
int operator()(const IfcWriteArgument::empty_aggregate_t&) const { return 0; }
int operator()(const IfcWriteArgument::empty_aggregate_of_aggregate_t&) const { return 0; }
int operator()(const std::vector<int>& i) const { return (int)i.size(); } int operator()(const std::vector<int>& i) const { return (int)i.size(); }
int operator()(const std::vector<double>& i) const { return (int)i.size(); } int operator()(const std::vector<double>& i) const { return (int)i.size(); }
int operator()(const std::vector< std::vector<int> >& i) const { return (int)i.size(); } int operator()(const std::vector< std::vector<int> >& i) const { return (int)i.size(); }
@@ -435,6 +437,8 @@ public:
} }
data << ")"; data << ")";
} }
void operator()(const IfcWriteArgument::empty_aggregate_t&) const { data << "()"; }
void operator()(const IfcWriteArgument::empty_aggregate_of_aggregate_t&) const { data << "()"; }
operator std::string() { return data.str(); } operator std::string() { return data.str(); }
}; };
+4
View File
@@ -54,6 +54,8 @@ namespace IfcWrite {
: data(data), enumeration_value(enumeration_value) {} : data(data), enumeration_value(enumeration_value) {}
}; };
class Derived {}; class Derived {};
class empty_aggregate_t {};
class empty_aggregate_of_aggregate_t {};
private: private:
boost::variant< boost::variant<
// A null argument, it will always serialize to $ // A null argument, it will always serialize to $
@@ -85,6 +87,7 @@ namespace IfcWrite {
IfcUtil::IfcBaseClass*, IfcUtil::IfcBaseClass*,
// AGGREGATES: // AGGREGATES:
empty_aggregate_t,
// An aggregate of integers, e.g. (1,2,3) // An aggregate of integers, e.g. (1,2,3)
std::vector<int>, std::vector<int>,
// An aggregate of floats, e.g. (12.3,4.) // An aggregate of floats, e.g. (12.3,4.)
@@ -99,6 +102,7 @@ namespace IfcWrite {
IfcEntityList::ptr, IfcEntityList::ptr,
// AGGREGATES OF AGGREGATES: // AGGREGATES OF AGGREGATES:
empty_aggregate_of_aggregate_t,
// An aggregate of an aggregate of ints. E.g. ((1, 2), (3)) // An aggregate of an aggregate of ints. E.g. ((1, 2), (3))
std::vector< std::vector<int> >, std::vector< std::vector<int> >,
// An aggregate of an aggregate of floats. E.g. ((1., 2.3), (4.)) // An aggregate of an aggregate of floats. E.g. ((1., 2.3), (4.))