diff --git a/src/ifcgeom/taxonomy.cpp b/src/ifcgeom/taxonomy.cpp index f939483a9d..fd19ed56b1 100644 --- a/src/ifcgeom/taxonomy.cpp +++ b/src/ifcgeom/taxonomy.cpp @@ -407,4 +407,6 @@ const std::string& ifcopenshell::geometry::taxonomy::kind_to_string(kinds k) { }; return values[k]; -} \ No newline at end of file +} + +std::atomic_uint32_t item::counter_(0); diff --git a/src/ifcgeom/taxonomy.h b/src/ifcgeom/taxonomy.h index 62e0e011ac..3894e737cd 100644 --- a/src/ifcgeom/taxonomy.h +++ b/src/ifcgeom/taxonomy.h @@ -31,6 +31,11 @@ enum kinds { MATRIX4, POINT3, DIRECTION3, LINE, CIRCLE, ELLIPSE, BSPLINE_CURVE, const std::string& kind_to_string(kinds k); struct item { +private: + uint32_t identity_; + static std::atomic_uint32_t counter_; + +public: const IfcUtil::IfcBaseInterface* instance; boost::optional orientation; @@ -40,9 +45,11 @@ struct item { virtual void print(std::ostream&, int indent=0) const = 0; virtual void reverse() { throw taxonomy::topology_error(); } - item(const IfcUtil::IfcBaseInterface* instance = nullptr) : instance(instance) {} + item(const IfcUtil::IfcBaseInterface* instance = nullptr) : identity_(counter_++), instance(instance) {} virtual ~item() {} + + uint32_t identity() const { return identity_; } }; bool less(const item*, const item*);