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 std::string& /*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<double>& 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 << ")";
}
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(); }
};
+4
View File
@@ -54,6 +54,8 @@ namespace IfcWrite {
: data(data), enumeration_value(enumeration_value) {}
};
class Derived {};
class empty_aggregate_t {};
class empty_aggregate_of_aggregate_t {};
private:
boost::variant<
// A null argument, it will always serialize to $
@@ -85,6 +87,7 @@ namespace IfcWrite {
IfcUtil::IfcBaseClass*,
// AGGREGATES:
empty_aggregate_t,
// An aggregate of integers, e.g. (1,2,3)
std::vector<int>,
// An aggregate of floats, e.g. (12.3,4.)
@@ -99,6 +102,7 @@ namespace IfcWrite {
IfcEntityList::ptr,
// AGGREGATES OF AGGREGATES:
empty_aggregate_of_aggregate_t,
// An aggregate of an aggregate of ints. E.g. ((1, 2), (3))
std::vector< std::vector<int> >,
// An aggregate of an aggregate of floats. E.g. ((1., 2.3), (4.))