.. _program_listing_file_src_ifcparse_IfcEntityInstanceData.h: Program Listing for File IfcEntityInstanceData.h ================================================ |exhale_lsh| :ref:`Return to documentation for file ` (``src/ifcparse/IfcEntityInstanceData.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp /******************************************************************************** * * * This file is part of IfcOpenShell. * * * * IfcOpenShell is free software: you can redistribute it and/or modify * * it under the terms of the Lesser GNU General Public License as published by * * the Free Software Foundation, either version 3.0 of the License, or * * (at your option) any later version. * * * * IfcOpenShell is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * Lesser GNU General Public License for more details. * * * * You should have received a copy of the Lesser GNU General Public License * * along with this program. If not, see . * * * ********************************************************************************/ #ifndef IFCENTITYINSTANCEDATA_H #define IFCENTITYINSTANCEDATA_H #include "../ifcparse/ArgumentType.h" #include #include #include class Argument; class IfcEntityList; namespace IfcParse { class IfcFile; } class IFC_PARSE_API IfcEntityInstanceData { public: // Public for backwards compatibility IfcParse::IfcFile* file; protected: unsigned id_; const IfcParse::declaration* type_; mutable Argument** attributes_; unsigned offset_in_file_; public: IfcEntityInstanceData(const IfcParse::declaration* type, IfcParse::IfcFile* file_, unsigned id = 0, unsigned offset_in_file = 0) : file(file_), id_(id), type_(type), attributes_(0), offset_in_file_(offset_in_file) {} IfcEntityInstanceData(IfcParse::IfcFile* file_, size_t size) : file(file_), id_(0), type_(0), attributes_(new Argument*[size]), offset_in_file_(0) {} IfcEntityInstanceData(const IfcParse::declaration* type) : file(0), id_(0), type_(type), attributes_(new Argument*[getArgumentCount()]) { for (size_t i = 0; i < getArgumentCount(); ++i) { attributes_[i] = 0; } } void load() const; IfcEntityInstanceData(const IfcEntityInstanceData& e); virtual ~IfcEntityInstanceData(); boost::shared_ptr getInverse (const IfcParse::declaration* type, int attribute_index) const; Argument* getArgument(unsigned int i) const; // NB: This makes a copy of the argument void setArgument(unsigned int i, Argument* a, IfcUtil::ArgumentType attr_type = IfcUtil::Argument_UNKNOWN); virtual unsigned int getArgumentCount() const { if (type_ == 0) { return 0; } if (type_->as_entity()) { return type_->as_entity()->attribute_count(); } else { return 1; } } const IfcParse::declaration* type() const { return type_; } std::string toString(bool upper = false) const; unsigned int id() const { return id_; } unsigned int offset_in_file() const { return offset_in_file_; } // NB: const ommitted for lazy loading Argument**& attributes() const { return attributes_; } unsigned set_id(boost::optional i = boost::none); }; #endif