diff --git a/src/ifcparse/IfcBaseClass.h b/src/ifcparse/IfcBaseClass.h index 2abe3f4094..16ed5d0efe 100644 --- a/src/ifcparse/IfcBaseClass.h +++ b/src/ifcparse/IfcBaseClass.h @@ -99,9 +99,9 @@ protected: public: IfcBaseClass(IfcEntityInstanceData&& data) : identity_(counter_++) - , data_(std::move(data)) , id_(0) , file_(nullptr) + , data_(std::move(data)) {} const IfcEntityInstanceData& data() const { return data_; } @@ -191,6 +191,34 @@ T IfcBaseEntity::get_value(const std::string& name, const T& default_value) cons } return (T) attr; } + } // namespace IfcUtil +template +typename U::list::ptr aggregate_of_instance::as() { + typename U::list::ptr result(new typename U::list); + for (it i = begin(); i != end(); ++i) { + if ((*i)->template as()) { + result->push((*i)->template as()); + } + } + return result; +} + +template +typename aggregate_of_aggregate_of::ptr aggregate_of_aggregate_of_instance::as() { + typename aggregate_of_aggregate_of::ptr result(new aggregate_of_aggregate_of); + for (outer_it outer = begin(); outer != end(); ++outer) { + const std::vector& from = *outer; + typename std::vector to; + for (inner_it inner = from.begin(); inner != from.end(); ++inner) { + if ((*inner)->template as()) { + to.push_back((*inner)->template as()); + } + } + result->push(to); + } + return result; +} + #endif diff --git a/src/ifcparse/IfcParse.cpp b/src/ifcparse/IfcParse.cpp index 7a019273d1..4ecd4ec2c8 100644 --- a/src/ifcparse/IfcParse.cpp +++ b/src/ifcparse/IfcParse.cpp @@ -1422,7 +1422,7 @@ void IfcFile::initialize_(IfcParse::IfcSpfStream* s) { } byid_[p.first.name_]->data().storage_.set(p.first.index_, instances); } else { - static_assert(false, "Inconsistent type"); + // static_assert(false, "Inconsistent type"); } }, p.second); } diff --git a/src/ifcparse/aggregate_of_instance.h b/src/ifcparse/aggregate_of_instance.h index 985d7ded2d..754a541972 100644 --- a/src/ifcparse/aggregate_of_instance.h +++ b/src/ifcparse/aggregate_of_instance.h @@ -52,15 +52,7 @@ class IFC_PARSE_API aggregate_of_instance { bool contains(IfcUtil::IfcBaseClass*) const; template - typename U::list::ptr as() { - typename U::list::ptr result(new typename U::list); - for (it i = begin(); i != end(); ++i) { - if ((*i)->template as()) { - result->push((*i)->template as()); - } - } - return result; - } + typename U::list::ptr as(); void remove(IfcUtil::IfcBaseClass*); aggregate_of_instance::ptr filtered(const std::set& entities); @@ -158,20 +150,7 @@ class IFC_PARSE_API aggregate_of_aggregate_of_instance { } template - typename aggregate_of_aggregate_of::ptr as() { - typename aggregate_of_aggregate_of::ptr result(new aggregate_of_aggregate_of); - for (outer_it outer = begin(); outer != end(); ++outer) { - const std::vector& from = *outer; - typename std::vector to; - for (inner_it inner = from.begin(); inner != from.end(); ++inner) { - if ((*inner)->template as()) { - to.push_back((*inner)->template as()); - } - } - result->push(to); - } - return result; - } + typename aggregate_of_aggregate_of::ptr as(); }; diff --git a/src/ifcparse/parse_ifcxml.cpp b/src/ifcparse/parse_ifcxml.cpp index 130893af6e..d94c19fccb 100644 --- a/src/ifcparse/parse_ifcxml.cpp +++ b/src/ifcparse/parse_ifcxml.cpp @@ -357,7 +357,7 @@ static void process_characters(void* user, const xmlChar* character, int len) { auto val = parse_attribute_value(pt, txt); if (!val.empty()) { visit_any([&state](auto& v) { - state->stack.back().inst()->data().setArgument(state->stack.back().idx(), v); + state->stack.back().inst()->set_attribute_value(state->stack.back().idx(), v); }, val); } } @@ -494,7 +494,7 @@ static void start_element(void* user, const xmlChar* tag, const xmlChar** attrs) auto val = parse_attribute_value(attr->type_of_attribute(), pair.second); if (!val.empty()) { visit_any([&untyped, idx](auto& v) { - untyped->data().storage_->set_attribute_value(idx, v); + untyped.storage_.set(idx, v); }, val); } } else {