| 454 | |
| 455 | template <typename T> |
| 456 | T* IfcParse::impl::in_memory_file_storage::create() { |
| 457 | IfcUtil::IfcBaseClass* inst = nullptr; |
| 458 | if constexpr (std::is_same_v<std::decay_t<std::invoke_result_t<typename T::Class>>, IfcParse::entity>) { |
| 459 | inst = new T(in_memory_attribute_storage(T::Class().attribute_count())); |
| 460 | } else if constexpr (std::is_same_v<std::decay_t<std::invoke_result_t<typename T::Class>>, IfcParse::type_declaration>) { |
| 461 | inst = new T(in_memory_attribute_storage(1)); |
| 462 | } else { |
| 463 | static_assert(dependent_false_v<T>, "Requires and entity or type declaration"); |
| 464 | } |
| 465 | inst->file_ = file; |
| 466 | return file->addEntity(inst)->as<T>(); |
| 467 | } |
| 468 | |
| 469 | template <typename T> |
| 470 | T* IfcParse::impl::rocks_db_file_storage::create() { |