/********************************************************************************
 *                                                                              *
 * 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 <http://www.gnu.org/licenses/>.         *
 *                                                                              *
 ********************************************************************************/

/********************************************************************************
 *                                                                              *
 * This file has been generated from IFC4X3_TC1.exp. Do not make modifications  *
 * but instead modify the python script that has been used to generate this.    *
 *                                                                              *
 ********************************************************************************/

#include "../ifcparse/Ifc4x3_tc1.h"
#include "../ifcparse/IfcSchema.h"
#include "../ifcparse/IfcException.h"
#include "../ifcparse/IfcFile.h"

#include <map>

const char* const Ifc4x3_tc1::Identifier = "IFC4X3_TC1";

using namespace IfcParse;

// External definitions
extern declaration* IFC4X3_TC1_types[1307];


const IfcParse::enumeration_type& Ifc4x3_tc1::IfcActionRequestTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[3]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcActionRequestTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[3]); }

Ifc4x3_tc1::IfcActionRequestTypeEnum::IfcActionRequestTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcActionRequestTypeEnum::IfcActionRequestTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcActionRequestTypeEnum::IfcActionRequestTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcActionRequestTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcActionRequestTypeEnum::IfcActionRequestTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcActionRequestTypeEnum::Value Ifc4x3_tc1::IfcActionRequestTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcActionRequestTypeEnum::Value) Ifc4x3_tc1::IfcActionRequestTypeEnum::IfcActionRequestTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcActionRequestTypeEnum::operator Ifc4x3_tc1::IfcActionRequestTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcActionRequestTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcActionSourceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[4]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcActionSourceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[4]); }

Ifc4x3_tc1::IfcActionSourceTypeEnum::IfcActionSourceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcActionSourceTypeEnum::IfcActionSourceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcActionSourceTypeEnum::IfcActionSourceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcActionSourceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcActionSourceTypeEnum::IfcActionSourceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcActionSourceTypeEnum::Value Ifc4x3_tc1::IfcActionSourceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcActionSourceTypeEnum::Value) Ifc4x3_tc1::IfcActionSourceTypeEnum::IfcActionSourceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcActionSourceTypeEnum::operator Ifc4x3_tc1::IfcActionSourceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcActionSourceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcActionTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[5]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcActionTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[5]); }

Ifc4x3_tc1::IfcActionTypeEnum::IfcActionTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcActionTypeEnum::IfcActionTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcActionTypeEnum::IfcActionTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcActionTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcActionTypeEnum::IfcActionTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcActionTypeEnum::Value Ifc4x3_tc1::IfcActionTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcActionTypeEnum::Value) Ifc4x3_tc1::IfcActionTypeEnum::IfcActionTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcActionTypeEnum::operator Ifc4x3_tc1::IfcActionTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcActionTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcActuatorTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[11]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcActuatorTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[11]); }

Ifc4x3_tc1::IfcActuatorTypeEnum::IfcActuatorTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcActuatorTypeEnum::IfcActuatorTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcActuatorTypeEnum::IfcActuatorTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcActuatorTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcActuatorTypeEnum::IfcActuatorTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcActuatorTypeEnum::Value Ifc4x3_tc1::IfcActuatorTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcActuatorTypeEnum::Value) Ifc4x3_tc1::IfcActuatorTypeEnum::IfcActuatorTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcActuatorTypeEnum::operator Ifc4x3_tc1::IfcActuatorTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcActuatorTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAddressTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[13]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAddressTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[13]); }

Ifc4x3_tc1::IfcAddressTypeEnum::IfcAddressTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAddressTypeEnum::IfcAddressTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAddressTypeEnum::IfcAddressTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAddressTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAddressTypeEnum::IfcAddressTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAddressTypeEnum::Value Ifc4x3_tc1::IfcAddressTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAddressTypeEnum::Value) Ifc4x3_tc1::IfcAddressTypeEnum::IfcAddressTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAddressTypeEnum::operator Ifc4x3_tc1::IfcAddressTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcAddressTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[20]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[20]); }

Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::IfcAirTerminalBoxTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::IfcAirTerminalBoxTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::IfcAirTerminalBoxTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::IfcAirTerminalBoxTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Value Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Value) Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::IfcAirTerminalBoxTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::operator Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAirTerminalTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[22]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAirTerminalTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[22]); }

Ifc4x3_tc1::IfcAirTerminalTypeEnum::IfcAirTerminalTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAirTerminalTypeEnum::IfcAirTerminalTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAirTerminalTypeEnum::IfcAirTerminalTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAirTerminalTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAirTerminalTypeEnum::IfcAirTerminalTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAirTerminalTypeEnum::Value Ifc4x3_tc1::IfcAirTerminalTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAirTerminalTypeEnum::Value) Ifc4x3_tc1::IfcAirTerminalTypeEnum::IfcAirTerminalTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAirTerminalTypeEnum::operator Ifc4x3_tc1::IfcAirTerminalTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcAirTerminalTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[25]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[25]); }

Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Value Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Value) Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::operator Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAlarmTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[28]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAlarmTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[28]); }

Ifc4x3_tc1::IfcAlarmTypeEnum::IfcAlarmTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAlarmTypeEnum::IfcAlarmTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAlarmTypeEnum::IfcAlarmTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAlarmTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAlarmTypeEnum::IfcAlarmTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAlarmTypeEnum::Value Ifc4x3_tc1::IfcAlarmTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAlarmTypeEnum::Value) Ifc4x3_tc1::IfcAlarmTypeEnum::IfcAlarmTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAlarmTypeEnum::operator Ifc4x3_tc1::IfcAlarmTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcAlarmTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[32]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[32]); }

Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::Value Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::Value) Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::operator Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[35]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[35]); }

Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::Value Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::Value) Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::operator Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAlignmentTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[38]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAlignmentTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[38]); }

Ifc4x3_tc1::IfcAlignmentTypeEnum::IfcAlignmentTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAlignmentTypeEnum::IfcAlignmentTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAlignmentTypeEnum::IfcAlignmentTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAlignmentTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAlignmentTypeEnum::IfcAlignmentTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAlignmentTypeEnum::Value Ifc4x3_tc1::IfcAlignmentTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAlignmentTypeEnum::Value) Ifc4x3_tc1::IfcAlignmentTypeEnum::IfcAlignmentTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAlignmentTypeEnum::operator Ifc4x3_tc1::IfcAlignmentTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcAlignmentTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[41]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[41]); }

Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::IfcAlignmentVerticalSegmentTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::IfcAlignmentVerticalSegmentTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::IfcAlignmentVerticalSegmentTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::IfcAlignmentVerticalSegmentTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::Value Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::Value) Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::IfcAlignmentVerticalSegmentTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::operator Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAnalysisModelTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[43]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAnalysisModelTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[43]); }

Ifc4x3_tc1::IfcAnalysisModelTypeEnum::IfcAnalysisModelTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAnalysisModelTypeEnum::IfcAnalysisModelTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAnalysisModelTypeEnum::IfcAnalysisModelTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAnalysisModelTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAnalysisModelTypeEnum::IfcAnalysisModelTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAnalysisModelTypeEnum::Value Ifc4x3_tc1::IfcAnalysisModelTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAnalysisModelTypeEnum::Value) Ifc4x3_tc1::IfcAnalysisModelTypeEnum::IfcAnalysisModelTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAnalysisModelTypeEnum::operator Ifc4x3_tc1::IfcAnalysisModelTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcAnalysisModelTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[44]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[44]); }

Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::Value Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::Value) Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::operator Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAnnotationTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[48]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAnnotationTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[48]); }

Ifc4x3_tc1::IfcAnnotationTypeEnum::IfcAnnotationTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAnnotationTypeEnum::IfcAnnotationTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAnnotationTypeEnum::IfcAnnotationTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAnnotationTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAnnotationTypeEnum::IfcAnnotationTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAnnotationTypeEnum::Value Ifc4x3_tc1::IfcAnnotationTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAnnotationTypeEnum::Value) Ifc4x3_tc1::IfcAnnotationTypeEnum::IfcAnnotationTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAnnotationTypeEnum::operator Ifc4x3_tc1::IfcAnnotationTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcAnnotationTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcArithmeticOperatorEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[60]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcArithmeticOperatorEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[60]); }

Ifc4x3_tc1::IfcArithmeticOperatorEnum::IfcArithmeticOperatorEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcArithmeticOperatorEnum::IfcArithmeticOperatorEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcArithmeticOperatorEnum::IfcArithmeticOperatorEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcArithmeticOperatorEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcArithmeticOperatorEnum::IfcArithmeticOperatorEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcArithmeticOperatorEnum::Value Ifc4x3_tc1::IfcArithmeticOperatorEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcArithmeticOperatorEnum::Value) Ifc4x3_tc1::IfcArithmeticOperatorEnum::IfcArithmeticOperatorEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcArithmeticOperatorEnum::operator Ifc4x3_tc1::IfcArithmeticOperatorEnum::Value() const {
    return (Ifc4x3_tc1::IfcArithmeticOperatorEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAssemblyPlaceEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[61]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAssemblyPlaceEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[61]); }

Ifc4x3_tc1::IfcAssemblyPlaceEnum::IfcAssemblyPlaceEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAssemblyPlaceEnum::IfcAssemblyPlaceEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAssemblyPlaceEnum::IfcAssemblyPlaceEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAssemblyPlaceEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAssemblyPlaceEnum::IfcAssemblyPlaceEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAssemblyPlaceEnum::Value Ifc4x3_tc1::IfcAssemblyPlaceEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAssemblyPlaceEnum::Value) Ifc4x3_tc1::IfcAssemblyPlaceEnum::IfcAssemblyPlaceEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAssemblyPlaceEnum::operator Ifc4x3_tc1::IfcAssemblyPlaceEnum::Value() const {
    return (Ifc4x3_tc1::IfcAssemblyPlaceEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[66]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[66]); }

Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Value Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Value) Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::operator Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBSplineCurveForm::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[108]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBSplineCurveForm::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[108]); }

Ifc4x3_tc1::IfcBSplineCurveForm::IfcBSplineCurveForm(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBSplineCurveForm::IfcBSplineCurveForm(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBSplineCurveForm::IfcBSplineCurveForm(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBSplineCurveForm::ToString(Value v) {
    return Ifc4x3_tc1::IfcBSplineCurveForm::IfcBSplineCurveForm::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBSplineCurveForm::Value Ifc4x3_tc1::IfcBSplineCurveForm::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBSplineCurveForm::Value) Ifc4x3_tc1::IfcBSplineCurveForm::IfcBSplineCurveForm::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBSplineCurveForm::operator Ifc4x3_tc1::IfcBSplineCurveForm::Value() const {
    return (Ifc4x3_tc1::IfcBSplineCurveForm::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBSplineSurfaceForm::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[111]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBSplineSurfaceForm::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[111]); }

Ifc4x3_tc1::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBSplineSurfaceForm::ToString(Value v) {
    return Ifc4x3_tc1::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBSplineSurfaceForm::Value Ifc4x3_tc1::IfcBSplineSurfaceForm::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBSplineSurfaceForm::Value) Ifc4x3_tc1::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBSplineSurfaceForm::operator Ifc4x3_tc1::IfcBSplineSurfaceForm::Value() const {
    return (Ifc4x3_tc1::IfcBSplineSurfaceForm::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBeamTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[74]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBeamTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[74]); }

Ifc4x3_tc1::IfcBeamTypeEnum::IfcBeamTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBeamTypeEnum::IfcBeamTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBeamTypeEnum::IfcBeamTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBeamTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcBeamTypeEnum::IfcBeamTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBeamTypeEnum::Value Ifc4x3_tc1::IfcBeamTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBeamTypeEnum::Value) Ifc4x3_tc1::IfcBeamTypeEnum::IfcBeamTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBeamTypeEnum::operator Ifc4x3_tc1::IfcBeamTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcBeamTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBearingTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[77]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBearingTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[77]); }

Ifc4x3_tc1::IfcBearingTypeEnum::IfcBearingTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBearingTypeEnum::IfcBearingTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBearingTypeEnum::IfcBearingTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBearingTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcBearingTypeEnum::IfcBearingTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBearingTypeEnum::Value Ifc4x3_tc1::IfcBearingTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBearingTypeEnum::Value) Ifc4x3_tc1::IfcBearingTypeEnum::IfcBearingTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBearingTypeEnum::operator Ifc4x3_tc1::IfcBearingTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcBearingTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBenchmarkEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[78]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBenchmarkEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[78]); }

Ifc4x3_tc1::IfcBenchmarkEnum::IfcBenchmarkEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBenchmarkEnum::IfcBenchmarkEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBenchmarkEnum::IfcBenchmarkEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBenchmarkEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcBenchmarkEnum::IfcBenchmarkEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBenchmarkEnum::Value Ifc4x3_tc1::IfcBenchmarkEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBenchmarkEnum::Value) Ifc4x3_tc1::IfcBenchmarkEnum::IfcBenchmarkEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBenchmarkEnum::operator Ifc4x3_tc1::IfcBenchmarkEnum::Value() const {
    return (Ifc4x3_tc1::IfcBenchmarkEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBoilerTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[85]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBoilerTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[85]); }

Ifc4x3_tc1::IfcBoilerTypeEnum::IfcBoilerTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBoilerTypeEnum::IfcBoilerTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBoilerTypeEnum::IfcBoilerTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBoilerTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcBoilerTypeEnum::IfcBoilerTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBoilerTypeEnum::Value Ifc4x3_tc1::IfcBoilerTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBoilerTypeEnum::Value) Ifc4x3_tc1::IfcBoilerTypeEnum::IfcBoilerTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBoilerTypeEnum::operator Ifc4x3_tc1::IfcBoilerTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcBoilerTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBooleanOperator::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[89]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBooleanOperator::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[89]); }

Ifc4x3_tc1::IfcBooleanOperator::IfcBooleanOperator(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBooleanOperator::IfcBooleanOperator(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBooleanOperator::IfcBooleanOperator(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBooleanOperator::ToString(Value v) {
    return Ifc4x3_tc1::IfcBooleanOperator::IfcBooleanOperator::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBooleanOperator::Value Ifc4x3_tc1::IfcBooleanOperator::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBooleanOperator::Value) Ifc4x3_tc1::IfcBooleanOperator::IfcBooleanOperator::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBooleanOperator::operator Ifc4x3_tc1::IfcBooleanOperator::Value() const {
    return (Ifc4x3_tc1::IfcBooleanOperator::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBridgePartTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[105]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBridgePartTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[105]); }

Ifc4x3_tc1::IfcBridgePartTypeEnum::IfcBridgePartTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBridgePartTypeEnum::IfcBridgePartTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBridgePartTypeEnum::IfcBridgePartTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBridgePartTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcBridgePartTypeEnum::IfcBridgePartTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBridgePartTypeEnum::Value Ifc4x3_tc1::IfcBridgePartTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBridgePartTypeEnum::Value) Ifc4x3_tc1::IfcBridgePartTypeEnum::IfcBridgePartTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBridgePartTypeEnum::operator Ifc4x3_tc1::IfcBridgePartTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcBridgePartTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBridgeTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[106]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBridgeTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[106]); }

Ifc4x3_tc1::IfcBridgeTypeEnum::IfcBridgeTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBridgeTypeEnum::IfcBridgeTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBridgeTypeEnum::IfcBridgeTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBridgeTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcBridgeTypeEnum::IfcBridgeTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBridgeTypeEnum::Value Ifc4x3_tc1::IfcBridgeTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBridgeTypeEnum::Value) Ifc4x3_tc1::IfcBridgeTypeEnum::IfcBridgeTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBridgeTypeEnum::operator Ifc4x3_tc1::IfcBridgeTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcBridgeTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[116]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[116]); }

Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Value Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Value) Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::operator Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[119]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[119]); }

Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Value Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Value) Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::operator Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBuildingSystemTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[122]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBuildingSystemTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[122]); }

Ifc4x3_tc1::IfcBuildingSystemTypeEnum::IfcBuildingSystemTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBuildingSystemTypeEnum::IfcBuildingSystemTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBuildingSystemTypeEnum::IfcBuildingSystemTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBuildingSystemTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcBuildingSystemTypeEnum::IfcBuildingSystemTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBuildingSystemTypeEnum::Value Ifc4x3_tc1::IfcBuildingSystemTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBuildingSystemTypeEnum::Value) Ifc4x3_tc1::IfcBuildingSystemTypeEnum::IfcBuildingSystemTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBuildingSystemTypeEnum::operator Ifc4x3_tc1::IfcBuildingSystemTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcBuildingSystemTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBuiltSystemTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[126]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBuiltSystemTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[126]); }

Ifc4x3_tc1::IfcBuiltSystemTypeEnum::IfcBuiltSystemTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBuiltSystemTypeEnum::IfcBuiltSystemTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBuiltSystemTypeEnum::IfcBuiltSystemTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBuiltSystemTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcBuiltSystemTypeEnum::IfcBuiltSystemTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBuiltSystemTypeEnum::Value Ifc4x3_tc1::IfcBuiltSystemTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBuiltSystemTypeEnum::Value) Ifc4x3_tc1::IfcBuiltSystemTypeEnum::IfcBuiltSystemTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBuiltSystemTypeEnum::operator Ifc4x3_tc1::IfcBuiltSystemTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcBuiltSystemTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBurnerTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[129]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcBurnerTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[129]); }

Ifc4x3_tc1::IfcBurnerTypeEnum::IfcBurnerTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcBurnerTypeEnum::IfcBurnerTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcBurnerTypeEnum::IfcBurnerTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcBurnerTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcBurnerTypeEnum::IfcBurnerTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcBurnerTypeEnum::Value Ifc4x3_tc1::IfcBurnerTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcBurnerTypeEnum::Value) Ifc4x3_tc1::IfcBurnerTypeEnum::IfcBurnerTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcBurnerTypeEnum::operator Ifc4x3_tc1::IfcBurnerTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcBurnerTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[132]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[132]); }

Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Value Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Value) Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::operator Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[135]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[135]); }

Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Value Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Value) Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::operator Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCableFittingTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[138]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCableFittingTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[138]); }

Ifc4x3_tc1::IfcCableFittingTypeEnum::IfcCableFittingTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCableFittingTypeEnum::IfcCableFittingTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCableFittingTypeEnum::IfcCableFittingTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCableFittingTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCableFittingTypeEnum::IfcCableFittingTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCableFittingTypeEnum::Value Ifc4x3_tc1::IfcCableFittingTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCableFittingTypeEnum::Value) Ifc4x3_tc1::IfcCableFittingTypeEnum::IfcCableFittingTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCableFittingTypeEnum::operator Ifc4x3_tc1::IfcCableFittingTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCableFittingTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCableSegmentTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[141]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCableSegmentTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[141]); }

Ifc4x3_tc1::IfcCableSegmentTypeEnum::IfcCableSegmentTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCableSegmentTypeEnum::IfcCableSegmentTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCableSegmentTypeEnum::IfcCableSegmentTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCableSegmentTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCableSegmentTypeEnum::IfcCableSegmentTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCableSegmentTypeEnum::Value Ifc4x3_tc1::IfcCableSegmentTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCableSegmentTypeEnum::Value) Ifc4x3_tc1::IfcCableSegmentTypeEnum::IfcCableSegmentTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCableSegmentTypeEnum::operator Ifc4x3_tc1::IfcCableSegmentTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCableSegmentTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[144]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[144]); }

Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::IfcCaissonFoundationTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::IfcCaissonFoundationTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::IfcCaissonFoundationTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::IfcCaissonFoundationTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Value Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Value) Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::IfcCaissonFoundationTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::operator Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcChangeActionEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[156]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcChangeActionEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[156]); }

Ifc4x3_tc1::IfcChangeActionEnum::IfcChangeActionEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcChangeActionEnum::IfcChangeActionEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcChangeActionEnum::IfcChangeActionEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcChangeActionEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcChangeActionEnum::IfcChangeActionEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcChangeActionEnum::Value Ifc4x3_tc1::IfcChangeActionEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcChangeActionEnum::Value) Ifc4x3_tc1::IfcChangeActionEnum::IfcChangeActionEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcChangeActionEnum::operator Ifc4x3_tc1::IfcChangeActionEnum::Value() const {
    return (Ifc4x3_tc1::IfcChangeActionEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcChillerTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[159]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcChillerTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[159]); }

Ifc4x3_tc1::IfcChillerTypeEnum::IfcChillerTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcChillerTypeEnum::IfcChillerTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcChillerTypeEnum::IfcChillerTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcChillerTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcChillerTypeEnum::IfcChillerTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcChillerTypeEnum::Value Ifc4x3_tc1::IfcChillerTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcChillerTypeEnum::Value) Ifc4x3_tc1::IfcChillerTypeEnum::IfcChillerTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcChillerTypeEnum::operator Ifc4x3_tc1::IfcChillerTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcChillerTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcChimneyTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[162]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcChimneyTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[162]); }

Ifc4x3_tc1::IfcChimneyTypeEnum::IfcChimneyTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcChimneyTypeEnum::IfcChimneyTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcChimneyTypeEnum::IfcChimneyTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcChimneyTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcChimneyTypeEnum::IfcChimneyTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcChimneyTypeEnum::Value Ifc4x3_tc1::IfcChimneyTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcChimneyTypeEnum::Value) Ifc4x3_tc1::IfcChimneyTypeEnum::IfcChimneyTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcChimneyTypeEnum::operator Ifc4x3_tc1::IfcChimneyTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcChimneyTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCoilTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[176]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCoilTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[176]); }

Ifc4x3_tc1::IfcCoilTypeEnum::IfcCoilTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCoilTypeEnum::IfcCoilTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCoilTypeEnum::IfcCoilTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCoilTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCoilTypeEnum::IfcCoilTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCoilTypeEnum::Value Ifc4x3_tc1::IfcCoilTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCoilTypeEnum::Value) Ifc4x3_tc1::IfcCoilTypeEnum::IfcCoilTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCoilTypeEnum::operator Ifc4x3_tc1::IfcCoilTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCoilTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcColumnTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[184]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcColumnTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[184]); }

Ifc4x3_tc1::IfcColumnTypeEnum::IfcColumnTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcColumnTypeEnum::IfcColumnTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcColumnTypeEnum::IfcColumnTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcColumnTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcColumnTypeEnum::IfcColumnTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcColumnTypeEnum::Value Ifc4x3_tc1::IfcColumnTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcColumnTypeEnum::Value) Ifc4x3_tc1::IfcColumnTypeEnum::IfcColumnTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcColumnTypeEnum::operator Ifc4x3_tc1::IfcColumnTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcColumnTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[187]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[187]); }

Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Value Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Value) Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::operator Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[191]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[191]); }

Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::IfcComplexPropertyTemplateTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::IfcComplexPropertyTemplateTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::IfcComplexPropertyTemplateTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::IfcComplexPropertyTemplateTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::Value Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::Value) Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::IfcComplexPropertyTemplateTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::operator Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCompressorTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[199]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCompressorTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[199]); }

Ifc4x3_tc1::IfcCompressorTypeEnum::IfcCompressorTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCompressorTypeEnum::IfcCompressorTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCompressorTypeEnum::IfcCompressorTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCompressorTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCompressorTypeEnum::IfcCompressorTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCompressorTypeEnum::Value Ifc4x3_tc1::IfcCompressorTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCompressorTypeEnum::Value) Ifc4x3_tc1::IfcCompressorTypeEnum::IfcCompressorTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCompressorTypeEnum::operator Ifc4x3_tc1::IfcCompressorTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCompressorTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCondenserTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[202]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCondenserTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[202]); }

Ifc4x3_tc1::IfcCondenserTypeEnum::IfcCondenserTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCondenserTypeEnum::IfcCondenserTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCondenserTypeEnum::IfcCondenserTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCondenserTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCondenserTypeEnum::IfcCondenserTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCondenserTypeEnum::Value Ifc4x3_tc1::IfcCondenserTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCondenserTypeEnum::Value) Ifc4x3_tc1::IfcCondenserTypeEnum::IfcCondenserTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCondenserTypeEnum::operator Ifc4x3_tc1::IfcCondenserTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCondenserTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcConnectionTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[210]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcConnectionTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[210]); }

Ifc4x3_tc1::IfcConnectionTypeEnum::IfcConnectionTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcConnectionTypeEnum::IfcConnectionTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcConnectionTypeEnum::IfcConnectionTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcConnectionTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcConnectionTypeEnum::IfcConnectionTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcConnectionTypeEnum::Value Ifc4x3_tc1::IfcConnectionTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcConnectionTypeEnum::Value) Ifc4x3_tc1::IfcConnectionTypeEnum::IfcConnectionTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcConnectionTypeEnum::operator Ifc4x3_tc1::IfcConnectionTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcConnectionTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcConstraintEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[213]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcConstraintEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[213]); }

Ifc4x3_tc1::IfcConstraintEnum::IfcConstraintEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcConstraintEnum::IfcConstraintEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcConstraintEnum::IfcConstraintEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcConstraintEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcConstraintEnum::IfcConstraintEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcConstraintEnum::Value Ifc4x3_tc1::IfcConstraintEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcConstraintEnum::Value) Ifc4x3_tc1::IfcConstraintEnum::IfcConstraintEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcConstraintEnum::operator Ifc4x3_tc1::IfcConstraintEnum::Value() const {
    return (Ifc4x3_tc1::IfcConstraintEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[216]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[216]); }

Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Value Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Value) Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::operator Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[219]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[219]); }

Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Value Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Value) Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::operator Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[222]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[222]); }

Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::IfcConstructionProductResourceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::IfcConstructionProductResourceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::IfcConstructionProductResourceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::IfcConstructionProductResourceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Value Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Value) Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::IfcConstructionProductResourceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::operator Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcControllerTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[231]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcControllerTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[231]); }

Ifc4x3_tc1::IfcControllerTypeEnum::IfcControllerTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcControllerTypeEnum::IfcControllerTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcControllerTypeEnum::IfcControllerTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcControllerTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcControllerTypeEnum::IfcControllerTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcControllerTypeEnum::Value Ifc4x3_tc1::IfcControllerTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcControllerTypeEnum::Value) Ifc4x3_tc1::IfcControllerTypeEnum::IfcControllerTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcControllerTypeEnum::operator Ifc4x3_tc1::IfcControllerTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcControllerTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[236]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[236]); }

Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Value Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Value) Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::operator Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCooledBeamTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[239]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCooledBeamTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[239]); }

Ifc4x3_tc1::IfcCooledBeamTypeEnum::IfcCooledBeamTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCooledBeamTypeEnum::IfcCooledBeamTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCooledBeamTypeEnum::IfcCooledBeamTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCooledBeamTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCooledBeamTypeEnum::IfcCooledBeamTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCooledBeamTypeEnum::Value Ifc4x3_tc1::IfcCooledBeamTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCooledBeamTypeEnum::Value) Ifc4x3_tc1::IfcCooledBeamTypeEnum::IfcCooledBeamTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCooledBeamTypeEnum::operator Ifc4x3_tc1::IfcCooledBeamTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCooledBeamTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCoolingTowerTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[242]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[242]); }

Ifc4x3_tc1::IfcCoolingTowerTypeEnum::IfcCoolingTowerTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCoolingTowerTypeEnum::IfcCoolingTowerTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCoolingTowerTypeEnum::IfcCoolingTowerTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCoolingTowerTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCoolingTowerTypeEnum::IfcCoolingTowerTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Value Ifc4x3_tc1::IfcCoolingTowerTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Value) Ifc4x3_tc1::IfcCoolingTowerTypeEnum::IfcCoolingTowerTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCoolingTowerTypeEnum::operator Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCostItemTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[248]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCostItemTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[248]); }

Ifc4x3_tc1::IfcCostItemTypeEnum::IfcCostItemTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCostItemTypeEnum::IfcCostItemTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCostItemTypeEnum::IfcCostItemTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCostItemTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCostItemTypeEnum::IfcCostItemTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCostItemTypeEnum::Value Ifc4x3_tc1::IfcCostItemTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCostItemTypeEnum::Value) Ifc4x3_tc1::IfcCostItemTypeEnum::IfcCostItemTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCostItemTypeEnum::operator Ifc4x3_tc1::IfcCostItemTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCostItemTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCostScheduleTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[250]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCostScheduleTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[250]); }

Ifc4x3_tc1::IfcCostScheduleTypeEnum::IfcCostScheduleTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCostScheduleTypeEnum::IfcCostScheduleTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCostScheduleTypeEnum::IfcCostScheduleTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCostScheduleTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCostScheduleTypeEnum::IfcCostScheduleTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCostScheduleTypeEnum::Value Ifc4x3_tc1::IfcCostScheduleTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCostScheduleTypeEnum::Value) Ifc4x3_tc1::IfcCostScheduleTypeEnum::IfcCostScheduleTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCostScheduleTypeEnum::operator Ifc4x3_tc1::IfcCostScheduleTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCostScheduleTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCourseTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[255]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCourseTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[255]); }

Ifc4x3_tc1::IfcCourseTypeEnum::IfcCourseTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCourseTypeEnum::IfcCourseTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCourseTypeEnum::IfcCourseTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCourseTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCourseTypeEnum::IfcCourseTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCourseTypeEnum::Value Ifc4x3_tc1::IfcCourseTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCourseTypeEnum::Value) Ifc4x3_tc1::IfcCourseTypeEnum::IfcCourseTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCourseTypeEnum::operator Ifc4x3_tc1::IfcCourseTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCourseTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCoveringTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[258]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCoveringTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[258]); }

Ifc4x3_tc1::IfcCoveringTypeEnum::IfcCoveringTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCoveringTypeEnum::IfcCoveringTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCoveringTypeEnum::IfcCoveringTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCoveringTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCoveringTypeEnum::IfcCoveringTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCoveringTypeEnum::Value Ifc4x3_tc1::IfcCoveringTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCoveringTypeEnum::Value) Ifc4x3_tc1::IfcCoveringTypeEnum::IfcCoveringTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCoveringTypeEnum::operator Ifc4x3_tc1::IfcCoveringTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCoveringTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCrewResourceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[261]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCrewResourceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[261]); }

Ifc4x3_tc1::IfcCrewResourceTypeEnum::IfcCrewResourceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCrewResourceTypeEnum::IfcCrewResourceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCrewResourceTypeEnum::IfcCrewResourceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCrewResourceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCrewResourceTypeEnum::IfcCrewResourceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCrewResourceTypeEnum::Value Ifc4x3_tc1::IfcCrewResourceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCrewResourceTypeEnum::Value) Ifc4x3_tc1::IfcCrewResourceTypeEnum::IfcCrewResourceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCrewResourceTypeEnum::operator Ifc4x3_tc1::IfcCrewResourceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCrewResourceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCurtainWallTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[269]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCurtainWallTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[269]); }

Ifc4x3_tc1::IfcCurtainWallTypeEnum::IfcCurtainWallTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCurtainWallTypeEnum::IfcCurtainWallTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCurtainWallTypeEnum::IfcCurtainWallTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCurtainWallTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCurtainWallTypeEnum::IfcCurtainWallTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCurtainWallTypeEnum::Value Ifc4x3_tc1::IfcCurtainWallTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCurtainWallTypeEnum::Value) Ifc4x3_tc1::IfcCurtainWallTypeEnum::IfcCurtainWallTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCurtainWallTypeEnum::operator Ifc4x3_tc1::IfcCurtainWallTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcCurtainWallTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCurveInterpolationEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[275]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcCurveInterpolationEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[275]); }

Ifc4x3_tc1::IfcCurveInterpolationEnum::IfcCurveInterpolationEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcCurveInterpolationEnum::IfcCurveInterpolationEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcCurveInterpolationEnum::IfcCurveInterpolationEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcCurveInterpolationEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcCurveInterpolationEnum::IfcCurveInterpolationEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcCurveInterpolationEnum::Value Ifc4x3_tc1::IfcCurveInterpolationEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcCurveInterpolationEnum::Value) Ifc4x3_tc1::IfcCurveInterpolationEnum::IfcCurveInterpolationEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcCurveInterpolationEnum::operator Ifc4x3_tc1::IfcCurveInterpolationEnum::Value() const {
    return (Ifc4x3_tc1::IfcCurveInterpolationEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDamperTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[288]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDamperTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[288]); }

Ifc4x3_tc1::IfcDamperTypeEnum::IfcDamperTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDamperTypeEnum::IfcDamperTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDamperTypeEnum::IfcDamperTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDamperTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDamperTypeEnum::IfcDamperTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDamperTypeEnum::Value Ifc4x3_tc1::IfcDamperTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDamperTypeEnum::Value) Ifc4x3_tc1::IfcDamperTypeEnum::IfcDamperTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDamperTypeEnum::operator Ifc4x3_tc1::IfcDamperTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcDamperTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDataOriginEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[289]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDataOriginEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[289]); }

Ifc4x3_tc1::IfcDataOriginEnum::IfcDataOriginEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDataOriginEnum::IfcDataOriginEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDataOriginEnum::IfcDataOriginEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDataOriginEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDataOriginEnum::IfcDataOriginEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDataOriginEnum::Value Ifc4x3_tc1::IfcDataOriginEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDataOriginEnum::Value) Ifc4x3_tc1::IfcDataOriginEnum::IfcDataOriginEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDataOriginEnum::operator Ifc4x3_tc1::IfcDataOriginEnum::Value() const {
    return (Ifc4x3_tc1::IfcDataOriginEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDerivedUnitEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[301]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDerivedUnitEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[301]); }

Ifc4x3_tc1::IfcDerivedUnitEnum::IfcDerivedUnitEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDerivedUnitEnum::IfcDerivedUnitEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDerivedUnitEnum::IfcDerivedUnitEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDerivedUnitEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDerivedUnitEnum::IfcDerivedUnitEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDerivedUnitEnum::Value Ifc4x3_tc1::IfcDerivedUnitEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDerivedUnitEnum::Value) Ifc4x3_tc1::IfcDerivedUnitEnum::IfcDerivedUnitEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDerivedUnitEnum::operator Ifc4x3_tc1::IfcDerivedUnitEnum::Value() const {
    return (Ifc4x3_tc1::IfcDerivedUnitEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDirectionSenseEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[306]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDirectionSenseEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[306]); }

Ifc4x3_tc1::IfcDirectionSenseEnum::IfcDirectionSenseEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDirectionSenseEnum::IfcDirectionSenseEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDirectionSenseEnum::IfcDirectionSenseEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDirectionSenseEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDirectionSenseEnum::IfcDirectionSenseEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDirectionSenseEnum::Value Ifc4x3_tc1::IfcDirectionSenseEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDirectionSenseEnum::Value) Ifc4x3_tc1::IfcDirectionSenseEnum::IfcDirectionSenseEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDirectionSenseEnum::operator Ifc4x3_tc1::IfcDirectionSenseEnum::Value() const {
    return (Ifc4x3_tc1::IfcDirectionSenseEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[311]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[311]); }

Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Value Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Value) Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::operator Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDistributionBoardTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[314]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[314]); }

Ifc4x3_tc1::IfcDistributionBoardTypeEnum::IfcDistributionBoardTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDistributionBoardTypeEnum::IfcDistributionBoardTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDistributionBoardTypeEnum::IfcDistributionBoardTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDistributionBoardTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDistributionBoardTypeEnum::IfcDistributionBoardTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Value Ifc4x3_tc1::IfcDistributionBoardTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Value) Ifc4x3_tc1::IfcDistributionBoardTypeEnum::IfcDistributionBoardTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDistributionBoardTypeEnum::operator Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[317]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[317]); }

Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Value Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Value) Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::operator Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDistributionPortTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[326]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDistributionPortTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[326]); }

Ifc4x3_tc1::IfcDistributionPortTypeEnum::IfcDistributionPortTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDistributionPortTypeEnum::IfcDistributionPortTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDistributionPortTypeEnum::IfcDistributionPortTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDistributionPortTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDistributionPortTypeEnum::IfcDistributionPortTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDistributionPortTypeEnum::Value Ifc4x3_tc1::IfcDistributionPortTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDistributionPortTypeEnum::Value) Ifc4x3_tc1::IfcDistributionPortTypeEnum::IfcDistributionPortTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDistributionPortTypeEnum::operator Ifc4x3_tc1::IfcDistributionPortTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcDistributionPortTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDistributionSystemEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[328]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDistributionSystemEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[328]); }

Ifc4x3_tc1::IfcDistributionSystemEnum::IfcDistributionSystemEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDistributionSystemEnum::IfcDistributionSystemEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDistributionSystemEnum::IfcDistributionSystemEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDistributionSystemEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDistributionSystemEnum::IfcDistributionSystemEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDistributionSystemEnum::Value Ifc4x3_tc1::IfcDistributionSystemEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDistributionSystemEnum::Value) Ifc4x3_tc1::IfcDistributionSystemEnum::IfcDistributionSystemEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDistributionSystemEnum::operator Ifc4x3_tc1::IfcDistributionSystemEnum::Value() const {
    return (Ifc4x3_tc1::IfcDistributionSystemEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDocumentConfidentialityEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[329]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDocumentConfidentialityEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[329]); }

Ifc4x3_tc1::IfcDocumentConfidentialityEnum::IfcDocumentConfidentialityEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDocumentConfidentialityEnum::IfcDocumentConfidentialityEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDocumentConfidentialityEnum::IfcDocumentConfidentialityEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDocumentConfidentialityEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDocumentConfidentialityEnum::IfcDocumentConfidentialityEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDocumentConfidentialityEnum::Value Ifc4x3_tc1::IfcDocumentConfidentialityEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDocumentConfidentialityEnum::Value) Ifc4x3_tc1::IfcDocumentConfidentialityEnum::IfcDocumentConfidentialityEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDocumentConfidentialityEnum::operator Ifc4x3_tc1::IfcDocumentConfidentialityEnum::Value() const {
    return (Ifc4x3_tc1::IfcDocumentConfidentialityEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDocumentStatusEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[334]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDocumentStatusEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[334]); }

Ifc4x3_tc1::IfcDocumentStatusEnum::IfcDocumentStatusEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDocumentStatusEnum::IfcDocumentStatusEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDocumentStatusEnum::IfcDocumentStatusEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDocumentStatusEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDocumentStatusEnum::IfcDocumentStatusEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDocumentStatusEnum::Value Ifc4x3_tc1::IfcDocumentStatusEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDocumentStatusEnum::Value) Ifc4x3_tc1::IfcDocumentStatusEnum::IfcDocumentStatusEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDocumentStatusEnum::operator Ifc4x3_tc1::IfcDocumentStatusEnum::Value() const {
    return (Ifc4x3_tc1::IfcDocumentStatusEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDoorPanelOperationEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[337]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDoorPanelOperationEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[337]); }

Ifc4x3_tc1::IfcDoorPanelOperationEnum::IfcDoorPanelOperationEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDoorPanelOperationEnum::IfcDoorPanelOperationEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDoorPanelOperationEnum::IfcDoorPanelOperationEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDoorPanelOperationEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDoorPanelOperationEnum::IfcDoorPanelOperationEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDoorPanelOperationEnum::Value Ifc4x3_tc1::IfcDoorPanelOperationEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDoorPanelOperationEnum::Value) Ifc4x3_tc1::IfcDoorPanelOperationEnum::IfcDoorPanelOperationEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDoorPanelOperationEnum::operator Ifc4x3_tc1::IfcDoorPanelOperationEnum::Value() const {
    return (Ifc4x3_tc1::IfcDoorPanelOperationEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDoorPanelPositionEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[338]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDoorPanelPositionEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[338]); }

Ifc4x3_tc1::IfcDoorPanelPositionEnum::IfcDoorPanelPositionEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDoorPanelPositionEnum::IfcDoorPanelPositionEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDoorPanelPositionEnum::IfcDoorPanelPositionEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDoorPanelPositionEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDoorPanelPositionEnum::IfcDoorPanelPositionEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDoorPanelPositionEnum::Value Ifc4x3_tc1::IfcDoorPanelPositionEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDoorPanelPositionEnum::Value) Ifc4x3_tc1::IfcDoorPanelPositionEnum::IfcDoorPanelPositionEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDoorPanelPositionEnum::operator Ifc4x3_tc1::IfcDoorPanelPositionEnum::Value() const {
    return (Ifc4x3_tc1::IfcDoorPanelPositionEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDoorTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[341]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDoorTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[341]); }

Ifc4x3_tc1::IfcDoorTypeEnum::IfcDoorTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDoorTypeEnum::IfcDoorTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDoorTypeEnum::IfcDoorTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDoorTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDoorTypeEnum::IfcDoorTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDoorTypeEnum::Value Ifc4x3_tc1::IfcDoorTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDoorTypeEnum::Value) Ifc4x3_tc1::IfcDoorTypeEnum::IfcDoorTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDoorTypeEnum::operator Ifc4x3_tc1::IfcDoorTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcDoorTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDoorTypeOperationEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[342]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDoorTypeOperationEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[342]); }

Ifc4x3_tc1::IfcDoorTypeOperationEnum::IfcDoorTypeOperationEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDoorTypeOperationEnum::IfcDoorTypeOperationEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDoorTypeOperationEnum::IfcDoorTypeOperationEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDoorTypeOperationEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDoorTypeOperationEnum::IfcDoorTypeOperationEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDoorTypeOperationEnum::Value Ifc4x3_tc1::IfcDoorTypeOperationEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDoorTypeOperationEnum::Value) Ifc4x3_tc1::IfcDoorTypeOperationEnum::IfcDoorTypeOperationEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDoorTypeOperationEnum::operator Ifc4x3_tc1::IfcDoorTypeOperationEnum::Value() const {
    return (Ifc4x3_tc1::IfcDoorTypeOperationEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDuctFittingTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[348]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDuctFittingTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[348]); }

Ifc4x3_tc1::IfcDuctFittingTypeEnum::IfcDuctFittingTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDuctFittingTypeEnum::IfcDuctFittingTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDuctFittingTypeEnum::IfcDuctFittingTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDuctFittingTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDuctFittingTypeEnum::IfcDuctFittingTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDuctFittingTypeEnum::Value Ifc4x3_tc1::IfcDuctFittingTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDuctFittingTypeEnum::Value) Ifc4x3_tc1::IfcDuctFittingTypeEnum::IfcDuctFittingTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDuctFittingTypeEnum::operator Ifc4x3_tc1::IfcDuctFittingTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcDuctFittingTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDuctSegmentTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[351]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[351]); }

Ifc4x3_tc1::IfcDuctSegmentTypeEnum::IfcDuctSegmentTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDuctSegmentTypeEnum::IfcDuctSegmentTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDuctSegmentTypeEnum::IfcDuctSegmentTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDuctSegmentTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDuctSegmentTypeEnum::IfcDuctSegmentTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Value Ifc4x3_tc1::IfcDuctSegmentTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Value) Ifc4x3_tc1::IfcDuctSegmentTypeEnum::IfcDuctSegmentTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDuctSegmentTypeEnum::operator Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDuctSilencerTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[354]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[354]); }

Ifc4x3_tc1::IfcDuctSilencerTypeEnum::IfcDuctSilencerTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcDuctSilencerTypeEnum::IfcDuctSilencerTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcDuctSilencerTypeEnum::IfcDuctSilencerTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcDuctSilencerTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcDuctSilencerTypeEnum::IfcDuctSilencerTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Value Ifc4x3_tc1::IfcDuctSilencerTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Value) Ifc4x3_tc1::IfcDuctSilencerTypeEnum::IfcDuctSilencerTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcDuctSilencerTypeEnum::operator Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEarthworksCutTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[358]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEarthworksCutTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[358]); }

Ifc4x3_tc1::IfcEarthworksCutTypeEnum::IfcEarthworksCutTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcEarthworksCutTypeEnum::IfcEarthworksCutTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcEarthworksCutTypeEnum::IfcEarthworksCutTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcEarthworksCutTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcEarthworksCutTypeEnum::IfcEarthworksCutTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcEarthworksCutTypeEnum::Value Ifc4x3_tc1::IfcEarthworksCutTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcEarthworksCutTypeEnum::Value) Ifc4x3_tc1::IfcEarthworksCutTypeEnum::IfcEarthworksCutTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcEarthworksCutTypeEnum::operator Ifc4x3_tc1::IfcEarthworksCutTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcEarthworksCutTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEarthworksFillTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[361]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEarthworksFillTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[361]); }

Ifc4x3_tc1::IfcEarthworksFillTypeEnum::IfcEarthworksFillTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcEarthworksFillTypeEnum::IfcEarthworksFillTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcEarthworksFillTypeEnum::IfcEarthworksFillTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcEarthworksFillTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcEarthworksFillTypeEnum::IfcEarthworksFillTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcEarthworksFillTypeEnum::Value Ifc4x3_tc1::IfcEarthworksFillTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcEarthworksFillTypeEnum::Value) Ifc4x3_tc1::IfcEarthworksFillTypeEnum::IfcEarthworksFillTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcEarthworksFillTypeEnum::operator Ifc4x3_tc1::IfcEarthworksFillTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcEarthworksFillTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricApplianceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[367]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[367]); }

Ifc4x3_tc1::IfcElectricApplianceTypeEnum::IfcElectricApplianceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcElectricApplianceTypeEnum::IfcElectricApplianceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcElectricApplianceTypeEnum::IfcElectricApplianceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcElectricApplianceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcElectricApplianceTypeEnum::IfcElectricApplianceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Value Ifc4x3_tc1::IfcElectricApplianceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Value) Ifc4x3_tc1::IfcElectricApplianceTypeEnum::IfcElectricApplianceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcElectricApplianceTypeEnum::operator Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[374]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[374]); }

Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Value Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Value) Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::operator Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[377]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[377]); }

Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Value Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Value) Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::operator Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[380]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[380]); }

Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::IfcElectricFlowTreatmentDeviceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::IfcElectricFlowTreatmentDeviceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::IfcElectricFlowTreatmentDeviceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::IfcElectricFlowTreatmentDeviceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Value Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Value) Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::IfcElectricFlowTreatmentDeviceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::operator Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[383]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[383]); }

Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::IfcElectricGeneratorTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::IfcElectricGeneratorTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::IfcElectricGeneratorTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::IfcElectricGeneratorTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Value Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Value) Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::IfcElectricGeneratorTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::operator Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricMotorTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[386]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricMotorTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[386]); }

Ifc4x3_tc1::IfcElectricMotorTypeEnum::IfcElectricMotorTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcElectricMotorTypeEnum::IfcElectricMotorTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcElectricMotorTypeEnum::IfcElectricMotorTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcElectricMotorTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcElectricMotorTypeEnum::IfcElectricMotorTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcElectricMotorTypeEnum::Value Ifc4x3_tc1::IfcElectricMotorTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcElectricMotorTypeEnum::Value) Ifc4x3_tc1::IfcElectricMotorTypeEnum::IfcElectricMotorTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcElectricMotorTypeEnum::operator Ifc4x3_tc1::IfcElectricMotorTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcElectricMotorTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[390]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[390]); }

Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::IfcElectricTimeControlTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::IfcElectricTimeControlTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::IfcElectricTimeControlTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::IfcElectricTimeControlTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Value Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Value) Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::IfcElectricTimeControlTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::operator Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElementAssemblyTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[396]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[396]); }

Ifc4x3_tc1::IfcElementAssemblyTypeEnum::IfcElementAssemblyTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcElementAssemblyTypeEnum::IfcElementAssemblyTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcElementAssemblyTypeEnum::IfcElementAssemblyTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcElementAssemblyTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcElementAssemblyTypeEnum::IfcElementAssemblyTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Value Ifc4x3_tc1::IfcElementAssemblyTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Value) Ifc4x3_tc1::IfcElementAssemblyTypeEnum::IfcElementAssemblyTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcElementAssemblyTypeEnum::operator Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElementCompositionEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[399]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcElementCompositionEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[399]); }

Ifc4x3_tc1::IfcElementCompositionEnum::IfcElementCompositionEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcElementCompositionEnum::IfcElementCompositionEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcElementCompositionEnum::IfcElementCompositionEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcElementCompositionEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcElementCompositionEnum::IfcElementCompositionEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcElementCompositionEnum::Value Ifc4x3_tc1::IfcElementCompositionEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcElementCompositionEnum::Value) Ifc4x3_tc1::IfcElementCompositionEnum::IfcElementCompositionEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcElementCompositionEnum::operator Ifc4x3_tc1::IfcElementCompositionEnum::Value() const {
    return (Ifc4x3_tc1::IfcElementCompositionEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEngineTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[409]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEngineTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[409]); }

Ifc4x3_tc1::IfcEngineTypeEnum::IfcEngineTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcEngineTypeEnum::IfcEngineTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcEngineTypeEnum::IfcEngineTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcEngineTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcEngineTypeEnum::IfcEngineTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcEngineTypeEnum::Value Ifc4x3_tc1::IfcEngineTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcEngineTypeEnum::Value) Ifc4x3_tc1::IfcEngineTypeEnum::IfcEngineTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcEngineTypeEnum::operator Ifc4x3_tc1::IfcEngineTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcEngineTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[412]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[412]); }

Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Value Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Value) Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::operator Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEvaporatorTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[415]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEvaporatorTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[415]); }

Ifc4x3_tc1::IfcEvaporatorTypeEnum::IfcEvaporatorTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcEvaporatorTypeEnum::IfcEvaporatorTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcEvaporatorTypeEnum::IfcEvaporatorTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcEvaporatorTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcEvaporatorTypeEnum::IfcEvaporatorTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcEvaporatorTypeEnum::Value Ifc4x3_tc1::IfcEvaporatorTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcEvaporatorTypeEnum::Value) Ifc4x3_tc1::IfcEvaporatorTypeEnum::IfcEvaporatorTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcEvaporatorTypeEnum::operator Ifc4x3_tc1::IfcEvaporatorTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcEvaporatorTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEventTriggerTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[418]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEventTriggerTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[418]); }

Ifc4x3_tc1::IfcEventTriggerTypeEnum::IfcEventTriggerTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcEventTriggerTypeEnum::IfcEventTriggerTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcEventTriggerTypeEnum::IfcEventTriggerTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcEventTriggerTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcEventTriggerTypeEnum::IfcEventTriggerTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcEventTriggerTypeEnum::Value Ifc4x3_tc1::IfcEventTriggerTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcEventTriggerTypeEnum::Value) Ifc4x3_tc1::IfcEventTriggerTypeEnum::IfcEventTriggerTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcEventTriggerTypeEnum::operator Ifc4x3_tc1::IfcEventTriggerTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcEventTriggerTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEventTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[420]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcEventTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[420]); }

Ifc4x3_tc1::IfcEventTypeEnum::IfcEventTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcEventTypeEnum::IfcEventTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcEventTypeEnum::IfcEventTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcEventTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcEventTypeEnum::IfcEventTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcEventTypeEnum::Value Ifc4x3_tc1::IfcEventTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcEventTypeEnum::Value) Ifc4x3_tc1::IfcEventTypeEnum::IfcEventTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcEventTypeEnum::operator Ifc4x3_tc1::IfcEventTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcEventTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[429]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[429]); }

Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::Value Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::Value) Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::operator Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[443]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[443]); }

Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::Value Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::Value) Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::operator Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFacilityUsageEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[444]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFacilityUsageEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[444]); }

Ifc4x3_tc1::IfcFacilityUsageEnum::IfcFacilityUsageEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcFacilityUsageEnum::IfcFacilityUsageEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcFacilityUsageEnum::IfcFacilityUsageEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcFacilityUsageEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcFacilityUsageEnum::IfcFacilityUsageEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcFacilityUsageEnum::Value Ifc4x3_tc1::IfcFacilityUsageEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcFacilityUsageEnum::Value) Ifc4x3_tc1::IfcFacilityUsageEnum::IfcFacilityUsageEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcFacilityUsageEnum::operator Ifc4x3_tc1::IfcFacilityUsageEnum::Value() const {
    return (Ifc4x3_tc1::IfcFacilityUsageEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFanTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[448]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFanTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[448]); }

Ifc4x3_tc1::IfcFanTypeEnum::IfcFanTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcFanTypeEnum::IfcFanTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcFanTypeEnum::IfcFanTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcFanTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcFanTypeEnum::IfcFanTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcFanTypeEnum::Value Ifc4x3_tc1::IfcFanTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcFanTypeEnum::Value) Ifc4x3_tc1::IfcFanTypeEnum::IfcFanTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcFanTypeEnum::operator Ifc4x3_tc1::IfcFanTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcFanTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFastenerTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[451]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFastenerTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[451]); }

Ifc4x3_tc1::IfcFastenerTypeEnum::IfcFastenerTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcFastenerTypeEnum::IfcFastenerTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcFastenerTypeEnum::IfcFastenerTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcFastenerTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcFastenerTypeEnum::IfcFastenerTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcFastenerTypeEnum::Value Ifc4x3_tc1::IfcFastenerTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcFastenerTypeEnum::Value) Ifc4x3_tc1::IfcFastenerTypeEnum::IfcFastenerTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcFastenerTypeEnum::operator Ifc4x3_tc1::IfcFastenerTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcFastenerTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFilterTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[461]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFilterTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[461]); }

Ifc4x3_tc1::IfcFilterTypeEnum::IfcFilterTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcFilterTypeEnum::IfcFilterTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcFilterTypeEnum::IfcFilterTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcFilterTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcFilterTypeEnum::IfcFilterTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcFilterTypeEnum::Value Ifc4x3_tc1::IfcFilterTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcFilterTypeEnum::Value) Ifc4x3_tc1::IfcFilterTypeEnum::IfcFilterTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcFilterTypeEnum::operator Ifc4x3_tc1::IfcFilterTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcFilterTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[464]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[464]); }

Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Value Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Value) Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::operator Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFlowDirectionEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[468]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFlowDirectionEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[468]); }

Ifc4x3_tc1::IfcFlowDirectionEnum::IfcFlowDirectionEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcFlowDirectionEnum::IfcFlowDirectionEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcFlowDirectionEnum::IfcFlowDirectionEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcFlowDirectionEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcFlowDirectionEnum::IfcFlowDirectionEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcFlowDirectionEnum::Value Ifc4x3_tc1::IfcFlowDirectionEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcFlowDirectionEnum::Value) Ifc4x3_tc1::IfcFlowDirectionEnum::IfcFlowDirectionEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcFlowDirectionEnum::operator Ifc4x3_tc1::IfcFlowDirectionEnum::Value() const {
    return (Ifc4x3_tc1::IfcFlowDirectionEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[473]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[473]); }

Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Value Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Value) Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::operator Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFlowMeterTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[476]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFlowMeterTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[476]); }

Ifc4x3_tc1::IfcFlowMeterTypeEnum::IfcFlowMeterTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcFlowMeterTypeEnum::IfcFlowMeterTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcFlowMeterTypeEnum::IfcFlowMeterTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcFlowMeterTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcFlowMeterTypeEnum::IfcFlowMeterTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcFlowMeterTypeEnum::Value Ifc4x3_tc1::IfcFlowMeterTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcFlowMeterTypeEnum::Value) Ifc4x3_tc1::IfcFlowMeterTypeEnum::IfcFlowMeterTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcFlowMeterTypeEnum::operator Ifc4x3_tc1::IfcFlowMeterTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcFlowMeterTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFootingTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[492]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFootingTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[492]); }

Ifc4x3_tc1::IfcFootingTypeEnum::IfcFootingTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcFootingTypeEnum::IfcFootingTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcFootingTypeEnum::IfcFootingTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcFootingTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcFootingTypeEnum::IfcFootingTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcFootingTypeEnum::Value Ifc4x3_tc1::IfcFootingTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcFootingTypeEnum::Value) Ifc4x3_tc1::IfcFootingTypeEnum::IfcFootingTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcFootingTypeEnum::operator Ifc4x3_tc1::IfcFootingTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcFootingTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFurnitureTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[499]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcFurnitureTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[499]); }

Ifc4x3_tc1::IfcFurnitureTypeEnum::IfcFurnitureTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcFurnitureTypeEnum::IfcFurnitureTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcFurnitureTypeEnum::IfcFurnitureTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcFurnitureTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcFurnitureTypeEnum::IfcFurnitureTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcFurnitureTypeEnum::Value Ifc4x3_tc1::IfcFurnitureTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcFurnitureTypeEnum::Value) Ifc4x3_tc1::IfcFurnitureTypeEnum::IfcFurnitureTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcFurnitureTypeEnum::operator Ifc4x3_tc1::IfcFurnitureTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcFurnitureTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcGeographicElementTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[502]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcGeographicElementTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[502]); }

Ifc4x3_tc1::IfcGeographicElementTypeEnum::IfcGeographicElementTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcGeographicElementTypeEnum::IfcGeographicElementTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcGeographicElementTypeEnum::IfcGeographicElementTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcGeographicElementTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcGeographicElementTypeEnum::IfcGeographicElementTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcGeographicElementTypeEnum::Value Ifc4x3_tc1::IfcGeographicElementTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcGeographicElementTypeEnum::Value) Ifc4x3_tc1::IfcGeographicElementTypeEnum::IfcGeographicElementTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcGeographicElementTypeEnum::operator Ifc4x3_tc1::IfcGeographicElementTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcGeographicElementTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcGeometricProjectionEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[504]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcGeometricProjectionEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[504]); }

Ifc4x3_tc1::IfcGeometricProjectionEnum::IfcGeometricProjectionEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcGeometricProjectionEnum::IfcGeometricProjectionEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcGeometricProjectionEnum::IfcGeometricProjectionEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcGeometricProjectionEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcGeometricProjectionEnum::IfcGeometricProjectionEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcGeometricProjectionEnum::Value Ifc4x3_tc1::IfcGeometricProjectionEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcGeometricProjectionEnum::Value) Ifc4x3_tc1::IfcGeometricProjectionEnum::IfcGeometricProjectionEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcGeometricProjectionEnum::operator Ifc4x3_tc1::IfcGeometricProjectionEnum::Value() const {
    return (Ifc4x3_tc1::IfcGeometricProjectionEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[515]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[515]); }

Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::IfcGeotechnicalStratumTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::IfcGeotechnicalStratumTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::IfcGeotechnicalStratumTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::IfcGeotechnicalStratumTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::Value Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::Value) Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::IfcGeotechnicalStratumTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::operator Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcGlobalOrLocalEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[517]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcGlobalOrLocalEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[517]); }

Ifc4x3_tc1::IfcGlobalOrLocalEnum::IfcGlobalOrLocalEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcGlobalOrLocalEnum::IfcGlobalOrLocalEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcGlobalOrLocalEnum::IfcGlobalOrLocalEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcGlobalOrLocalEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcGlobalOrLocalEnum::IfcGlobalOrLocalEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value Ifc4x3_tc1::IfcGlobalOrLocalEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value) Ifc4x3_tc1::IfcGlobalOrLocalEnum::IfcGlobalOrLocalEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcGlobalOrLocalEnum::operator Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value() const {
    return (Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcGridTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[523]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcGridTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[523]); }

Ifc4x3_tc1::IfcGridTypeEnum::IfcGridTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcGridTypeEnum::IfcGridTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcGridTypeEnum::IfcGridTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcGridTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcGridTypeEnum::IfcGridTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcGridTypeEnum::Value Ifc4x3_tc1::IfcGridTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcGridTypeEnum::Value) Ifc4x3_tc1::IfcGridTypeEnum::IfcGridTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcGridTypeEnum::operator Ifc4x3_tc1::IfcGridTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcGridTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcHeatExchangerTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[529]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[529]); }

Ifc4x3_tc1::IfcHeatExchangerTypeEnum::IfcHeatExchangerTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcHeatExchangerTypeEnum::IfcHeatExchangerTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcHeatExchangerTypeEnum::IfcHeatExchangerTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcHeatExchangerTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcHeatExchangerTypeEnum::IfcHeatExchangerTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Value Ifc4x3_tc1::IfcHeatExchangerTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Value) Ifc4x3_tc1::IfcHeatExchangerTypeEnum::IfcHeatExchangerTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcHeatExchangerTypeEnum::operator Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcHumidifierTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[534]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcHumidifierTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[534]); }

Ifc4x3_tc1::IfcHumidifierTypeEnum::IfcHumidifierTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcHumidifierTypeEnum::IfcHumidifierTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcHumidifierTypeEnum::IfcHumidifierTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcHumidifierTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcHumidifierTypeEnum::IfcHumidifierTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcHumidifierTypeEnum::Value Ifc4x3_tc1::IfcHumidifierTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcHumidifierTypeEnum::Value) Ifc4x3_tc1::IfcHumidifierTypeEnum::IfcHumidifierTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcHumidifierTypeEnum::operator Ifc4x3_tc1::IfcHumidifierTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcHumidifierTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[540]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[540]); }

Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Value Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Value) Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::operator Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcInterceptorTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[553]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcInterceptorTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[553]); }

Ifc4x3_tc1::IfcInterceptorTypeEnum::IfcInterceptorTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcInterceptorTypeEnum::IfcInterceptorTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcInterceptorTypeEnum::IfcInterceptorTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcInterceptorTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcInterceptorTypeEnum::IfcInterceptorTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcInterceptorTypeEnum::Value Ifc4x3_tc1::IfcInterceptorTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcInterceptorTypeEnum::Value) Ifc4x3_tc1::IfcInterceptorTypeEnum::IfcInterceptorTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcInterceptorTypeEnum::operator Ifc4x3_tc1::IfcInterceptorTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcInterceptorTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcInternalOrExternalEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[555]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcInternalOrExternalEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[555]); }

Ifc4x3_tc1::IfcInternalOrExternalEnum::IfcInternalOrExternalEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcInternalOrExternalEnum::IfcInternalOrExternalEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcInternalOrExternalEnum::IfcInternalOrExternalEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcInternalOrExternalEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcInternalOrExternalEnum::IfcInternalOrExternalEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcInternalOrExternalEnum::Value Ifc4x3_tc1::IfcInternalOrExternalEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcInternalOrExternalEnum::Value) Ifc4x3_tc1::IfcInternalOrExternalEnum::IfcInternalOrExternalEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcInternalOrExternalEnum::operator Ifc4x3_tc1::IfcInternalOrExternalEnum::Value() const {
    return (Ifc4x3_tc1::IfcInternalOrExternalEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcInventoryTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[558]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcInventoryTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[558]); }

Ifc4x3_tc1::IfcInventoryTypeEnum::IfcInventoryTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcInventoryTypeEnum::IfcInventoryTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcInventoryTypeEnum::IfcInventoryTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcInventoryTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcInventoryTypeEnum::IfcInventoryTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcInventoryTypeEnum::Value Ifc4x3_tc1::IfcInventoryTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcInventoryTypeEnum::Value) Ifc4x3_tc1::IfcInventoryTypeEnum::IfcInventoryTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcInventoryTypeEnum::operator Ifc4x3_tc1::IfcInventoryTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcInventoryTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcJunctionBoxTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[566]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[566]); }

Ifc4x3_tc1::IfcJunctionBoxTypeEnum::IfcJunctionBoxTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcJunctionBoxTypeEnum::IfcJunctionBoxTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcJunctionBoxTypeEnum::IfcJunctionBoxTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcJunctionBoxTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcJunctionBoxTypeEnum::IfcJunctionBoxTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Value Ifc4x3_tc1::IfcJunctionBoxTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Value) Ifc4x3_tc1::IfcJunctionBoxTypeEnum::IfcJunctionBoxTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcJunctionBoxTypeEnum::operator Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcKerbTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[569]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcKerbTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[569]); }

Ifc4x3_tc1::IfcKerbTypeEnum::IfcKerbTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcKerbTypeEnum::IfcKerbTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcKerbTypeEnum::IfcKerbTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcKerbTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcKerbTypeEnum::IfcKerbTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcKerbTypeEnum::Value Ifc4x3_tc1::IfcKerbTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcKerbTypeEnum::Value) Ifc4x3_tc1::IfcKerbTypeEnum::IfcKerbTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcKerbTypeEnum::operator Ifc4x3_tc1::IfcKerbTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcKerbTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcKnotType::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[571]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcKnotType::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[571]); }

Ifc4x3_tc1::IfcKnotType::IfcKnotType(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcKnotType::IfcKnotType(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcKnotType::IfcKnotType(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcKnotType::ToString(Value v) {
    return Ifc4x3_tc1::IfcKnotType::IfcKnotType::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcKnotType::Value Ifc4x3_tc1::IfcKnotType::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcKnotType::Value) Ifc4x3_tc1::IfcKnotType::IfcKnotType::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcKnotType::operator Ifc4x3_tc1::IfcKnotType::Value() const {
    return (Ifc4x3_tc1::IfcKnotType::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLaborResourceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[575]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLaborResourceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[575]); }

Ifc4x3_tc1::IfcLaborResourceTypeEnum::IfcLaborResourceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcLaborResourceTypeEnum::IfcLaborResourceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcLaborResourceTypeEnum::IfcLaborResourceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcLaborResourceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcLaborResourceTypeEnum::IfcLaborResourceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcLaborResourceTypeEnum::Value Ifc4x3_tc1::IfcLaborResourceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcLaborResourceTypeEnum::Value) Ifc4x3_tc1::IfcLaborResourceTypeEnum::IfcLaborResourceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcLaborResourceTypeEnum::operator Ifc4x3_tc1::IfcLaborResourceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcLaborResourceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLampTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[579]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLampTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[579]); }

Ifc4x3_tc1::IfcLampTypeEnum::IfcLampTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcLampTypeEnum::IfcLampTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcLampTypeEnum::IfcLampTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcLampTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcLampTypeEnum::IfcLampTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcLampTypeEnum::Value Ifc4x3_tc1::IfcLampTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcLampTypeEnum::Value) Ifc4x3_tc1::IfcLampTypeEnum::IfcLampTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcLampTypeEnum::operator Ifc4x3_tc1::IfcLampTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcLampTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLayerSetDirectionEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[582]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLayerSetDirectionEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[582]); }

Ifc4x3_tc1::IfcLayerSetDirectionEnum::IfcLayerSetDirectionEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcLayerSetDirectionEnum::IfcLayerSetDirectionEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcLayerSetDirectionEnum::IfcLayerSetDirectionEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcLayerSetDirectionEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcLayerSetDirectionEnum::IfcLayerSetDirectionEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcLayerSetDirectionEnum::Value Ifc4x3_tc1::IfcLayerSetDirectionEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcLayerSetDirectionEnum::Value) Ifc4x3_tc1::IfcLayerSetDirectionEnum::IfcLayerSetDirectionEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcLayerSetDirectionEnum::operator Ifc4x3_tc1::IfcLayerSetDirectionEnum::Value() const {
    return (Ifc4x3_tc1::IfcLayerSetDirectionEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLightDistributionCurveEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[587]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLightDistributionCurveEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[587]); }

Ifc4x3_tc1::IfcLightDistributionCurveEnum::IfcLightDistributionCurveEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcLightDistributionCurveEnum::IfcLightDistributionCurveEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcLightDistributionCurveEnum::IfcLightDistributionCurveEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcLightDistributionCurveEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcLightDistributionCurveEnum::IfcLightDistributionCurveEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcLightDistributionCurveEnum::Value Ifc4x3_tc1::IfcLightDistributionCurveEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcLightDistributionCurveEnum::Value) Ifc4x3_tc1::IfcLightDistributionCurveEnum::IfcLightDistributionCurveEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcLightDistributionCurveEnum::operator Ifc4x3_tc1::IfcLightDistributionCurveEnum::Value() const {
    return (Ifc4x3_tc1::IfcLightDistributionCurveEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLightEmissionSourceEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[590]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLightEmissionSourceEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[590]); }

Ifc4x3_tc1::IfcLightEmissionSourceEnum::IfcLightEmissionSourceEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcLightEmissionSourceEnum::IfcLightEmissionSourceEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcLightEmissionSourceEnum::IfcLightEmissionSourceEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcLightEmissionSourceEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcLightEmissionSourceEnum::IfcLightEmissionSourceEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcLightEmissionSourceEnum::Value Ifc4x3_tc1::IfcLightEmissionSourceEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcLightEmissionSourceEnum::Value) Ifc4x3_tc1::IfcLightEmissionSourceEnum::IfcLightEmissionSourceEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcLightEmissionSourceEnum::operator Ifc4x3_tc1::IfcLightEmissionSourceEnum::Value() const {
    return (Ifc4x3_tc1::IfcLightEmissionSourceEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLightFixtureTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[593]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLightFixtureTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[593]); }

Ifc4x3_tc1::IfcLightFixtureTypeEnum::IfcLightFixtureTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcLightFixtureTypeEnum::IfcLightFixtureTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcLightFixtureTypeEnum::IfcLightFixtureTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcLightFixtureTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcLightFixtureTypeEnum::IfcLightFixtureTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcLightFixtureTypeEnum::Value Ifc4x3_tc1::IfcLightFixtureTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcLightFixtureTypeEnum::Value) Ifc4x3_tc1::IfcLightFixtureTypeEnum::IfcLightFixtureTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcLightFixtureTypeEnum::operator Ifc4x3_tc1::IfcLightFixtureTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcLightFixtureTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[612]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[612]); }

Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::IfcLiquidTerminalTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::IfcLiquidTerminalTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::IfcLiquidTerminalTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::IfcLiquidTerminalTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Value Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Value) Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::IfcLiquidTerminalTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::operator Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLoadGroupTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[613]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLoadGroupTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[613]); }

Ifc4x3_tc1::IfcLoadGroupTypeEnum::IfcLoadGroupTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcLoadGroupTypeEnum::IfcLoadGroupTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcLoadGroupTypeEnum::IfcLoadGroupTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcLoadGroupTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcLoadGroupTypeEnum::IfcLoadGroupTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcLoadGroupTypeEnum::Value Ifc4x3_tc1::IfcLoadGroupTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcLoadGroupTypeEnum::Value) Ifc4x3_tc1::IfcLoadGroupTypeEnum::IfcLoadGroupTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcLoadGroupTypeEnum::operator Ifc4x3_tc1::IfcLoadGroupTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcLoadGroupTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLogicalOperatorEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[616]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcLogicalOperatorEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[616]); }

Ifc4x3_tc1::IfcLogicalOperatorEnum::IfcLogicalOperatorEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcLogicalOperatorEnum::IfcLogicalOperatorEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcLogicalOperatorEnum::IfcLogicalOperatorEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcLogicalOperatorEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcLogicalOperatorEnum::IfcLogicalOperatorEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcLogicalOperatorEnum::Value Ifc4x3_tc1::IfcLogicalOperatorEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcLogicalOperatorEnum::Value) Ifc4x3_tc1::IfcLogicalOperatorEnum::IfcLogicalOperatorEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcLogicalOperatorEnum::operator Ifc4x3_tc1::IfcLogicalOperatorEnum::Value() const {
    return (Ifc4x3_tc1::IfcLogicalOperatorEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMarineFacilityTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[628]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMarineFacilityTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[628]); }

Ifc4x3_tc1::IfcMarineFacilityTypeEnum::IfcMarineFacilityTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcMarineFacilityTypeEnum::IfcMarineFacilityTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcMarineFacilityTypeEnum::IfcMarineFacilityTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcMarineFacilityTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcMarineFacilityTypeEnum::IfcMarineFacilityTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcMarineFacilityTypeEnum::Value Ifc4x3_tc1::IfcMarineFacilityTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcMarineFacilityTypeEnum::Value) Ifc4x3_tc1::IfcMarineFacilityTypeEnum::IfcMarineFacilityTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcMarineFacilityTypeEnum::operator Ifc4x3_tc1::IfcMarineFacilityTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcMarineFacilityTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMarinePartTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[630]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMarinePartTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[630]); }

Ifc4x3_tc1::IfcMarinePartTypeEnum::IfcMarinePartTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcMarinePartTypeEnum::IfcMarinePartTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcMarinePartTypeEnum::IfcMarinePartTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcMarinePartTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcMarinePartTypeEnum::IfcMarinePartTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcMarinePartTypeEnum::Value Ifc4x3_tc1::IfcMarinePartTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcMarinePartTypeEnum::Value) Ifc4x3_tc1::IfcMarinePartTypeEnum::IfcMarinePartTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcMarinePartTypeEnum::operator Ifc4x3_tc1::IfcMarinePartTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcMarinePartTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[659]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[659]); }

Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Value Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Value) Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::operator Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[662]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[662]); }

Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Value Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Value) Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::operator Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMemberTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[665]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMemberTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[665]); }

Ifc4x3_tc1::IfcMemberTypeEnum::IfcMemberTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcMemberTypeEnum::IfcMemberTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcMemberTypeEnum::IfcMemberTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcMemberTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcMemberTypeEnum::IfcMemberTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcMemberTypeEnum::Value Ifc4x3_tc1::IfcMemberTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcMemberTypeEnum::Value) Ifc4x3_tc1::IfcMemberTypeEnum::IfcMemberTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcMemberTypeEnum::operator Ifc4x3_tc1::IfcMemberTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcMemberTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[671]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[671]); }

Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Value Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Value) Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::operator Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMooringDeviceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[687]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[687]); }

Ifc4x3_tc1::IfcMooringDeviceTypeEnum::IfcMooringDeviceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcMooringDeviceTypeEnum::IfcMooringDeviceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcMooringDeviceTypeEnum::IfcMooringDeviceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcMooringDeviceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcMooringDeviceTypeEnum::IfcMooringDeviceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Value Ifc4x3_tc1::IfcMooringDeviceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Value) Ifc4x3_tc1::IfcMooringDeviceTypeEnum::IfcMooringDeviceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcMooringDeviceTypeEnum::operator Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMotorConnectionTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[690]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[690]); }

Ifc4x3_tc1::IfcMotorConnectionTypeEnum::IfcMotorConnectionTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcMotorConnectionTypeEnum::IfcMotorConnectionTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcMotorConnectionTypeEnum::IfcMotorConnectionTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcMotorConnectionTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcMotorConnectionTypeEnum::IfcMotorConnectionTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Value Ifc4x3_tc1::IfcMotorConnectionTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Value) Ifc4x3_tc1::IfcMotorConnectionTypeEnum::IfcMotorConnectionTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcMotorConnectionTypeEnum::operator Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcNavigationElementTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[694]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcNavigationElementTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[694]); }

Ifc4x3_tc1::IfcNavigationElementTypeEnum::IfcNavigationElementTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcNavigationElementTypeEnum::IfcNavigationElementTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcNavigationElementTypeEnum::IfcNavigationElementTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcNavigationElementTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcNavigationElementTypeEnum::IfcNavigationElementTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcNavigationElementTypeEnum::Value Ifc4x3_tc1::IfcNavigationElementTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcNavigationElementTypeEnum::Value) Ifc4x3_tc1::IfcNavigationElementTypeEnum::IfcNavigationElementTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcNavigationElementTypeEnum::operator Ifc4x3_tc1::IfcNavigationElementTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcNavigationElementTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcObjectiveEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[701]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcObjectiveEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[701]); }

Ifc4x3_tc1::IfcObjectiveEnum::IfcObjectiveEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcObjectiveEnum::IfcObjectiveEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcObjectiveEnum::IfcObjectiveEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcObjectiveEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcObjectiveEnum::IfcObjectiveEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcObjectiveEnum::Value Ifc4x3_tc1::IfcObjectiveEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcObjectiveEnum::Value) Ifc4x3_tc1::IfcObjectiveEnum::IfcObjectiveEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcObjectiveEnum::operator Ifc4x3_tc1::IfcObjectiveEnum::Value() const {
    return (Ifc4x3_tc1::IfcObjectiveEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcOccupantTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[705]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcOccupantTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[705]); }

Ifc4x3_tc1::IfcOccupantTypeEnum::IfcOccupantTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcOccupantTypeEnum::IfcOccupantTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcOccupantTypeEnum::IfcOccupantTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcOccupantTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcOccupantTypeEnum::IfcOccupantTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcOccupantTypeEnum::Value Ifc4x3_tc1::IfcOccupantTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcOccupantTypeEnum::Value) Ifc4x3_tc1::IfcOccupantTypeEnum::IfcOccupantTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcOccupantTypeEnum::operator Ifc4x3_tc1::IfcOccupantTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcOccupantTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcOpeningElementTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[712]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcOpeningElementTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[712]); }

Ifc4x3_tc1::IfcOpeningElementTypeEnum::IfcOpeningElementTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcOpeningElementTypeEnum::IfcOpeningElementTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcOpeningElementTypeEnum::IfcOpeningElementTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcOpeningElementTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcOpeningElementTypeEnum::IfcOpeningElementTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcOpeningElementTypeEnum::Value Ifc4x3_tc1::IfcOpeningElementTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcOpeningElementTypeEnum::Value) Ifc4x3_tc1::IfcOpeningElementTypeEnum::IfcOpeningElementTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcOpeningElementTypeEnum::operator Ifc4x3_tc1::IfcOpeningElementTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcOpeningElementTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcOutletTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[720]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcOutletTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[720]); }

Ifc4x3_tc1::IfcOutletTypeEnum::IfcOutletTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcOutletTypeEnum::IfcOutletTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcOutletTypeEnum::IfcOutletTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcOutletTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcOutletTypeEnum::IfcOutletTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcOutletTypeEnum::Value Ifc4x3_tc1::IfcOutletTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcOutletTypeEnum::Value) Ifc4x3_tc1::IfcOutletTypeEnum::IfcOutletTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcOutletTypeEnum::operator Ifc4x3_tc1::IfcOutletTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcOutletTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPavementTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[727]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPavementTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[727]); }

Ifc4x3_tc1::IfcPavementTypeEnum::IfcPavementTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcPavementTypeEnum::IfcPavementTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcPavementTypeEnum::IfcPavementTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcPavementTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcPavementTypeEnum::IfcPavementTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcPavementTypeEnum::Value Ifc4x3_tc1::IfcPavementTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcPavementTypeEnum::Value) Ifc4x3_tc1::IfcPavementTypeEnum::IfcPavementTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcPavementTypeEnum::operator Ifc4x3_tc1::IfcPavementTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcPavementTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[730]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[730]); }

Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::IfcPerformanceHistoryTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::IfcPerformanceHistoryTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::IfcPerformanceHistoryTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::IfcPerformanceHistoryTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::Value Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::Value) Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::IfcPerformanceHistoryTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::operator Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[731]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[731]); }

Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::IfcPermeableCoveringOperationEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::IfcPermeableCoveringOperationEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::IfcPermeableCoveringOperationEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::IfcPermeableCoveringOperationEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::Value Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::Value) Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::IfcPermeableCoveringOperationEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::operator Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::Value() const {
    return (Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPermitTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[734]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPermitTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[734]); }

Ifc4x3_tc1::IfcPermitTypeEnum::IfcPermitTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcPermitTypeEnum::IfcPermitTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcPermitTypeEnum::IfcPermitTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcPermitTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcPermitTypeEnum::IfcPermitTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcPermitTypeEnum::Value Ifc4x3_tc1::IfcPermitTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcPermitTypeEnum::Value) Ifc4x3_tc1::IfcPermitTypeEnum::IfcPermitTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcPermitTypeEnum::operator Ifc4x3_tc1::IfcPermitTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcPermitTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[739]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[739]); }

Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::IfcPhysicalOrVirtualEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::IfcPhysicalOrVirtualEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::IfcPhysicalOrVirtualEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::IfcPhysicalOrVirtualEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Value Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Value) Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::IfcPhysicalOrVirtualEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::operator Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Value() const {
    return (Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPileConstructionEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[743]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPileConstructionEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[743]); }

Ifc4x3_tc1::IfcPileConstructionEnum::IfcPileConstructionEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcPileConstructionEnum::IfcPileConstructionEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcPileConstructionEnum::IfcPileConstructionEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcPileConstructionEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcPileConstructionEnum::IfcPileConstructionEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcPileConstructionEnum::Value Ifc4x3_tc1::IfcPileConstructionEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcPileConstructionEnum::Value) Ifc4x3_tc1::IfcPileConstructionEnum::IfcPileConstructionEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcPileConstructionEnum::operator Ifc4x3_tc1::IfcPileConstructionEnum::Value() const {
    return (Ifc4x3_tc1::IfcPileConstructionEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPileTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[745]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPileTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[745]); }

Ifc4x3_tc1::IfcPileTypeEnum::IfcPileTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcPileTypeEnum::IfcPileTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcPileTypeEnum::IfcPileTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcPileTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcPileTypeEnum::IfcPileTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcPileTypeEnum::Value Ifc4x3_tc1::IfcPileTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcPileTypeEnum::Value) Ifc4x3_tc1::IfcPileTypeEnum::IfcPileTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcPileTypeEnum::operator Ifc4x3_tc1::IfcPileTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcPileTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPipeFittingTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[748]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPipeFittingTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[748]); }

Ifc4x3_tc1::IfcPipeFittingTypeEnum::IfcPipeFittingTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcPipeFittingTypeEnum::IfcPipeFittingTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcPipeFittingTypeEnum::IfcPipeFittingTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcPipeFittingTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcPipeFittingTypeEnum::IfcPipeFittingTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcPipeFittingTypeEnum::Value Ifc4x3_tc1::IfcPipeFittingTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcPipeFittingTypeEnum::Value) Ifc4x3_tc1::IfcPipeFittingTypeEnum::IfcPipeFittingTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcPipeFittingTypeEnum::operator Ifc4x3_tc1::IfcPipeFittingTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcPipeFittingTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPipeSegmentTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[751]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[751]); }

Ifc4x3_tc1::IfcPipeSegmentTypeEnum::IfcPipeSegmentTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcPipeSegmentTypeEnum::IfcPipeSegmentTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcPipeSegmentTypeEnum::IfcPipeSegmentTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcPipeSegmentTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcPipeSegmentTypeEnum::IfcPipeSegmentTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Value Ifc4x3_tc1::IfcPipeSegmentTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Value) Ifc4x3_tc1::IfcPipeSegmentTypeEnum::IfcPipeSegmentTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcPipeSegmentTypeEnum::operator Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPlateTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[761]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPlateTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[761]); }

Ifc4x3_tc1::IfcPlateTypeEnum::IfcPlateTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcPlateTypeEnum::IfcPlateTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcPlateTypeEnum::IfcPlateTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcPlateTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcPlateTypeEnum::IfcPlateTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcPlateTypeEnum::Value Ifc4x3_tc1::IfcPlateTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcPlateTypeEnum::Value) Ifc4x3_tc1::IfcPlateTypeEnum::IfcPlateTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcPlateTypeEnum::operator Ifc4x3_tc1::IfcPlateTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcPlateTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[786]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[786]); }

Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::ToString(Value v) {
    return Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Value Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Value) Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::operator Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Value() const {
    return (Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProcedureTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[795]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProcedureTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[795]); }

Ifc4x3_tc1::IfcProcedureTypeEnum::IfcProcedureTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcProcedureTypeEnum::IfcProcedureTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcProcedureTypeEnum::IfcProcedureTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcProcedureTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcProcedureTypeEnum::IfcProcedureTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcProcedureTypeEnum::Value Ifc4x3_tc1::IfcProcedureTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcProcedureTypeEnum::Value) Ifc4x3_tc1::IfcProcedureTypeEnum::IfcProcedureTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcProcedureTypeEnum::operator Ifc4x3_tc1::IfcProcedureTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcProcedureTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProfileTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[805]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProfileTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[805]); }

Ifc4x3_tc1::IfcProfileTypeEnum::IfcProfileTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcProfileTypeEnum::IfcProfileTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcProfileTypeEnum::IfcProfileTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcProfileTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcProfileTypeEnum::IfcProfileTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcProfileTypeEnum::Value Ifc4x3_tc1::IfcProfileTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcProfileTypeEnum::Value) Ifc4x3_tc1::IfcProfileTypeEnum::IfcProfileTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcProfileTypeEnum::operator Ifc4x3_tc1::IfcProfileTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcProfileTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProjectOrderTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[813]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProjectOrderTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[813]); }

Ifc4x3_tc1::IfcProjectOrderTypeEnum::IfcProjectOrderTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcProjectOrderTypeEnum::IfcProjectOrderTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcProjectOrderTypeEnum::IfcProjectOrderTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcProjectOrderTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcProjectOrderTypeEnum::IfcProjectOrderTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcProjectOrderTypeEnum::Value Ifc4x3_tc1::IfcProjectOrderTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcProjectOrderTypeEnum::Value) Ifc4x3_tc1::IfcProjectOrderTypeEnum::IfcProjectOrderTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcProjectOrderTypeEnum::operator Ifc4x3_tc1::IfcProjectOrderTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcProjectOrderTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[808]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[808]); }

Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::IfcProjectedOrTrueLengthEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::IfcProjectedOrTrueLengthEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::IfcProjectedOrTrueLengthEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::IfcProjectedOrTrueLengthEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Value Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Value) Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::IfcProjectedOrTrueLengthEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::operator Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Value() const {
    return (Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProjectionElementTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[810]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProjectionElementTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[810]); }

Ifc4x3_tc1::IfcProjectionElementTypeEnum::IfcProjectionElementTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcProjectionElementTypeEnum::IfcProjectionElementTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcProjectionElementTypeEnum::IfcProjectionElementTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcProjectionElementTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcProjectionElementTypeEnum::IfcProjectionElementTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcProjectionElementTypeEnum::Value Ifc4x3_tc1::IfcProjectionElementTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcProjectionElementTypeEnum::Value) Ifc4x3_tc1::IfcProjectionElementTypeEnum::IfcProjectionElementTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcProjectionElementTypeEnum::operator Ifc4x3_tc1::IfcProjectionElementTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcProjectionElementTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[828]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[828]); }

Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::Value Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::Value) Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::operator Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[836]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[836]); }

Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Value Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Value) Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::operator Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[838]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[838]); }

Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Value Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Value) Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::operator Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPumpTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[841]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcPumpTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[841]); }

Ifc4x3_tc1::IfcPumpTypeEnum::IfcPumpTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcPumpTypeEnum::IfcPumpTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcPumpTypeEnum::IfcPumpTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcPumpTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcPumpTypeEnum::IfcPumpTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcPumpTypeEnum::Value Ifc4x3_tc1::IfcPumpTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcPumpTypeEnum::Value) Ifc4x3_tc1::IfcPumpTypeEnum::IfcPumpTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcPumpTypeEnum::operator Ifc4x3_tc1::IfcPumpTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcPumpTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRailTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[856]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRailTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[856]); }

Ifc4x3_tc1::IfcRailTypeEnum::IfcRailTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcRailTypeEnum::IfcRailTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcRailTypeEnum::IfcRailTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcRailTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcRailTypeEnum::IfcRailTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcRailTypeEnum::Value Ifc4x3_tc1::IfcRailTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcRailTypeEnum::Value) Ifc4x3_tc1::IfcRailTypeEnum::IfcRailTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcRailTypeEnum::operator Ifc4x3_tc1::IfcRailTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcRailTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRailingTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[854]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRailingTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[854]); }

Ifc4x3_tc1::IfcRailingTypeEnum::IfcRailingTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcRailingTypeEnum::IfcRailingTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcRailingTypeEnum::IfcRailingTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcRailingTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcRailingTypeEnum::IfcRailingTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcRailingTypeEnum::Value Ifc4x3_tc1::IfcRailingTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcRailingTypeEnum::Value) Ifc4x3_tc1::IfcRailingTypeEnum::IfcRailingTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcRailingTypeEnum::operator Ifc4x3_tc1::IfcRailingTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcRailingTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRailwayPartTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[859]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRailwayPartTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[859]); }

Ifc4x3_tc1::IfcRailwayPartTypeEnum::IfcRailwayPartTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcRailwayPartTypeEnum::IfcRailwayPartTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcRailwayPartTypeEnum::IfcRailwayPartTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcRailwayPartTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcRailwayPartTypeEnum::IfcRailwayPartTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcRailwayPartTypeEnum::Value Ifc4x3_tc1::IfcRailwayPartTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcRailwayPartTypeEnum::Value) Ifc4x3_tc1::IfcRailwayPartTypeEnum::IfcRailwayPartTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcRailwayPartTypeEnum::operator Ifc4x3_tc1::IfcRailwayPartTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcRailwayPartTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRailwayTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[860]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRailwayTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[860]); }

Ifc4x3_tc1::IfcRailwayTypeEnum::IfcRailwayTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcRailwayTypeEnum::IfcRailwayTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcRailwayTypeEnum::IfcRailwayTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcRailwayTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcRailwayTypeEnum::IfcRailwayTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcRailwayTypeEnum::Value Ifc4x3_tc1::IfcRailwayTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcRailwayTypeEnum::Value) Ifc4x3_tc1::IfcRailwayTypeEnum::IfcRailwayTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcRailwayTypeEnum::operator Ifc4x3_tc1::IfcRailwayTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcRailwayTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRampFlightTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[864]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRampFlightTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[864]); }

Ifc4x3_tc1::IfcRampFlightTypeEnum::IfcRampFlightTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcRampFlightTypeEnum::IfcRampFlightTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcRampFlightTypeEnum::IfcRampFlightTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcRampFlightTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcRampFlightTypeEnum::IfcRampFlightTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcRampFlightTypeEnum::Value Ifc4x3_tc1::IfcRampFlightTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcRampFlightTypeEnum::Value) Ifc4x3_tc1::IfcRampFlightTypeEnum::IfcRampFlightTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcRampFlightTypeEnum::operator Ifc4x3_tc1::IfcRampFlightTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcRampFlightTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRampTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[866]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRampTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[866]); }

Ifc4x3_tc1::IfcRampTypeEnum::IfcRampTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcRampTypeEnum::IfcRampTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcRampTypeEnum::IfcRampTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcRampTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcRampTypeEnum::IfcRampTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcRampTypeEnum::Value Ifc4x3_tc1::IfcRampTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcRampTypeEnum::Value) Ifc4x3_tc1::IfcRampTypeEnum::IfcRampTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcRampTypeEnum::operator Ifc4x3_tc1::IfcRampTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcRampTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRecurrenceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[876]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRecurrenceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[876]); }

Ifc4x3_tc1::IfcRecurrenceTypeEnum::IfcRecurrenceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcRecurrenceTypeEnum::IfcRecurrenceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcRecurrenceTypeEnum::IfcRecurrenceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcRecurrenceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcRecurrenceTypeEnum::IfcRecurrenceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcRecurrenceTypeEnum::Value Ifc4x3_tc1::IfcRecurrenceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcRecurrenceTypeEnum::Value) Ifc4x3_tc1::IfcRecurrenceTypeEnum::IfcRecurrenceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcRecurrenceTypeEnum::operator Ifc4x3_tc1::IfcRecurrenceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcRecurrenceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReferentTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[879]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReferentTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[879]); }

Ifc4x3_tc1::IfcReferentTypeEnum::IfcReferentTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcReferentTypeEnum::IfcReferentTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcReferentTypeEnum::IfcReferentTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcReferentTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcReferentTypeEnum::IfcReferentTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcReferentTypeEnum::Value Ifc4x3_tc1::IfcReferentTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcReferentTypeEnum::Value) Ifc4x3_tc1::IfcReferentTypeEnum::IfcReferentTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcReferentTypeEnum::operator Ifc4x3_tc1::IfcReferentTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcReferentTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReflectanceMethodEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[880]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReflectanceMethodEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[880]); }

Ifc4x3_tc1::IfcReflectanceMethodEnum::IfcReflectanceMethodEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcReflectanceMethodEnum::IfcReflectanceMethodEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcReflectanceMethodEnum::IfcReflectanceMethodEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcReflectanceMethodEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcReflectanceMethodEnum::IfcReflectanceMethodEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcReflectanceMethodEnum::Value Ifc4x3_tc1::IfcReflectanceMethodEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcReflectanceMethodEnum::Value) Ifc4x3_tc1::IfcReflectanceMethodEnum::IfcReflectanceMethodEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcReflectanceMethodEnum::operator Ifc4x3_tc1::IfcReflectanceMethodEnum::Value() const {
    return (Ifc4x3_tc1::IfcReflectanceMethodEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[883]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[883]); }

Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::Value Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::Value) Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::operator Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReinforcingBarRoleEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[887]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReinforcingBarRoleEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[887]); }

Ifc4x3_tc1::IfcReinforcingBarRoleEnum::IfcReinforcingBarRoleEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcReinforcingBarRoleEnum::IfcReinforcingBarRoleEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcReinforcingBarRoleEnum::IfcReinforcingBarRoleEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcReinforcingBarRoleEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcReinforcingBarRoleEnum::IfcReinforcingBarRoleEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcReinforcingBarRoleEnum::Value Ifc4x3_tc1::IfcReinforcingBarRoleEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcReinforcingBarRoleEnum::Value) Ifc4x3_tc1::IfcReinforcingBarRoleEnum::IfcReinforcingBarRoleEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcReinforcingBarRoleEnum::operator Ifc4x3_tc1::IfcReinforcingBarRoleEnum::Value() const {
    return (Ifc4x3_tc1::IfcReinforcingBarRoleEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[888]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[888]); }

Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::IfcReinforcingBarSurfaceEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::IfcReinforcingBarSurfaceEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::IfcReinforcingBarSurfaceEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::IfcReinforcingBarSurfaceEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Value Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Value) Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::IfcReinforcingBarSurfaceEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::operator Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Value() const {
    return (Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReinforcingBarTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[890]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[890]); }

Ifc4x3_tc1::IfcReinforcingBarTypeEnum::IfcReinforcingBarTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcReinforcingBarTypeEnum::IfcReinforcingBarTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcReinforcingBarTypeEnum::IfcReinforcingBarTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcReinforcingBarTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcReinforcingBarTypeEnum::IfcReinforcingBarTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Value Ifc4x3_tc1::IfcReinforcingBarTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Value) Ifc4x3_tc1::IfcReinforcingBarTypeEnum::IfcReinforcingBarTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcReinforcingBarTypeEnum::operator Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[895]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[895]); }

Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::IfcReinforcingMeshTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::IfcReinforcingMeshTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::IfcReinforcingMeshTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::IfcReinforcingMeshTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Value Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Value) Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::IfcReinforcingMeshTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::operator Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRoadPartTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[965]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRoadPartTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[965]); }

Ifc4x3_tc1::IfcRoadPartTypeEnum::IfcRoadPartTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcRoadPartTypeEnum::IfcRoadPartTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcRoadPartTypeEnum::IfcRoadPartTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcRoadPartTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcRoadPartTypeEnum::IfcRoadPartTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcRoadPartTypeEnum::Value Ifc4x3_tc1::IfcRoadPartTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcRoadPartTypeEnum::Value) Ifc4x3_tc1::IfcRoadPartTypeEnum::IfcRoadPartTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcRoadPartTypeEnum::operator Ifc4x3_tc1::IfcRoadPartTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcRoadPartTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRoadTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[966]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRoadTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[966]); }

Ifc4x3_tc1::IfcRoadTypeEnum::IfcRoadTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcRoadTypeEnum::IfcRoadTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcRoadTypeEnum::IfcRoadTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcRoadTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcRoadTypeEnum::IfcRoadTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcRoadTypeEnum::Value Ifc4x3_tc1::IfcRoadTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcRoadTypeEnum::Value) Ifc4x3_tc1::IfcRoadTypeEnum::IfcRoadTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcRoadTypeEnum::operator Ifc4x3_tc1::IfcRoadTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcRoadTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRoleEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[967]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRoleEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[967]); }

Ifc4x3_tc1::IfcRoleEnum::IfcRoleEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcRoleEnum::IfcRoleEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcRoleEnum::IfcRoleEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcRoleEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcRoleEnum::IfcRoleEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcRoleEnum::Value Ifc4x3_tc1::IfcRoleEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcRoleEnum::Value) Ifc4x3_tc1::IfcRoleEnum::IfcRoleEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcRoleEnum::operator Ifc4x3_tc1::IfcRoleEnum::Value() const {
    return (Ifc4x3_tc1::IfcRoleEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRoofTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[970]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcRoofTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[970]); }

Ifc4x3_tc1::IfcRoofTypeEnum::IfcRoofTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcRoofTypeEnum::IfcRoofTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcRoofTypeEnum::IfcRoofTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcRoofTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcRoofTypeEnum::IfcRoofTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcRoofTypeEnum::Value Ifc4x3_tc1::IfcRoofTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcRoofTypeEnum::Value) Ifc4x3_tc1::IfcRoofTypeEnum::IfcRoofTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcRoofTypeEnum::operator Ifc4x3_tc1::IfcRoofTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcRoofTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSIPrefix::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1020]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSIPrefix::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1020]); }

Ifc4x3_tc1::IfcSIPrefix::IfcSIPrefix(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSIPrefix::IfcSIPrefix(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSIPrefix::IfcSIPrefix(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSIPrefix::ToString(Value v) {
    return Ifc4x3_tc1::IfcSIPrefix::IfcSIPrefix::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSIPrefix::Value Ifc4x3_tc1::IfcSIPrefix::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSIPrefix::Value) Ifc4x3_tc1::IfcSIPrefix::IfcSIPrefix::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSIPrefix::operator Ifc4x3_tc1::IfcSIPrefix::Value() const {
    return (Ifc4x3_tc1::IfcSIPrefix::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSIUnitName::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1023]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSIUnitName::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1023]); }

Ifc4x3_tc1::IfcSIUnitName::IfcSIUnitName(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSIUnitName::IfcSIUnitName(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSIUnitName::IfcSIUnitName(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSIUnitName::ToString(Value v) {
    return Ifc4x3_tc1::IfcSIUnitName::IfcSIUnitName::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSIUnitName::Value Ifc4x3_tc1::IfcSIUnitName::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSIUnitName::Value) Ifc4x3_tc1::IfcSIUnitName::IfcSIUnitName::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSIUnitName::operator Ifc4x3_tc1::IfcSIUnitName::Value() const {
    return (Ifc4x3_tc1::IfcSIUnitName::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[979]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[979]); }

Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Value Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Value) Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::operator Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSectionTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[991]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSectionTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[991]); }

Ifc4x3_tc1::IfcSectionTypeEnum::IfcSectionTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSectionTypeEnum::IfcSectionTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSectionTypeEnum::IfcSectionTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSectionTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSectionTypeEnum::IfcSectionTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSectionTypeEnum::Value Ifc4x3_tc1::IfcSectionTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSectionTypeEnum::Value) Ifc4x3_tc1::IfcSectionTypeEnum::IfcSectionTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSectionTypeEnum::operator Ifc4x3_tc1::IfcSectionTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSectionTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSensorTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[997]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSensorTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[997]); }

Ifc4x3_tc1::IfcSensorTypeEnum::IfcSensorTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSensorTypeEnum::IfcSensorTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSensorTypeEnum::IfcSensorTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSensorTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSensorTypeEnum::IfcSensorTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSensorTypeEnum::Value Ifc4x3_tc1::IfcSensorTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSensorTypeEnum::Value) Ifc4x3_tc1::IfcSensorTypeEnum::IfcSensorTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSensorTypeEnum::operator Ifc4x3_tc1::IfcSensorTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSensorTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSequenceEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[998]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSequenceEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[998]); }

Ifc4x3_tc1::IfcSequenceEnum::IfcSequenceEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSequenceEnum::IfcSequenceEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSequenceEnum::IfcSequenceEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSequenceEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSequenceEnum::IfcSequenceEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSequenceEnum::Value Ifc4x3_tc1::IfcSequenceEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSequenceEnum::Value) Ifc4x3_tc1::IfcSequenceEnum::IfcSequenceEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSequenceEnum::operator Ifc4x3_tc1::IfcSequenceEnum::Value() const {
    return (Ifc4x3_tc1::IfcSequenceEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcShadingDeviceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1002]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1002]); }

Ifc4x3_tc1::IfcShadingDeviceTypeEnum::IfcShadingDeviceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcShadingDeviceTypeEnum::IfcShadingDeviceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcShadingDeviceTypeEnum::IfcShadingDeviceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcShadingDeviceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcShadingDeviceTypeEnum::IfcShadingDeviceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Value Ifc4x3_tc1::IfcShadingDeviceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Value) Ifc4x3_tc1::IfcShadingDeviceTypeEnum::IfcShadingDeviceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcShadingDeviceTypeEnum::operator Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSignTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1014]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSignTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1014]); }

Ifc4x3_tc1::IfcSignTypeEnum::IfcSignTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSignTypeEnum::IfcSignTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSignTypeEnum::IfcSignTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSignTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSignTypeEnum::IfcSignTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSignTypeEnum::Value Ifc4x3_tc1::IfcSignTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSignTypeEnum::Value) Ifc4x3_tc1::IfcSignTypeEnum::IfcSignTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSignTypeEnum::operator Ifc4x3_tc1::IfcSignTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSignTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSignalTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1012]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSignalTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1012]); }

Ifc4x3_tc1::IfcSignalTypeEnum::IfcSignalTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSignalTypeEnum::IfcSignalTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSignalTypeEnum::IfcSignalTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSignalTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSignalTypeEnum::IfcSignalTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSignalTypeEnum::Value Ifc4x3_tc1::IfcSignalTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSignalTypeEnum::Value) Ifc4x3_tc1::IfcSignalTypeEnum::IfcSignalTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSignalTypeEnum::operator Ifc4x3_tc1::IfcSignalTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSignalTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1017]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1017]); }

Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::Value Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::Value) Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::operator Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSlabTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1027]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSlabTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1027]); }

Ifc4x3_tc1::IfcSlabTypeEnum::IfcSlabTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSlabTypeEnum::IfcSlabTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSlabTypeEnum::IfcSlabTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSlabTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSlabTypeEnum::IfcSlabTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSlabTypeEnum::Value Ifc4x3_tc1::IfcSlabTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSlabTypeEnum::Value) Ifc4x3_tc1::IfcSlabTypeEnum::IfcSlabTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSlabTypeEnum::operator Ifc4x3_tc1::IfcSlabTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSlabTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSolarDeviceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1031]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1031]); }

Ifc4x3_tc1::IfcSolarDeviceTypeEnum::IfcSolarDeviceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSolarDeviceTypeEnum::IfcSolarDeviceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSolarDeviceTypeEnum::IfcSolarDeviceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSolarDeviceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSolarDeviceTypeEnum::IfcSolarDeviceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Value Ifc4x3_tc1::IfcSolarDeviceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Value) Ifc4x3_tc1::IfcSolarDeviceTypeEnum::IfcSolarDeviceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSolarDeviceTypeEnum::operator Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1043]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1043]); }

Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::IfcSpaceHeaterTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::IfcSpaceHeaterTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::IfcSpaceHeaterTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::IfcSpaceHeaterTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Value Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Value) Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::IfcSpaceHeaterTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::operator Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSpaceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1045]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSpaceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1045]); }

Ifc4x3_tc1::IfcSpaceTypeEnum::IfcSpaceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSpaceTypeEnum::IfcSpaceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSpaceTypeEnum::IfcSpaceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSpaceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSpaceTypeEnum::IfcSpaceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSpaceTypeEnum::Value Ifc4x3_tc1::IfcSpaceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSpaceTypeEnum::Value) Ifc4x3_tc1::IfcSpaceTypeEnum::IfcSpaceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSpaceTypeEnum::operator Ifc4x3_tc1::IfcSpaceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSpaceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSpatialZoneTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1053]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1053]); }

Ifc4x3_tc1::IfcSpatialZoneTypeEnum::IfcSpatialZoneTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSpatialZoneTypeEnum::IfcSpatialZoneTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSpatialZoneTypeEnum::IfcSpatialZoneTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSpatialZoneTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSpatialZoneTypeEnum::IfcSpatialZoneTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Value Ifc4x3_tc1::IfcSpatialZoneTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Value) Ifc4x3_tc1::IfcSpatialZoneTypeEnum::IfcSpatialZoneTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSpatialZoneTypeEnum::operator Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStackTerminalTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1063]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStackTerminalTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1063]); }

Ifc4x3_tc1::IfcStackTerminalTypeEnum::IfcStackTerminalTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcStackTerminalTypeEnum::IfcStackTerminalTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcStackTerminalTypeEnum::IfcStackTerminalTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcStackTerminalTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcStackTerminalTypeEnum::IfcStackTerminalTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcStackTerminalTypeEnum::Value Ifc4x3_tc1::IfcStackTerminalTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcStackTerminalTypeEnum::Value) Ifc4x3_tc1::IfcStackTerminalTypeEnum::IfcStackTerminalTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcStackTerminalTypeEnum::operator Ifc4x3_tc1::IfcStackTerminalTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcStackTerminalTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStairFlightTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1067]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStairFlightTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1067]); }

Ifc4x3_tc1::IfcStairFlightTypeEnum::IfcStairFlightTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcStairFlightTypeEnum::IfcStairFlightTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcStairFlightTypeEnum::IfcStairFlightTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcStairFlightTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcStairFlightTypeEnum::IfcStairFlightTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcStairFlightTypeEnum::Value Ifc4x3_tc1::IfcStairFlightTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcStairFlightTypeEnum::Value) Ifc4x3_tc1::IfcStairFlightTypeEnum::IfcStairFlightTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcStairFlightTypeEnum::operator Ifc4x3_tc1::IfcStairFlightTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcStairFlightTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStairTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1069]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStairTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1069]); }

Ifc4x3_tc1::IfcStairTypeEnum::IfcStairTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcStairTypeEnum::IfcStairTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcStairTypeEnum::IfcStairTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcStairTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcStairTypeEnum::IfcStairTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcStairTypeEnum::Value Ifc4x3_tc1::IfcStairTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcStairTypeEnum::Value) Ifc4x3_tc1::IfcStairTypeEnum::IfcStairTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcStairTypeEnum::operator Ifc4x3_tc1::IfcStairTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcStairTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStateEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1070]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStateEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1070]); }

Ifc4x3_tc1::IfcStateEnum::IfcStateEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcStateEnum::IfcStateEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcStateEnum::IfcStateEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcStateEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcStateEnum::IfcStateEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcStateEnum::Value Ifc4x3_tc1::IfcStateEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcStateEnum::Value) Ifc4x3_tc1::IfcStateEnum::IfcStateEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcStateEnum::operator Ifc4x3_tc1::IfcStateEnum::Value() const {
    return (Ifc4x3_tc1::IfcStateEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1079]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1079]); }

Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Value Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Value) Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::operator Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1082]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1082]); }

Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::Value Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::Value) Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::operator Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1108]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1108]); }

Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Value Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Value) Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::operator Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1111]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1111]); }

Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::IfcStructuralSurfaceMemberTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::IfcStructuralSurfaceMemberTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::IfcStructuralSurfaceMemberTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::IfcStructuralSurfaceMemberTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::Value Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::Value) Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::IfcStructuralSurfaceMemberTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::operator Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSubContractResourceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1119]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1119]); }

Ifc4x3_tc1::IfcSubContractResourceTypeEnum::IfcSubContractResourceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSubContractResourceTypeEnum::IfcSubContractResourceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSubContractResourceTypeEnum::IfcSubContractResourceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSubContractResourceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSubContractResourceTypeEnum::IfcSubContractResourceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Value Ifc4x3_tc1::IfcSubContractResourceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Value) Ifc4x3_tc1::IfcSubContractResourceTypeEnum::IfcSubContractResourceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSubContractResourceTypeEnum::operator Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1125]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1125]); }

Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::Value Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::Value) Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::operator Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSurfaceSide::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1130]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSurfaceSide::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1130]); }

Ifc4x3_tc1::IfcSurfaceSide::IfcSurfaceSide(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSurfaceSide::IfcSurfaceSide(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSurfaceSide::IfcSurfaceSide(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSurfaceSide::ToString(Value v) {
    return Ifc4x3_tc1::IfcSurfaceSide::IfcSurfaceSide::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSurfaceSide::Value Ifc4x3_tc1::IfcSurfaceSide::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSurfaceSide::Value) Ifc4x3_tc1::IfcSurfaceSide::IfcSurfaceSide::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSurfaceSide::operator Ifc4x3_tc1::IfcSurfaceSide::Value() const {
    return (Ifc4x3_tc1::IfcSurfaceSide::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1145]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1145]); }

Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Value Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Value) Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::operator Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1149]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1149]); }

Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::IfcSystemFurnitureElementTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::IfcSystemFurnitureElementTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::IfcSystemFurnitureElementTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::IfcSystemFurnitureElementTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Value Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Value) Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::IfcSystemFurnitureElementTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::operator Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTankTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1155]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTankTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1155]); }

Ifc4x3_tc1::IfcTankTypeEnum::IfcTankTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTankTypeEnum::IfcTankTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTankTypeEnum::IfcTankTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTankTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcTankTypeEnum::IfcTankTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTankTypeEnum::Value Ifc4x3_tc1::IfcTankTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTankTypeEnum::Value) Ifc4x3_tc1::IfcTankTypeEnum::IfcTankTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTankTypeEnum::operator Ifc4x3_tc1::IfcTankTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcTankTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTaskDurationEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1157]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTaskDurationEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1157]); }

Ifc4x3_tc1::IfcTaskDurationEnum::IfcTaskDurationEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTaskDurationEnum::IfcTaskDurationEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTaskDurationEnum::IfcTaskDurationEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTaskDurationEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcTaskDurationEnum::IfcTaskDurationEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTaskDurationEnum::Value Ifc4x3_tc1::IfcTaskDurationEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTaskDurationEnum::Value) Ifc4x3_tc1::IfcTaskDurationEnum::IfcTaskDurationEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTaskDurationEnum::operator Ifc4x3_tc1::IfcTaskDurationEnum::Value() const {
    return (Ifc4x3_tc1::IfcTaskDurationEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTaskTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1161]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTaskTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1161]); }

Ifc4x3_tc1::IfcTaskTypeEnum::IfcTaskTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTaskTypeEnum::IfcTaskTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTaskTypeEnum::IfcTaskTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTaskTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcTaskTypeEnum::IfcTaskTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTaskTypeEnum::Value Ifc4x3_tc1::IfcTaskTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTaskTypeEnum::Value) Ifc4x3_tc1::IfcTaskTypeEnum::IfcTaskTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTaskTypeEnum::operator Ifc4x3_tc1::IfcTaskTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcTaskTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTendonAnchorTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1168]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1168]); }

Ifc4x3_tc1::IfcTendonAnchorTypeEnum::IfcTendonAnchorTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTendonAnchorTypeEnum::IfcTendonAnchorTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTendonAnchorTypeEnum::IfcTendonAnchorTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTendonAnchorTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcTendonAnchorTypeEnum::IfcTendonAnchorTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Value Ifc4x3_tc1::IfcTendonAnchorTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Value) Ifc4x3_tc1::IfcTendonAnchorTypeEnum::IfcTendonAnchorTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTendonAnchorTypeEnum::operator Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTendonConduitTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1171]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTendonConduitTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1171]); }

Ifc4x3_tc1::IfcTendonConduitTypeEnum::IfcTendonConduitTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTendonConduitTypeEnum::IfcTendonConduitTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTendonConduitTypeEnum::IfcTendonConduitTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTendonConduitTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcTendonConduitTypeEnum::IfcTendonConduitTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTendonConduitTypeEnum::Value Ifc4x3_tc1::IfcTendonConduitTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTendonConduitTypeEnum::Value) Ifc4x3_tc1::IfcTendonConduitTypeEnum::IfcTendonConduitTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTendonConduitTypeEnum::operator Ifc4x3_tc1::IfcTendonConduitTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcTendonConduitTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTendonTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1173]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTendonTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1173]); }

Ifc4x3_tc1::IfcTendonTypeEnum::IfcTendonTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTendonTypeEnum::IfcTendonTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTendonTypeEnum::IfcTendonTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTendonTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcTendonTypeEnum::IfcTendonTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTendonTypeEnum::Value Ifc4x3_tc1::IfcTendonTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTendonTypeEnum::Value) Ifc4x3_tc1::IfcTendonTypeEnum::IfcTendonTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTendonTypeEnum::operator Ifc4x3_tc1::IfcTendonTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcTendonTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTextPath::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1183]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTextPath::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1183]); }

Ifc4x3_tc1::IfcTextPath::IfcTextPath(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTextPath::IfcTextPath(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTextPath::IfcTextPath(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTextPath::ToString(Value v) {
    return Ifc4x3_tc1::IfcTextPath::IfcTextPath::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTextPath::Value Ifc4x3_tc1::IfcTextPath::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTextPath::Value) Ifc4x3_tc1::IfcTextPath::IfcTextPath::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTextPath::operator Ifc4x3_tc1::IfcTextPath::Value() const {
    return (Ifc4x3_tc1::IfcTextPath::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1208]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1208]); }

Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Value Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Value) Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::operator Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTrackElementTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1217]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTrackElementTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1217]); }

Ifc4x3_tc1::IfcTrackElementTypeEnum::IfcTrackElementTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTrackElementTypeEnum::IfcTrackElementTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTrackElementTypeEnum::IfcTrackElementTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTrackElementTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcTrackElementTypeEnum::IfcTrackElementTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTrackElementTypeEnum::Value Ifc4x3_tc1::IfcTrackElementTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTrackElementTypeEnum::Value) Ifc4x3_tc1::IfcTrackElementTypeEnum::IfcTrackElementTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTrackElementTypeEnum::operator Ifc4x3_tc1::IfcTrackElementTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcTrackElementTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTransformerTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1220]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTransformerTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1220]); }

Ifc4x3_tc1::IfcTransformerTypeEnum::IfcTransformerTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTransformerTypeEnum::IfcTransformerTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTransformerTypeEnum::IfcTransformerTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTransformerTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcTransformerTypeEnum::IfcTransformerTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTransformerTypeEnum::Value Ifc4x3_tc1::IfcTransformerTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTransformerTypeEnum::Value) Ifc4x3_tc1::IfcTransformerTypeEnum::IfcTransformerTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTransformerTypeEnum::operator Ifc4x3_tc1::IfcTransformerTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcTransformerTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTransitionCode::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1221]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTransitionCode::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1221]); }

Ifc4x3_tc1::IfcTransitionCode::IfcTransitionCode(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTransitionCode::IfcTransitionCode(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTransitionCode::IfcTransitionCode(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTransitionCode::ToString(Value v) {
    return Ifc4x3_tc1::IfcTransitionCode::IfcTransitionCode::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTransitionCode::Value Ifc4x3_tc1::IfcTransitionCode::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTransitionCode::Value) Ifc4x3_tc1::IfcTransitionCode::IfcTransitionCode::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTransitionCode::operator Ifc4x3_tc1::IfcTransitionCode::Value() const {
    return (Ifc4x3_tc1::IfcTransitionCode::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTransportElementTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1227]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTransportElementTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1227]); }

Ifc4x3_tc1::IfcTransportElementTypeEnum::IfcTransportElementTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTransportElementTypeEnum::IfcTransportElementTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTransportElementTypeEnum::IfcTransportElementTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTransportElementTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcTransportElementTypeEnum::IfcTransportElementTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTransportElementTypeEnum::Value Ifc4x3_tc1::IfcTransportElementTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTransportElementTypeEnum::Value) Ifc4x3_tc1::IfcTransportElementTypeEnum::IfcTransportElementTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTransportElementTypeEnum::operator Ifc4x3_tc1::IfcTransportElementTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcTransportElementTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTrimmingPreference::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1232]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTrimmingPreference::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1232]); }

Ifc4x3_tc1::IfcTrimmingPreference::IfcTrimmingPreference(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTrimmingPreference::IfcTrimmingPreference(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTrimmingPreference::IfcTrimmingPreference(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTrimmingPreference::ToString(Value v) {
    return Ifc4x3_tc1::IfcTrimmingPreference::IfcTrimmingPreference::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTrimmingPreference::Value Ifc4x3_tc1::IfcTrimmingPreference::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTrimmingPreference::Value) Ifc4x3_tc1::IfcTrimmingPreference::IfcTrimmingPreference::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTrimmingPreference::operator Ifc4x3_tc1::IfcTrimmingPreference::Value() const {
    return (Ifc4x3_tc1::IfcTrimmingPreference::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTubeBundleTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1237]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcTubeBundleTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1237]); }

Ifc4x3_tc1::IfcTubeBundleTypeEnum::IfcTubeBundleTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcTubeBundleTypeEnum::IfcTubeBundleTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcTubeBundleTypeEnum::IfcTubeBundleTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcTubeBundleTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcTubeBundleTypeEnum::IfcTubeBundleTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcTubeBundleTypeEnum::Value Ifc4x3_tc1::IfcTubeBundleTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcTubeBundleTypeEnum::Value) Ifc4x3_tc1::IfcTubeBundleTypeEnum::IfcTubeBundleTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcTubeBundleTypeEnum::operator Ifc4x3_tc1::IfcTubeBundleTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcTubeBundleTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcUnitEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1250]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcUnitEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1250]); }

Ifc4x3_tc1::IfcUnitEnum::IfcUnitEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcUnitEnum::IfcUnitEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcUnitEnum::IfcUnitEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcUnitEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcUnitEnum::IfcUnitEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcUnitEnum::Value Ifc4x3_tc1::IfcUnitEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcUnitEnum::Value) Ifc4x3_tc1::IfcUnitEnum::IfcUnitEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcUnitEnum::operator Ifc4x3_tc1::IfcUnitEnum::Value() const {
    return (Ifc4x3_tc1::IfcUnitEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1245]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1245]); }

Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Value Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Value) Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::operator Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1248]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1248]); }

Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Value Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Value) Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::operator Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcValveTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1256]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcValveTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1256]); }

Ifc4x3_tc1::IfcValveTypeEnum::IfcValveTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcValveTypeEnum::IfcValveTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcValveTypeEnum::IfcValveTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcValveTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcValveTypeEnum::IfcValveTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcValveTypeEnum::Value Ifc4x3_tc1::IfcValveTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcValveTypeEnum::Value) Ifc4x3_tc1::IfcValveTypeEnum::IfcValveTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcValveTypeEnum::operator Ifc4x3_tc1::IfcValveTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcValveTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcVehicleTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1262]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcVehicleTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1262]); }

Ifc4x3_tc1::IfcVehicleTypeEnum::IfcVehicleTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcVehicleTypeEnum::IfcVehicleTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcVehicleTypeEnum::IfcVehicleTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcVehicleTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcVehicleTypeEnum::IfcVehicleTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcVehicleTypeEnum::Value Ifc4x3_tc1::IfcVehicleTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcVehicleTypeEnum::Value) Ifc4x3_tc1::IfcVehicleTypeEnum::IfcVehicleTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcVehicleTypeEnum::operator Ifc4x3_tc1::IfcVehicleTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcVehicleTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcVibrationDamperTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1268]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1268]); }

Ifc4x3_tc1::IfcVibrationDamperTypeEnum::IfcVibrationDamperTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcVibrationDamperTypeEnum::IfcVibrationDamperTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcVibrationDamperTypeEnum::IfcVibrationDamperTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcVibrationDamperTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcVibrationDamperTypeEnum::IfcVibrationDamperTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Value Ifc4x3_tc1::IfcVibrationDamperTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Value) Ifc4x3_tc1::IfcVibrationDamperTypeEnum::IfcVibrationDamperTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcVibrationDamperTypeEnum::operator Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1271]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1271]); }

Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::IfcVibrationIsolatorTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::IfcVibrationIsolatorTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::IfcVibrationIsolatorTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::IfcVibrationIsolatorTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Value Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Value) Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::IfcVibrationIsolatorTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::operator Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcVirtualElementTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1273]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcVirtualElementTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1273]); }

Ifc4x3_tc1::IfcVirtualElementTypeEnum::IfcVirtualElementTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcVirtualElementTypeEnum::IfcVirtualElementTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcVirtualElementTypeEnum::IfcVirtualElementTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcVirtualElementTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcVirtualElementTypeEnum::IfcVirtualElementTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcVirtualElementTypeEnum::Value Ifc4x3_tc1::IfcVirtualElementTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcVirtualElementTypeEnum::Value) Ifc4x3_tc1::IfcVirtualElementTypeEnum::IfcVirtualElementTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcVirtualElementTypeEnum::operator Ifc4x3_tc1::IfcVirtualElementTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcVirtualElementTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1276]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1276]); }

Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::Value Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::Value) Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::operator Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWallTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1282]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWallTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1282]); }

Ifc4x3_tc1::IfcWallTypeEnum::IfcWallTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcWallTypeEnum::IfcWallTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcWallTypeEnum::IfcWallTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcWallTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcWallTypeEnum::IfcWallTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcWallTypeEnum::Value Ifc4x3_tc1::IfcWallTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcWallTypeEnum::Value) Ifc4x3_tc1::IfcWallTypeEnum::IfcWallTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcWallTypeEnum::operator Ifc4x3_tc1::IfcWallTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcWallTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWasteTerminalTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1288]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1288]); }

Ifc4x3_tc1::IfcWasteTerminalTypeEnum::IfcWasteTerminalTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcWasteTerminalTypeEnum::IfcWasteTerminalTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcWasteTerminalTypeEnum::IfcWasteTerminalTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcWasteTerminalTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcWasteTerminalTypeEnum::IfcWasteTerminalTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Value Ifc4x3_tc1::IfcWasteTerminalTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Value) Ifc4x3_tc1::IfcWasteTerminalTypeEnum::IfcWasteTerminalTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcWasteTerminalTypeEnum::operator Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWindowPanelOperationEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1291]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWindowPanelOperationEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1291]); }

Ifc4x3_tc1::IfcWindowPanelOperationEnum::IfcWindowPanelOperationEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcWindowPanelOperationEnum::IfcWindowPanelOperationEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcWindowPanelOperationEnum::IfcWindowPanelOperationEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcWindowPanelOperationEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcWindowPanelOperationEnum::IfcWindowPanelOperationEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcWindowPanelOperationEnum::Value Ifc4x3_tc1::IfcWindowPanelOperationEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcWindowPanelOperationEnum::Value) Ifc4x3_tc1::IfcWindowPanelOperationEnum::IfcWindowPanelOperationEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcWindowPanelOperationEnum::operator Ifc4x3_tc1::IfcWindowPanelOperationEnum::Value() const {
    return (Ifc4x3_tc1::IfcWindowPanelOperationEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWindowPanelPositionEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1292]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWindowPanelPositionEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1292]); }

Ifc4x3_tc1::IfcWindowPanelPositionEnum::IfcWindowPanelPositionEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcWindowPanelPositionEnum::IfcWindowPanelPositionEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcWindowPanelPositionEnum::IfcWindowPanelPositionEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcWindowPanelPositionEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcWindowPanelPositionEnum::IfcWindowPanelPositionEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcWindowPanelPositionEnum::Value Ifc4x3_tc1::IfcWindowPanelPositionEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcWindowPanelPositionEnum::Value) Ifc4x3_tc1::IfcWindowPanelPositionEnum::IfcWindowPanelPositionEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcWindowPanelPositionEnum::operator Ifc4x3_tc1::IfcWindowPanelPositionEnum::Value() const {
    return (Ifc4x3_tc1::IfcWindowPanelPositionEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWindowTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1295]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWindowTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1295]); }

Ifc4x3_tc1::IfcWindowTypeEnum::IfcWindowTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcWindowTypeEnum::IfcWindowTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcWindowTypeEnum::IfcWindowTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcWindowTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcWindowTypeEnum::IfcWindowTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcWindowTypeEnum::Value Ifc4x3_tc1::IfcWindowTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcWindowTypeEnum::Value) Ifc4x3_tc1::IfcWindowTypeEnum::IfcWindowTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcWindowTypeEnum::operator Ifc4x3_tc1::IfcWindowTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcWindowTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWindowTypePartitioningEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1296]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1296]); }

Ifc4x3_tc1::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioningEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioningEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioningEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcWindowTypePartitioningEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioningEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Value Ifc4x3_tc1::IfcWindowTypePartitioningEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Value) Ifc4x3_tc1::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioningEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcWindowTypePartitioningEnum::operator Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Value() const {
    return (Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWorkCalendarTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1298]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWorkCalendarTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1298]); }

Ifc4x3_tc1::IfcWorkCalendarTypeEnum::IfcWorkCalendarTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcWorkCalendarTypeEnum::IfcWorkCalendarTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcWorkCalendarTypeEnum::IfcWorkCalendarTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcWorkCalendarTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcWorkCalendarTypeEnum::IfcWorkCalendarTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcWorkCalendarTypeEnum::Value Ifc4x3_tc1::IfcWorkCalendarTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcWorkCalendarTypeEnum::Value) Ifc4x3_tc1::IfcWorkCalendarTypeEnum::IfcWorkCalendarTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcWorkCalendarTypeEnum::operator Ifc4x3_tc1::IfcWorkCalendarTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcWorkCalendarTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWorkPlanTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1301]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWorkPlanTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1301]); }

Ifc4x3_tc1::IfcWorkPlanTypeEnum::IfcWorkPlanTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcWorkPlanTypeEnum::IfcWorkPlanTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcWorkPlanTypeEnum::IfcWorkPlanTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcWorkPlanTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcWorkPlanTypeEnum::IfcWorkPlanTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcWorkPlanTypeEnum::Value Ifc4x3_tc1::IfcWorkPlanTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcWorkPlanTypeEnum::Value) Ifc4x3_tc1::IfcWorkPlanTypeEnum::IfcWorkPlanTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcWorkPlanTypeEnum::operator Ifc4x3_tc1::IfcWorkPlanTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcWorkPlanTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWorkScheduleTypeEnum::declaration() const { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1303]); }
const IfcParse::enumeration_type& Ifc4x3_tc1::IfcWorkScheduleTypeEnum::Class() { return *((IfcParse::enumeration_type*)IFC4X3_TC1_types[1303]); }

Ifc4x3_tc1::IfcWorkScheduleTypeEnum::IfcWorkScheduleTypeEnum(IfcEntityInstanceData&& e)
    : IfcBaseType(std::move(e))
{}

Ifc4x3_tc1::IfcWorkScheduleTypeEnum::IfcWorkScheduleTypeEnum(Value v) {
    set_attribute_value(0, EnumerationReference(&declaration(), static_cast<size_t>(v)));
}

Ifc4x3_tc1::IfcWorkScheduleTypeEnum::IfcWorkScheduleTypeEnum(const std::string& v) {
    set_attribute_value(0, EnumerationReference(&declaration(), declaration().lookup_enum_offset(v)));
}

const char* Ifc4x3_tc1::IfcWorkScheduleTypeEnum::ToString(Value v) {
    return Ifc4x3_tc1::IfcWorkScheduleTypeEnum::IfcWorkScheduleTypeEnum::Class().lookup_enum_value((size_t)v);
}

Ifc4x3_tc1::IfcWorkScheduleTypeEnum::Value Ifc4x3_tc1::IfcWorkScheduleTypeEnum::FromString(const std::string& s) {
    return (Ifc4x3_tc1::IfcWorkScheduleTypeEnum::Value) Ifc4x3_tc1::IfcWorkScheduleTypeEnum::IfcWorkScheduleTypeEnum::Class().lookup_enum_offset(s);
}

Ifc4x3_tc1::IfcWorkScheduleTypeEnum::operator Ifc4x3_tc1::IfcWorkScheduleTypeEnum::Value() const {
    return (Ifc4x3_tc1::IfcWorkScheduleTypeEnum::Value) data_.storage_.get<EnumerationReference>(0).index();
}

const IfcParse::select_type& Ifc4x3_tc1::IfcActorSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[8]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcAppliedValueSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[51]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcAxis2Placement::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[68]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcBendingParameterSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[79]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcBooleanOperand::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[88]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcClassificationReferenceSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[170]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcClassificationSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[171]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcColour::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[177]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcColourOrFactor::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[178]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcCoordinateReferenceSystemSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[245]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcCsgSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[263]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcCurveFontOrScaledCurveFontSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[274]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcCurveMeasureSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[276]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcCurveOnSurface::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[277]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcCurveOrEdgeCurve::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[278]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcCurveStyleFontSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[284]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcDefinitionSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[296]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcDerivedMeasureValue::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[297]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcDocumentSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[333]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcFillStyleSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[458]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcGeometricSetSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[509]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcGridPlacementDirectionSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[522]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcHatchLineDistanceSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[526]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcInterferenceSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[554]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcLayeredItem::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[581]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcLibrarySelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[586]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcLightDistributionDataSourceSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[589]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcMaterialSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[653]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcMeasureValue::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[655]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcMetricValueSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[667]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[675]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcModulusOfSubgradeReactionSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[677]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcModulusOfTranslationalSubgradeReactionSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[678]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcObjectReferenceSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[703]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcPointOrVertexPoint::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[766]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcProcessSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[797]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcProductRepresentationSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[801]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcProductSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[802]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcPropertySetDefinitionSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[825]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcResourceObjectSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[956]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcResourceSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[957]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcRotationalStiffnessSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[975]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcSegmentIndexSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[994]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcShell::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1007]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcSimpleValue::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1018]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcSizeSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1024]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcSolidOrShell::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1034]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcSpaceBoundarySelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1040]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcSpatialReferenceSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1048]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcSpecularHighlightSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1056]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcStructuralActivityAssignmentSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1074]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcSurfaceOrFaceSurface::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1128]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcSurfaceStyleElementSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1132]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcTextFontSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1180]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcTimeOrRatioSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1205]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcTranslationalStiffnessSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1222]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcTrimmingSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1233]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcUnit::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1242]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcValue::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1253]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcVectorOrDirection::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1259]); }

const IfcParse::select_type& Ifc4x3_tc1::IfcWarpingStiffnessSelect::Class() { return *((IfcParse::select_type*)IFC4X3_TC1_types[1285]); }


// Function implementations for IfcAbsorbedDoseMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcAbsorbedDoseMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[0]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcAbsorbedDoseMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[0]); }
Ifc4x3_tc1::IfcAbsorbedDoseMeasure::IfcAbsorbedDoseMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcAbsorbedDoseMeasure::IfcAbsorbedDoseMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcAbsorbedDoseMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcAccelerationMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcAccelerationMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcAccelerationMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1]); }
Ifc4x3_tc1::IfcAccelerationMeasure::IfcAccelerationMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcAccelerationMeasure::IfcAccelerationMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcAccelerationMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcAmountOfSubstanceMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcAmountOfSubstanceMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[42]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcAmountOfSubstanceMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[42]); }
Ifc4x3_tc1::IfcAmountOfSubstanceMeasure::IfcAmountOfSubstanceMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcAmountOfSubstanceMeasure::IfcAmountOfSubstanceMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcAmountOfSubstanceMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcAngularVelocityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcAngularVelocityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[45]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcAngularVelocityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[45]); }
Ifc4x3_tc1::IfcAngularVelocityMeasure::IfcAngularVelocityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcAngularVelocityMeasure::IfcAngularVelocityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcAngularVelocityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcArcIndex
const IfcParse::type_declaration& Ifc4x3_tc1::IfcArcIndex::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[57]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcArcIndex::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[57]); }
Ifc4x3_tc1::IfcArcIndex::IfcArcIndex(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcArcIndex::IfcArcIndex(std::vector< int > /*[3:3]*/ v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcArcIndex::operator std::vector< int > /*[3:3]*/() const { return data_.get_attribute_value(0); }

// Function implementations for IfcAreaDensityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcAreaDensityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[58]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcAreaDensityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[58]); }
Ifc4x3_tc1::IfcAreaDensityMeasure::IfcAreaDensityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcAreaDensityMeasure::IfcAreaDensityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcAreaDensityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcAreaMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcAreaMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[59]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcAreaMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[59]); }
Ifc4x3_tc1::IfcAreaMeasure::IfcAreaMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcAreaMeasure::IfcAreaMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcAreaMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcBinary
const IfcParse::type_declaration& Ifc4x3_tc1::IfcBinary::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[80]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcBinary::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[80]); }
Ifc4x3_tc1::IfcBinary::IfcBinary(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcBinary::IfcBinary(boost::dynamic_bitset<> v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcBinary::operator boost::dynamic_bitset<>() const { return data_.get_attribute_value(0); }

// Function implementations for IfcBoolean
const IfcParse::type_declaration& Ifc4x3_tc1::IfcBoolean::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[86]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcBoolean::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[86]); }
Ifc4x3_tc1::IfcBoolean::IfcBoolean(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcBoolean::IfcBoolean(bool v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcBoolean::operator bool() const { return data_.get_attribute_value(0); }

// Function implementations for IfcBoxAlignment
const IfcParse::type_declaration& Ifc4x3_tc1::IfcBoxAlignment::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[101]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcBoxAlignment::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[101]); }
Ifc4x3_tc1::IfcBoxAlignment::IfcBoxAlignment(IfcEntityInstanceData&& e) : IfcLabel(std::move(e)) {  }
Ifc4x3_tc1::IfcBoxAlignment::IfcBoxAlignment(std::string v) : IfcLabel(v) {  }
Ifc4x3_tc1::IfcBoxAlignment::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcCardinalPointReference
const IfcParse::type_declaration& Ifc4x3_tc1::IfcCardinalPointReference::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[145]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcCardinalPointReference::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[145]); }
Ifc4x3_tc1::IfcCardinalPointReference::IfcCardinalPointReference(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcCardinalPointReference::IfcCardinalPointReference(int v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcCardinalPointReference::operator int() const { return data_.get_attribute_value(0); }

// Function implementations for IfcComplexNumber
const IfcParse::type_declaration& Ifc4x3_tc1::IfcComplexNumber::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[188]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcComplexNumber::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[188]); }
Ifc4x3_tc1::IfcComplexNumber::IfcComplexNumber(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcComplexNumber::IfcComplexNumber(std::vector< double > /*[1:2]*/ v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcComplexNumber::operator std::vector< double > /*[1:2]*/() const { return data_.get_attribute_value(0); }

// Function implementations for IfcCompoundPlaneAngleMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcCompoundPlaneAngleMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[196]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcCompoundPlaneAngleMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[196]); }
Ifc4x3_tc1::IfcCompoundPlaneAngleMeasure::IfcCompoundPlaneAngleMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcCompoundPlaneAngleMeasure::IfcCompoundPlaneAngleMeasure(std::vector< int > /*[3:4]*/ v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcCompoundPlaneAngleMeasure::operator std::vector< int > /*[3:4]*/() const { return data_.get_attribute_value(0); }

// Function implementations for IfcContextDependentMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcContextDependentMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[226]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcContextDependentMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[226]); }
Ifc4x3_tc1::IfcContextDependentMeasure::IfcContextDependentMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcContextDependentMeasure::IfcContextDependentMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcContextDependentMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcCountMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcCountMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[252]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcCountMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[252]); }
Ifc4x3_tc1::IfcCountMeasure::IfcCountMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcCountMeasure::IfcCountMeasure(int v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcCountMeasure::operator int() const { return data_.get_attribute_value(0); }

// Function implementations for IfcCurvatureMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcCurvatureMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[270]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcCurvatureMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[270]); }
Ifc4x3_tc1::IfcCurvatureMeasure::IfcCurvatureMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcCurvatureMeasure::IfcCurvatureMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcCurvatureMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcDate
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDate::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[290]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDate::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[290]); }
Ifc4x3_tc1::IfcDate::IfcDate(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcDate::IfcDate(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcDate::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcDateTime
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDateTime::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[291]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDateTime::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[291]); }
Ifc4x3_tc1::IfcDateTime::IfcDateTime(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcDateTime::IfcDateTime(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcDateTime::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcDayInMonthNumber
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDayInMonthNumber::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[292]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDayInMonthNumber::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[292]); }
Ifc4x3_tc1::IfcDayInMonthNumber::IfcDayInMonthNumber(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcDayInMonthNumber::IfcDayInMonthNumber(int v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcDayInMonthNumber::operator int() const { return data_.get_attribute_value(0); }

// Function implementations for IfcDayInWeekNumber
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDayInWeekNumber::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[293]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDayInWeekNumber::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[293]); }
Ifc4x3_tc1::IfcDayInWeekNumber::IfcDayInWeekNumber(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcDayInWeekNumber::IfcDayInWeekNumber(int v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcDayInWeekNumber::operator int() const { return data_.get_attribute_value(0); }

// Function implementations for IfcDescriptiveMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDescriptiveMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[302]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDescriptiveMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[302]); }
Ifc4x3_tc1::IfcDescriptiveMeasure::IfcDescriptiveMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcDescriptiveMeasure::IfcDescriptiveMeasure(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcDescriptiveMeasure::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcDimensionCount
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDimensionCount::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[304]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDimensionCount::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[304]); }
Ifc4x3_tc1::IfcDimensionCount::IfcDimensionCount(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcDimensionCount::IfcDimensionCount(int v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcDimensionCount::operator int() const { return data_.get_attribute_value(0); }

// Function implementations for IfcDoseEquivalentMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDoseEquivalentMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[343]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDoseEquivalentMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[343]); }
Ifc4x3_tc1::IfcDoseEquivalentMeasure::IfcDoseEquivalentMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcDoseEquivalentMeasure::IfcDoseEquivalentMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcDoseEquivalentMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcDuration
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDuration::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[355]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDuration::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[355]); }
Ifc4x3_tc1::IfcDuration::IfcDuration(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcDuration::IfcDuration(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcDuration::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcDynamicViscosityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDynamicViscosityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[356]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcDynamicViscosityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[356]); }
Ifc4x3_tc1::IfcDynamicViscosityMeasure::IfcDynamicViscosityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcDynamicViscosityMeasure::IfcDynamicViscosityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcDynamicViscosityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcElectricCapacitanceMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcElectricCapacitanceMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[368]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcElectricCapacitanceMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[368]); }
Ifc4x3_tc1::IfcElectricCapacitanceMeasure::IfcElectricCapacitanceMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcElectricCapacitanceMeasure::IfcElectricCapacitanceMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcElectricCapacitanceMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcElectricChargeMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcElectricChargeMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[369]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcElectricChargeMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[369]); }
Ifc4x3_tc1::IfcElectricChargeMeasure::IfcElectricChargeMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcElectricChargeMeasure::IfcElectricChargeMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcElectricChargeMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcElectricConductanceMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcElectricConductanceMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[370]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcElectricConductanceMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[370]); }
Ifc4x3_tc1::IfcElectricConductanceMeasure::IfcElectricConductanceMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcElectricConductanceMeasure::IfcElectricConductanceMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcElectricConductanceMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcElectricCurrentMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcElectricCurrentMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[371]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcElectricCurrentMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[371]); }
Ifc4x3_tc1::IfcElectricCurrentMeasure::IfcElectricCurrentMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcElectricCurrentMeasure::IfcElectricCurrentMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcElectricCurrentMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcElectricResistanceMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcElectricResistanceMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[387]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcElectricResistanceMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[387]); }
Ifc4x3_tc1::IfcElectricResistanceMeasure::IfcElectricResistanceMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcElectricResistanceMeasure::IfcElectricResistanceMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcElectricResistanceMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcElectricVoltageMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcElectricVoltageMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[391]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcElectricVoltageMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[391]); }
Ifc4x3_tc1::IfcElectricVoltageMeasure::IfcElectricVoltageMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcElectricVoltageMeasure::IfcElectricVoltageMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcElectricVoltageMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcEnergyMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcEnergyMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[406]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcEnergyMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[406]); }
Ifc4x3_tc1::IfcEnergyMeasure::IfcEnergyMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcEnergyMeasure::IfcEnergyMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcEnergyMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcFontStyle
const IfcParse::type_declaration& Ifc4x3_tc1::IfcFontStyle::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[487]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcFontStyle::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[487]); }
Ifc4x3_tc1::IfcFontStyle::IfcFontStyle(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcFontStyle::IfcFontStyle(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcFontStyle::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcFontVariant
const IfcParse::type_declaration& Ifc4x3_tc1::IfcFontVariant::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[488]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcFontVariant::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[488]); }
Ifc4x3_tc1::IfcFontVariant::IfcFontVariant(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcFontVariant::IfcFontVariant(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcFontVariant::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcFontWeight
const IfcParse::type_declaration& Ifc4x3_tc1::IfcFontWeight::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[489]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcFontWeight::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[489]); }
Ifc4x3_tc1::IfcFontWeight::IfcFontWeight(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcFontWeight::IfcFontWeight(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcFontWeight::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcForceMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcForceMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[493]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcForceMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[493]); }
Ifc4x3_tc1::IfcForceMeasure::IfcForceMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcForceMeasure::IfcForceMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcForceMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcFrequencyMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcFrequencyMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[494]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcFrequencyMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[494]); }
Ifc4x3_tc1::IfcFrequencyMeasure::IfcFrequencyMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcFrequencyMeasure::IfcFrequencyMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcFrequencyMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcGloballyUniqueId
const IfcParse::type_declaration& Ifc4x3_tc1::IfcGloballyUniqueId::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[516]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcGloballyUniqueId::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[516]); }
Ifc4x3_tc1::IfcGloballyUniqueId::IfcGloballyUniqueId(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcGloballyUniqueId::IfcGloballyUniqueId(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcGloballyUniqueId::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcHeatFluxDensityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcHeatFluxDensityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[530]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcHeatFluxDensityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[530]); }
Ifc4x3_tc1::IfcHeatFluxDensityMeasure::IfcHeatFluxDensityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcHeatFluxDensityMeasure::IfcHeatFluxDensityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcHeatFluxDensityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcHeatingValueMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcHeatingValueMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[531]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcHeatingValueMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[531]); }
Ifc4x3_tc1::IfcHeatingValueMeasure::IfcHeatingValueMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcHeatingValueMeasure::IfcHeatingValueMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcHeatingValueMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcIdentifier
const IfcParse::type_declaration& Ifc4x3_tc1::IfcIdentifier::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[535]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcIdentifier::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[535]); }
Ifc4x3_tc1::IfcIdentifier::IfcIdentifier(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcIdentifier::IfcIdentifier(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcIdentifier::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcIlluminanceMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcIlluminanceMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[536]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcIlluminanceMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[536]); }
Ifc4x3_tc1::IfcIlluminanceMeasure::IfcIlluminanceMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcIlluminanceMeasure::IfcIlluminanceMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcIlluminanceMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcInductanceMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcInductanceMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[548]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcInductanceMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[548]); }
Ifc4x3_tc1::IfcInductanceMeasure::IfcInductanceMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcInductanceMeasure::IfcInductanceMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcInductanceMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcInteger
const IfcParse::type_declaration& Ifc4x3_tc1::IfcInteger::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[549]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcInteger::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[549]); }
Ifc4x3_tc1::IfcInteger::IfcInteger(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcInteger::IfcInteger(int v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcInteger::operator int() const { return data_.get_attribute_value(0); }

// Function implementations for IfcIntegerCountRateMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcIntegerCountRateMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[550]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcIntegerCountRateMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[550]); }
Ifc4x3_tc1::IfcIntegerCountRateMeasure::IfcIntegerCountRateMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcIntegerCountRateMeasure::IfcIntegerCountRateMeasure(int v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcIntegerCountRateMeasure::operator int() const { return data_.get_attribute_value(0); }

// Function implementations for IfcIonConcentrationMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcIonConcentrationMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[559]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcIonConcentrationMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[559]); }
Ifc4x3_tc1::IfcIonConcentrationMeasure::IfcIonConcentrationMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcIonConcentrationMeasure::IfcIonConcentrationMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcIonConcentrationMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcIsothermalMoistureCapacityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcIsothermalMoistureCapacityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[563]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcIsothermalMoistureCapacityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[563]); }
Ifc4x3_tc1::IfcIsothermalMoistureCapacityMeasure::IfcIsothermalMoistureCapacityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcIsothermalMoistureCapacityMeasure::IfcIsothermalMoistureCapacityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcIsothermalMoistureCapacityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcKinematicViscosityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcKinematicViscosityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[570]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcKinematicViscosityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[570]); }
Ifc4x3_tc1::IfcKinematicViscosityMeasure::IfcKinematicViscosityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcKinematicViscosityMeasure::IfcKinematicViscosityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcKinematicViscosityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcLabel
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLabel::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[572]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLabel::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[572]); }
Ifc4x3_tc1::IfcLabel::IfcLabel(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcLabel::IfcLabel(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcLabel::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcLanguageId
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLanguageId::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[580]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLanguageId::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[580]); }
Ifc4x3_tc1::IfcLanguageId::IfcLanguageId(IfcEntityInstanceData&& e) : IfcIdentifier(std::move(e)) {  }
Ifc4x3_tc1::IfcLanguageId::IfcLanguageId(std::string v) : IfcIdentifier(v) {  }
Ifc4x3_tc1::IfcLanguageId::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcLengthMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLengthMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[583]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLengthMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[583]); }
Ifc4x3_tc1::IfcLengthMeasure::IfcLengthMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcLengthMeasure::IfcLengthMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcLengthMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcLineIndex
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLineIndex::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[609]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLineIndex::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[609]); }
Ifc4x3_tc1::IfcLineIndex::IfcLineIndex(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcLineIndex::IfcLineIndex(std::vector< int > /*[2:?]*/ v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcLineIndex::operator std::vector< int > /*[2:?]*/() const { return data_.get_attribute_value(0); }

// Function implementations for IfcLinearForceMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLinearForceMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[603]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLinearForceMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[603]); }
Ifc4x3_tc1::IfcLinearForceMeasure::IfcLinearForceMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcLinearForceMeasure::IfcLinearForceMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcLinearForceMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcLinearMomentMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLinearMomentMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[604]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLinearMomentMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[604]); }
Ifc4x3_tc1::IfcLinearMomentMeasure::IfcLinearMomentMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcLinearMomentMeasure::IfcLinearMomentMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcLinearMomentMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcLinearStiffnessMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLinearStiffnessMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[607]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLinearStiffnessMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[607]); }
Ifc4x3_tc1::IfcLinearStiffnessMeasure::IfcLinearStiffnessMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcLinearStiffnessMeasure::IfcLinearStiffnessMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcLinearStiffnessMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcLinearVelocityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLinearVelocityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[608]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLinearVelocityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[608]); }
Ifc4x3_tc1::IfcLinearVelocityMeasure::IfcLinearVelocityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcLinearVelocityMeasure::IfcLinearVelocityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcLinearVelocityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcLogical
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLogical::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[615]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLogical::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[615]); }
Ifc4x3_tc1::IfcLogical::IfcLogical(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcLogical::IfcLogical(boost::logic::tribool v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcLogical::operator boost::logic::tribool() const { return data_.get_attribute_value(0); }

// Function implementations for IfcLuminousFluxMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLuminousFluxMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[619]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLuminousFluxMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[619]); }
Ifc4x3_tc1::IfcLuminousFluxMeasure::IfcLuminousFluxMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcLuminousFluxMeasure::IfcLuminousFluxMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcLuminousFluxMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcLuminousIntensityDistributionMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLuminousIntensityDistributionMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[620]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLuminousIntensityDistributionMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[620]); }
Ifc4x3_tc1::IfcLuminousIntensityDistributionMeasure::IfcLuminousIntensityDistributionMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcLuminousIntensityDistributionMeasure::IfcLuminousIntensityDistributionMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcLuminousIntensityDistributionMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcLuminousIntensityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLuminousIntensityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[621]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcLuminousIntensityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[621]); }
Ifc4x3_tc1::IfcLuminousIntensityMeasure::IfcLuminousIntensityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcLuminousIntensityMeasure::IfcLuminousIntensityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcLuminousIntensityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcMagneticFluxDensityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMagneticFluxDensityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[622]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMagneticFluxDensityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[622]); }
Ifc4x3_tc1::IfcMagneticFluxDensityMeasure::IfcMagneticFluxDensityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcMagneticFluxDensityMeasure::IfcMagneticFluxDensityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcMagneticFluxDensityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcMagneticFluxMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMagneticFluxMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[623]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMagneticFluxMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[623]); }
Ifc4x3_tc1::IfcMagneticFluxMeasure::IfcMagneticFluxMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcMagneticFluxMeasure::IfcMagneticFluxMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcMagneticFluxMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcMassDensityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMassDensityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[631]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMassDensityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[631]); }
Ifc4x3_tc1::IfcMassDensityMeasure::IfcMassDensityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcMassDensityMeasure::IfcMassDensityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcMassDensityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcMassFlowRateMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMassFlowRateMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[632]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMassFlowRateMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[632]); }
Ifc4x3_tc1::IfcMassFlowRateMeasure::IfcMassFlowRateMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcMassFlowRateMeasure::IfcMassFlowRateMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcMassFlowRateMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcMassMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMassMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[633]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMassMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[633]); }
Ifc4x3_tc1::IfcMassMeasure::IfcMassMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcMassMeasure::IfcMassMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcMassMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcMassPerLengthMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMassPerLengthMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[634]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMassPerLengthMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[634]); }
Ifc4x3_tc1::IfcMassPerLengthMeasure::IfcMassPerLengthMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcMassPerLengthMeasure::IfcMassPerLengthMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcMassPerLengthMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcModulusOfElasticityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcModulusOfElasticityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[672]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcModulusOfElasticityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[672]); }
Ifc4x3_tc1::IfcModulusOfElasticityMeasure::IfcModulusOfElasticityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcModulusOfElasticityMeasure::IfcModulusOfElasticityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcModulusOfElasticityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcModulusOfLinearSubgradeReactionMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcModulusOfLinearSubgradeReactionMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[673]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcModulusOfLinearSubgradeReactionMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[673]); }
Ifc4x3_tc1::IfcModulusOfLinearSubgradeReactionMeasure::IfcModulusOfLinearSubgradeReactionMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcModulusOfLinearSubgradeReactionMeasure::IfcModulusOfLinearSubgradeReactionMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcModulusOfLinearSubgradeReactionMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcModulusOfRotationalSubgradeReactionMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[674]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[674]); }
Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionMeasure::IfcModulusOfRotationalSubgradeReactionMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionMeasure::IfcModulusOfRotationalSubgradeReactionMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcModulusOfSubgradeReactionMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcModulusOfSubgradeReactionMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[676]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcModulusOfSubgradeReactionMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[676]); }
Ifc4x3_tc1::IfcModulusOfSubgradeReactionMeasure::IfcModulusOfSubgradeReactionMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcModulusOfSubgradeReactionMeasure::IfcModulusOfSubgradeReactionMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcModulusOfSubgradeReactionMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcMoistureDiffusivityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMoistureDiffusivityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[679]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMoistureDiffusivityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[679]); }
Ifc4x3_tc1::IfcMoistureDiffusivityMeasure::IfcMoistureDiffusivityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcMoistureDiffusivityMeasure::IfcMoistureDiffusivityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcMoistureDiffusivityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcMolecularWeightMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMolecularWeightMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[680]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMolecularWeightMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[680]); }
Ifc4x3_tc1::IfcMolecularWeightMeasure::IfcMolecularWeightMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcMolecularWeightMeasure::IfcMolecularWeightMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcMolecularWeightMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcMomentOfInertiaMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMomentOfInertiaMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[681]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMomentOfInertiaMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[681]); }
Ifc4x3_tc1::IfcMomentOfInertiaMeasure::IfcMomentOfInertiaMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcMomentOfInertiaMeasure::IfcMomentOfInertiaMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcMomentOfInertiaMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcMonetaryMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMonetaryMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[682]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMonetaryMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[682]); }
Ifc4x3_tc1::IfcMonetaryMeasure::IfcMonetaryMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcMonetaryMeasure::IfcMonetaryMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcMonetaryMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcMonthInYearNumber
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMonthInYearNumber::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[684]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcMonthInYearNumber::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[684]); }
Ifc4x3_tc1::IfcMonthInYearNumber::IfcMonthInYearNumber(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcMonthInYearNumber::IfcMonthInYearNumber(int v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcMonthInYearNumber::operator int() const { return data_.get_attribute_value(0); }

// Function implementations for IfcNonNegativeLengthMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcNonNegativeLengthMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[695]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcNonNegativeLengthMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[695]); }
Ifc4x3_tc1::IfcNonNegativeLengthMeasure::IfcNonNegativeLengthMeasure(IfcEntityInstanceData&& e) : IfcLengthMeasure(std::move(e)) {  }
Ifc4x3_tc1::IfcNonNegativeLengthMeasure::IfcNonNegativeLengthMeasure(double v) : IfcLengthMeasure(v) {  }
Ifc4x3_tc1::IfcNonNegativeLengthMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcNormalisedRatioMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcNormalisedRatioMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[696]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcNormalisedRatioMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[696]); }
Ifc4x3_tc1::IfcNormalisedRatioMeasure::IfcNormalisedRatioMeasure(IfcEntityInstanceData&& e) : IfcRatioMeasure(std::move(e)) {  }
Ifc4x3_tc1::IfcNormalisedRatioMeasure::IfcNormalisedRatioMeasure(double v) : IfcRatioMeasure(v) {  }
Ifc4x3_tc1::IfcNormalisedRatioMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcNumericMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcNumericMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[697]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcNumericMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[697]); }
Ifc4x3_tc1::IfcNumericMeasure::IfcNumericMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcNumericMeasure::IfcNumericMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcNumericMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcPHMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPHMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[737]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPHMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[737]); }
Ifc4x3_tc1::IfcPHMeasure::IfcPHMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcPHMeasure::IfcPHMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcPHMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcParameterValue
const IfcParse::type_declaration& Ifc4x3_tc1::IfcParameterValue::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[723]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcParameterValue::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[723]); }
Ifc4x3_tc1::IfcParameterValue::IfcParameterValue(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcParameterValue::IfcParameterValue(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcParameterValue::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcPlanarForceMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPlanarForceMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[756]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPlanarForceMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[756]); }
Ifc4x3_tc1::IfcPlanarForceMeasure::IfcPlanarForceMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcPlanarForceMeasure::IfcPlanarForceMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcPlanarForceMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcPlaneAngleMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPlaneAngleMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[758]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPlaneAngleMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[758]); }
Ifc4x3_tc1::IfcPlaneAngleMeasure::IfcPlaneAngleMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcPlaneAngleMeasure::IfcPlaneAngleMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcPlaneAngleMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcPositiveInteger
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPositiveInteger::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[774]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPositiveInteger::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[774]); }
Ifc4x3_tc1::IfcPositiveInteger::IfcPositiveInteger(IfcEntityInstanceData&& e) : IfcInteger(std::move(e)) {  }
Ifc4x3_tc1::IfcPositiveInteger::IfcPositiveInteger(int v) : IfcInteger(v) {  }
Ifc4x3_tc1::IfcPositiveInteger::operator int() const { return data_.get_attribute_value(0); }

// Function implementations for IfcPositiveLengthMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPositiveLengthMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[775]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPositiveLengthMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[775]); }
Ifc4x3_tc1::IfcPositiveLengthMeasure::IfcPositiveLengthMeasure(IfcEntityInstanceData&& e) : IfcLengthMeasure(std::move(e)) {  }
Ifc4x3_tc1::IfcPositiveLengthMeasure::IfcPositiveLengthMeasure(double v) : IfcLengthMeasure(v) {  }
Ifc4x3_tc1::IfcPositiveLengthMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcPositivePlaneAngleMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPositivePlaneAngleMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[776]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPositivePlaneAngleMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[776]); }
Ifc4x3_tc1::IfcPositivePlaneAngleMeasure::IfcPositivePlaneAngleMeasure(IfcEntityInstanceData&& e) : IfcPlaneAngleMeasure(std::move(e)) {  }
Ifc4x3_tc1::IfcPositivePlaneAngleMeasure::IfcPositivePlaneAngleMeasure(double v) : IfcPlaneAngleMeasure(v) {  }
Ifc4x3_tc1::IfcPositivePlaneAngleMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcPositiveRatioMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPositiveRatioMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[777]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPositiveRatioMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[777]); }
Ifc4x3_tc1::IfcPositiveRatioMeasure::IfcPositiveRatioMeasure(IfcEntityInstanceData&& e) : IfcRatioMeasure(std::move(e)) {  }
Ifc4x3_tc1::IfcPositiveRatioMeasure::IfcPositiveRatioMeasure(double v) : IfcRatioMeasure(v) {  }
Ifc4x3_tc1::IfcPositiveRatioMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcPowerMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPowerMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[779]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPowerMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[779]); }
Ifc4x3_tc1::IfcPowerMeasure::IfcPowerMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcPowerMeasure::IfcPowerMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcPowerMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcPresentableText
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPresentableText::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[787]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPresentableText::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[787]); }
Ifc4x3_tc1::IfcPresentableText::IfcPresentableText(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcPresentableText::IfcPresentableText(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcPresentableText::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcPressureMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPressureMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[792]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPressureMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[792]); }
Ifc4x3_tc1::IfcPressureMeasure::IfcPressureMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcPressureMeasure::IfcPressureMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcPressureMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcPropertySetDefinitionSet
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPropertySetDefinitionSet::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[826]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcPropertySetDefinitionSet::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[826]); }
Ifc4x3_tc1::IfcPropertySetDefinitionSet::IfcPropertySetDefinitionSet(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcPropertySetDefinitionSet::IfcPropertySetDefinitionSet(aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v->generalize()); }
Ifc4x3_tc1::IfcPropertySetDefinitionSet::operator aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr() const { aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcPropertySetDefinition >(); }

// Function implementations for IfcRadioActivityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcRadioActivityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[850]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcRadioActivityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[850]); }
Ifc4x3_tc1::IfcRadioActivityMeasure::IfcRadioActivityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcRadioActivityMeasure::IfcRadioActivityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcRadioActivityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcRatioMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcRatioMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[867]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcRatioMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[867]); }
Ifc4x3_tc1::IfcRatioMeasure::IfcRatioMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcRatioMeasure::IfcRatioMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcRatioMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcReal
const IfcParse::type_declaration& Ifc4x3_tc1::IfcReal::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[870]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcReal::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[870]); }
Ifc4x3_tc1::IfcReal::IfcReal(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcReal::IfcReal(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcReal::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcRotationalFrequencyMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcRotationalFrequencyMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[972]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcRotationalFrequencyMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[972]); }
Ifc4x3_tc1::IfcRotationalFrequencyMeasure::IfcRotationalFrequencyMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcRotationalFrequencyMeasure::IfcRotationalFrequencyMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcRotationalFrequencyMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcRotationalMassMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcRotationalMassMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[973]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcRotationalMassMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[973]); }
Ifc4x3_tc1::IfcRotationalMassMeasure::IfcRotationalMassMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcRotationalMassMeasure::IfcRotationalMassMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcRotationalMassMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcRotationalStiffnessMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcRotationalStiffnessMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[974]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcRotationalStiffnessMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[974]); }
Ifc4x3_tc1::IfcRotationalStiffnessMeasure::IfcRotationalStiffnessMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcRotationalStiffnessMeasure::IfcRotationalStiffnessMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcRotationalStiffnessMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcSectionModulusMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSectionModulusMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[988]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSectionModulusMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[988]); }
Ifc4x3_tc1::IfcSectionModulusMeasure::IfcSectionModulusMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcSectionModulusMeasure::IfcSectionModulusMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcSectionModulusMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcSectionalAreaIntegralMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSectionalAreaIntegralMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[983]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSectionalAreaIntegralMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[983]); }
Ifc4x3_tc1::IfcSectionalAreaIntegralMeasure::IfcSectionalAreaIntegralMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcSectionalAreaIntegralMeasure::IfcSectionalAreaIntegralMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcSectionalAreaIntegralMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcShearModulusMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcShearModulusMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1006]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcShearModulusMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1006]); }
Ifc4x3_tc1::IfcShearModulusMeasure::IfcShearModulusMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcShearModulusMeasure::IfcShearModulusMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcShearModulusMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcSolidAngleMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSolidAngleMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1032]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSolidAngleMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1032]); }
Ifc4x3_tc1::IfcSolidAngleMeasure::IfcSolidAngleMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcSolidAngleMeasure::IfcSolidAngleMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcSolidAngleMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcSoundPowerLevelMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSoundPowerLevelMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1035]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSoundPowerLevelMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1035]); }
Ifc4x3_tc1::IfcSoundPowerLevelMeasure::IfcSoundPowerLevelMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcSoundPowerLevelMeasure::IfcSoundPowerLevelMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcSoundPowerLevelMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcSoundPowerMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSoundPowerMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1036]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSoundPowerMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1036]); }
Ifc4x3_tc1::IfcSoundPowerMeasure::IfcSoundPowerMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcSoundPowerMeasure::IfcSoundPowerMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcSoundPowerMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcSoundPressureLevelMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSoundPressureLevelMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1037]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSoundPressureLevelMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1037]); }
Ifc4x3_tc1::IfcSoundPressureLevelMeasure::IfcSoundPressureLevelMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcSoundPressureLevelMeasure::IfcSoundPressureLevelMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcSoundPressureLevelMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcSoundPressureMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSoundPressureMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1038]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSoundPressureMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1038]); }
Ifc4x3_tc1::IfcSoundPressureMeasure::IfcSoundPressureMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcSoundPressureMeasure::IfcSoundPressureMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcSoundPressureMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcSpecificHeatCapacityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSpecificHeatCapacityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1054]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSpecificHeatCapacityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1054]); }
Ifc4x3_tc1::IfcSpecificHeatCapacityMeasure::IfcSpecificHeatCapacityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcSpecificHeatCapacityMeasure::IfcSpecificHeatCapacityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcSpecificHeatCapacityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcSpecularExponent
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSpecularExponent::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1055]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSpecularExponent::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1055]); }
Ifc4x3_tc1::IfcSpecularExponent::IfcSpecularExponent(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcSpecularExponent::IfcSpecularExponent(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcSpecularExponent::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcSpecularRoughness
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSpecularRoughness::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1057]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcSpecularRoughness::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1057]); }
Ifc4x3_tc1::IfcSpecularRoughness::IfcSpecularRoughness(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcSpecularRoughness::IfcSpecularRoughness(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcSpecularRoughness::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcStrippedOptional
const IfcParse::type_declaration& Ifc4x3_tc1::IfcStrippedOptional::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1071]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcStrippedOptional::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1071]); }
Ifc4x3_tc1::IfcStrippedOptional::IfcStrippedOptional(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcStrippedOptional::IfcStrippedOptional(bool v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcStrippedOptional::operator bool() const { return data_.get_attribute_value(0); }

// Function implementations for IfcTemperatureGradientMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTemperatureGradientMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1163]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTemperatureGradientMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1163]); }
Ifc4x3_tc1::IfcTemperatureGradientMeasure::IfcTemperatureGradientMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcTemperatureGradientMeasure::IfcTemperatureGradientMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcTemperatureGradientMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcTemperatureRateOfChangeMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTemperatureRateOfChangeMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1164]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTemperatureRateOfChangeMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1164]); }
Ifc4x3_tc1::IfcTemperatureRateOfChangeMeasure::IfcTemperatureRateOfChangeMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcTemperatureRateOfChangeMeasure::IfcTemperatureRateOfChangeMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcTemperatureRateOfChangeMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcText
const IfcParse::type_declaration& Ifc4x3_tc1::IfcText::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1176]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcText::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1176]); }
Ifc4x3_tc1::IfcText::IfcText(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcText::IfcText(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcText::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcTextAlignment
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTextAlignment::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1177]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTextAlignment::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1177]); }
Ifc4x3_tc1::IfcTextAlignment::IfcTextAlignment(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcTextAlignment::IfcTextAlignment(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcTextAlignment::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcTextDecoration
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTextDecoration::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1178]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTextDecoration::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1178]); }
Ifc4x3_tc1::IfcTextDecoration::IfcTextDecoration(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcTextDecoration::IfcTextDecoration(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcTextDecoration::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcTextFontName
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTextFontName::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1179]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTextFontName::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1179]); }
Ifc4x3_tc1::IfcTextFontName::IfcTextFontName(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcTextFontName::IfcTextFontName(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcTextFontName::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcTextTransformation
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTextTransformation::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1188]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTextTransformation::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1188]); }
Ifc4x3_tc1::IfcTextTransformation::IfcTextTransformation(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcTextTransformation::IfcTextTransformation(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcTextTransformation::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcThermalAdmittanceMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcThermalAdmittanceMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1196]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcThermalAdmittanceMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1196]); }
Ifc4x3_tc1::IfcThermalAdmittanceMeasure::IfcThermalAdmittanceMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcThermalAdmittanceMeasure::IfcThermalAdmittanceMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcThermalAdmittanceMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcThermalConductivityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcThermalConductivityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1197]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcThermalConductivityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1197]); }
Ifc4x3_tc1::IfcThermalConductivityMeasure::IfcThermalConductivityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcThermalConductivityMeasure::IfcThermalConductivityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcThermalConductivityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcThermalExpansionCoefficientMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcThermalExpansionCoefficientMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1198]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcThermalExpansionCoefficientMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1198]); }
Ifc4x3_tc1::IfcThermalExpansionCoefficientMeasure::IfcThermalExpansionCoefficientMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcThermalExpansionCoefficientMeasure::IfcThermalExpansionCoefficientMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcThermalExpansionCoefficientMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcThermalResistanceMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcThermalResistanceMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1199]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcThermalResistanceMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1199]); }
Ifc4x3_tc1::IfcThermalResistanceMeasure::IfcThermalResistanceMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcThermalResistanceMeasure::IfcThermalResistanceMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcThermalResistanceMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcThermalTransmittanceMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcThermalTransmittanceMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1200]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcThermalTransmittanceMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1200]); }
Ifc4x3_tc1::IfcThermalTransmittanceMeasure::IfcThermalTransmittanceMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcThermalTransmittanceMeasure::IfcThermalTransmittanceMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcThermalTransmittanceMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcThermodynamicTemperatureMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcThermodynamicTemperatureMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1201]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcThermodynamicTemperatureMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1201]); }
Ifc4x3_tc1::IfcThermodynamicTemperatureMeasure::IfcThermodynamicTemperatureMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcThermodynamicTemperatureMeasure::IfcThermodynamicTemperatureMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcThermodynamicTemperatureMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcTime
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTime::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1203]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTime::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1203]); }
Ifc4x3_tc1::IfcTime::IfcTime(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcTime::IfcTime(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcTime::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcTimeMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTimeMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1204]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTimeMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1204]); }
Ifc4x3_tc1::IfcTimeMeasure::IfcTimeMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcTimeMeasure::IfcTimeMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcTimeMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcTimeStamp
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTimeStamp::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1210]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTimeStamp::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1210]); }
Ifc4x3_tc1::IfcTimeStamp::IfcTimeStamp(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcTimeStamp::IfcTimeStamp(int v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcTimeStamp::operator int() const { return data_.get_attribute_value(0); }

// Function implementations for IfcTorqueMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTorqueMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1214]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcTorqueMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1214]); }
Ifc4x3_tc1::IfcTorqueMeasure::IfcTorqueMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcTorqueMeasure::IfcTorqueMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcTorqueMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcURIReference
const IfcParse::type_declaration& Ifc4x3_tc1::IfcURIReference::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1251]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcURIReference::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1251]); }
Ifc4x3_tc1::IfcURIReference::IfcURIReference(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcURIReference::IfcURIReference(std::string v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcURIReference::operator std::string() const { return data_.get_attribute_value(0); }

// Function implementations for IfcVaporPermeabilityMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcVaporPermeabilityMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1257]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcVaporPermeabilityMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1257]); }
Ifc4x3_tc1::IfcVaporPermeabilityMeasure::IfcVaporPermeabilityMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcVaporPermeabilityMeasure::IfcVaporPermeabilityMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcVaporPermeabilityMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcVolumeMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcVolumeMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1277]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcVolumeMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1277]); }
Ifc4x3_tc1::IfcVolumeMeasure::IfcVolumeMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcVolumeMeasure::IfcVolumeMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcVolumeMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcVolumetricFlowRateMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcVolumetricFlowRateMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1278]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcVolumetricFlowRateMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1278]); }
Ifc4x3_tc1::IfcVolumetricFlowRateMeasure::IfcVolumetricFlowRateMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcVolumetricFlowRateMeasure::IfcVolumetricFlowRateMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcVolumetricFlowRateMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcWarpingConstantMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcWarpingConstantMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1283]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcWarpingConstantMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1283]); }
Ifc4x3_tc1::IfcWarpingConstantMeasure::IfcWarpingConstantMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcWarpingConstantMeasure::IfcWarpingConstantMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcWarpingConstantMeasure::operator double() const { return data_.get_attribute_value(0); }

// Function implementations for IfcWarpingMomentMeasure
const IfcParse::type_declaration& Ifc4x3_tc1::IfcWarpingMomentMeasure::Class() { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1284]); }
const IfcParse::type_declaration& Ifc4x3_tc1::IfcWarpingMomentMeasure::declaration() const { return *((IfcParse::type_declaration*)IFC4X3_TC1_types[1284]); }
Ifc4x3_tc1::IfcWarpingMomentMeasure::IfcWarpingMomentMeasure(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseType(std::move(e)) {  }
Ifc4x3_tc1::IfcWarpingMomentMeasure::IfcWarpingMomentMeasure(double v) : IfcUtil::IfcBaseType() { set_attribute_value(0, v); }
Ifc4x3_tc1::IfcWarpingMomentMeasure::operator double() const { return data_.get_attribute_value(0); }


// Function implementations for IfcActionRequest
boost::optional< ::Ifc4x3_tc1::IfcActionRequestTypeEnum::Value > Ifc4x3_tc1::IfcActionRequest::PredefinedType() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcActionRequestTypeEnum::FromString(data_.get_attribute_value(6)); }
void Ifc4x3_tc1::IfcActionRequest::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcActionRequestTypeEnum::Value > v) { if (v) {set_attribute_value(6, EnumerationReference(&::Ifc4x3_tc1::IfcActionRequestTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(6);} }
boost::optional< std::string > Ifc4x3_tc1::IfcActionRequest::Status() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcActionRequest::setStatus(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< std::string > Ifc4x3_tc1::IfcActionRequest::LongDescription() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcActionRequest::setLongDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcActionRequest::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[2]); }
const IfcParse::entity& Ifc4x3_tc1::IfcActionRequest::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[2]); }
Ifc4x3_tc1::IfcActionRequest::IfcActionRequest(IfcEntityInstanceData&& e) : IfcControl(std::move(e)) { }
Ifc4x3_tc1::IfcActionRequest::IfcActionRequest(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_tc1::IfcActionRequestTypeEnum::Value > v7_PredefinedType, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_LongDescription) : IfcControl(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_PredefinedType) {set_attribute_value(6, (EnumerationReference(&::Ifc4x3_tc1::IfcActionRequestTypeEnum::Class(),(size_t)*v7_PredefinedType))); } if (v8_Status) {set_attribute_value(7, (*v8_Status)); } if (v9_LongDescription) {set_attribute_value(8, (*v9_LongDescription)); }; populate_derived(); }

// Function implementations for IfcActor
::Ifc4x3_tc1::IfcActorSelect* Ifc4x3_tc1::IfcActor::TheActor() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcActorSelect>(true); }
void Ifc4x3_tc1::IfcActor::setTheActor(::Ifc4x3_tc1::IfcActorSelect* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }

::Ifc4x3_tc1::IfcRelAssignsToActor::list::ptr Ifc4x3_tc1::IfcActor::IsActingUpon() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[899], 6)->as<IfcRelAssignsToActor>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcActor::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[6]); }
const IfcParse::entity& Ifc4x3_tc1::IfcActor::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[6]); }
Ifc4x3_tc1::IfcActor::IfcActor(IfcEntityInstanceData&& e) : IfcObject(std::move(e)) { }
Ifc4x3_tc1::IfcActor::IfcActor(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcActorSelect* v6_TheActor) : IfcObject(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_TheActor ? v6_TheActor->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcActorRole
::Ifc4x3_tc1::IfcRoleEnum::Value Ifc4x3_tc1::IfcActorRole::Role() const {  return ::Ifc4x3_tc1::IfcRoleEnum::FromString(data_.get_attribute_value(0)); }
void Ifc4x3_tc1::IfcActorRole::setRole(::Ifc4x3_tc1::IfcRoleEnum::Value v) { set_attribute_value(0, EnumerationReference(&::Ifc4x3_tc1::IfcRoleEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcActorRole::UserDefinedRole() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcActorRole::setUserDefinedRole(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcActorRole::Description() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcActorRole::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }

::Ifc4x3_tc1::IfcExternalReferenceRelationship::list::ptr Ifc4x3_tc1::IfcActorRole::HasExternalReference() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[427], 3)->as<IfcExternalReferenceRelationship>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcActorRole::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[7]); }
const IfcParse::entity& Ifc4x3_tc1::IfcActorRole::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[7]); }
Ifc4x3_tc1::IfcActorRole::IfcActorRole(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcActorRole::IfcActorRole(::Ifc4x3_tc1::IfcRoleEnum::Value v1_Role, boost::optional< std::string > v2_UserDefinedRole, boost::optional< std::string > v3_Description) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcRoleEnum::Class(),(size_t)v1_Role))); if (v2_UserDefinedRole) {set_attribute_value(1, (*v2_UserDefinedRole)); } if (v3_Description) {set_attribute_value(2, (*v3_Description)); }; populate_derived(); }

// Function implementations for IfcActuator
boost::optional< ::Ifc4x3_tc1::IfcActuatorTypeEnum::Value > Ifc4x3_tc1::IfcActuator::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcActuatorTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcActuator::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcActuatorTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcActuatorTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcActuator::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[9]); }
const IfcParse::entity& Ifc4x3_tc1::IfcActuator::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[9]); }
Ifc4x3_tc1::IfcActuator::IfcActuator(IfcEntityInstanceData&& e) : IfcDistributionControlElement(std::move(e)) { }
Ifc4x3_tc1::IfcActuator::IfcActuator(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcActuatorTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcActuatorTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcActuatorType
::Ifc4x3_tc1::IfcActuatorTypeEnum::Value Ifc4x3_tc1::IfcActuatorType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcActuatorTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcActuatorType::setPredefinedType(::Ifc4x3_tc1::IfcActuatorTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcActuatorTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcActuatorType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[10]); }
const IfcParse::entity& Ifc4x3_tc1::IfcActuatorType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[10]); }
Ifc4x3_tc1::IfcActuatorType::IfcActuatorType(IfcEntityInstanceData&& e) : IfcDistributionControlElementType(std::move(e)) { }
Ifc4x3_tc1::IfcActuatorType::IfcActuatorType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcActuatorTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcActuatorTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcAddress
boost::optional< ::Ifc4x3_tc1::IfcAddressTypeEnum::Value > Ifc4x3_tc1::IfcAddress::Purpose() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcAddressTypeEnum::FromString(data_.get_attribute_value(0)); }
void Ifc4x3_tc1::IfcAddress::setPurpose(boost::optional< ::Ifc4x3_tc1::IfcAddressTypeEnum::Value > v) { if (v) {set_attribute_value(0, EnumerationReference(&::Ifc4x3_tc1::IfcAddressTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcAddress::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcAddress::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcAddress::UserDefinedPurpose() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcAddress::setUserDefinedPurpose(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }

::Ifc4x3_tc1::IfcPerson::list::ptr Ifc4x3_tc1::IfcAddress::OfPerson() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[735], 7)->as<IfcPerson>(); }
::Ifc4x3_tc1::IfcOrganization::list::ptr Ifc4x3_tc1::IfcAddress::OfOrganization() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[714], 4)->as<IfcOrganization>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcAddress::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[12]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAddress::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[12]); }
Ifc4x3_tc1::IfcAddress::IfcAddress(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcAddress::IfcAddress(boost::optional< ::Ifc4x3_tc1::IfcAddressTypeEnum::Value > v1_Purpose, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_UserDefinedPurpose) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(3))) {  if (v1_Purpose) {set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcAddressTypeEnum::Class(),(size_t)*v1_Purpose))); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); } if (v3_UserDefinedPurpose) {set_attribute_value(2, (*v3_UserDefinedPurpose)); }; populate_derived(); }

// Function implementations for IfcAdvancedBrep


const IfcParse::entity& Ifc4x3_tc1::IfcAdvancedBrep::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[14]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAdvancedBrep::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[14]); }
Ifc4x3_tc1::IfcAdvancedBrep::IfcAdvancedBrep(IfcEntityInstanceData&& e) : IfcManifoldSolidBrep(std::move(e)) { }
Ifc4x3_tc1::IfcAdvancedBrep::IfcAdvancedBrep(::Ifc4x3_tc1::IfcClosedShell* v1_Outer) : IfcManifoldSolidBrep(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_Outer ? v1_Outer->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcAdvancedBrepWithVoids
aggregate_of< ::Ifc4x3_tc1::IfcClosedShell >::ptr Ifc4x3_tc1::IfcAdvancedBrepWithVoids::Voids() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcClosedShell >(); }
void Ifc4x3_tc1::IfcAdvancedBrepWithVoids::setVoids(aggregate_of< ::Ifc4x3_tc1::IfcClosedShell >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcAdvancedBrepWithVoids::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[15]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAdvancedBrepWithVoids::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[15]); }
Ifc4x3_tc1::IfcAdvancedBrepWithVoids::IfcAdvancedBrepWithVoids(IfcEntityInstanceData&& e) : IfcAdvancedBrep(std::move(e)) { }
Ifc4x3_tc1::IfcAdvancedBrepWithVoids::IfcAdvancedBrepWithVoids(::Ifc4x3_tc1::IfcClosedShell* v1_Outer, aggregate_of< ::Ifc4x3_tc1::IfcClosedShell >::ptr v2_Voids) : IfcAdvancedBrep(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Outer ? v1_Outer->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Voids)->generalize());; populate_derived(); }

// Function implementations for IfcAdvancedFace


const IfcParse::entity& Ifc4x3_tc1::IfcAdvancedFace::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[16]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAdvancedFace::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[16]); }
Ifc4x3_tc1::IfcAdvancedFace::IfcAdvancedFace(IfcEntityInstanceData&& e) : IfcFaceSurface(std::move(e)) { }
Ifc4x3_tc1::IfcAdvancedFace::IfcAdvancedFace(aggregate_of< ::Ifc4x3_tc1::IfcFaceBound >::ptr v1_Bounds, ::Ifc4x3_tc1::IfcSurface* v2_FaceSurface, bool v3_SameSense) : IfcFaceSurface(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_Bounds)->generalize());set_attribute_value(1, v2_FaceSurface ? v2_FaceSurface->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, (v3_SameSense));; populate_derived(); }

// Function implementations for IfcAirTerminal
boost::optional< ::Ifc4x3_tc1::IfcAirTerminalTypeEnum::Value > Ifc4x3_tc1::IfcAirTerminal::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcAirTerminalTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcAirTerminal::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcAirTerminalTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcAirTerminalTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcAirTerminal::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[17]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAirTerminal::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[17]); }
Ifc4x3_tc1::IfcAirTerminal::IfcAirTerminal(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcAirTerminal::IfcAirTerminal(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcAirTerminalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcAirTerminalTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcAirTerminalBox
boost::optional< ::Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Value > Ifc4x3_tc1::IfcAirTerminalBox::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcAirTerminalBox::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcAirTerminalBox::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[18]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAirTerminalBox::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[18]); }
Ifc4x3_tc1::IfcAirTerminalBox::IfcAirTerminalBox(IfcEntityInstanceData&& e) : IfcFlowController(std::move(e)) { }
Ifc4x3_tc1::IfcAirTerminalBox::IfcAirTerminalBox(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Value > v9_PredefinedType) : IfcFlowController(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcAirTerminalBoxType
::Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Value Ifc4x3_tc1::IfcAirTerminalBoxType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcAirTerminalBoxType::setPredefinedType(::Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcAirTerminalBoxType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[19]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAirTerminalBoxType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[19]); }
Ifc4x3_tc1::IfcAirTerminalBoxType::IfcAirTerminalBoxType(IfcEntityInstanceData&& e) : IfcFlowControllerType(std::move(e)) { }
Ifc4x3_tc1::IfcAirTerminalBoxType::IfcAirTerminalBoxType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcAirTerminalBoxTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcAirTerminalType
::Ifc4x3_tc1::IfcAirTerminalTypeEnum::Value Ifc4x3_tc1::IfcAirTerminalType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcAirTerminalTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcAirTerminalType::setPredefinedType(::Ifc4x3_tc1::IfcAirTerminalTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcAirTerminalTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcAirTerminalType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[21]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAirTerminalType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[21]); }
Ifc4x3_tc1::IfcAirTerminalType::IfcAirTerminalType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcAirTerminalType::IfcAirTerminalType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcAirTerminalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcAirTerminalTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcAirToAirHeatRecovery
boost::optional< ::Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Value > Ifc4x3_tc1::IfcAirToAirHeatRecovery::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcAirToAirHeatRecovery::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcAirToAirHeatRecovery::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[23]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAirToAirHeatRecovery::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[23]); }
Ifc4x3_tc1::IfcAirToAirHeatRecovery::IfcAirToAirHeatRecovery(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcAirToAirHeatRecovery::IfcAirToAirHeatRecovery(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcAirToAirHeatRecoveryType
::Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Value Ifc4x3_tc1::IfcAirToAirHeatRecoveryType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcAirToAirHeatRecoveryType::setPredefinedType(::Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcAirToAirHeatRecoveryType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[24]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAirToAirHeatRecoveryType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[24]); }
Ifc4x3_tc1::IfcAirToAirHeatRecoveryType::IfcAirToAirHeatRecoveryType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcAirToAirHeatRecoveryType::IfcAirToAirHeatRecoveryType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcAirToAirHeatRecoveryTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcAlarm
boost::optional< ::Ifc4x3_tc1::IfcAlarmTypeEnum::Value > Ifc4x3_tc1::IfcAlarm::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcAlarmTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcAlarm::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcAlarmTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcAlarmTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcAlarm::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[26]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAlarm::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[26]); }
Ifc4x3_tc1::IfcAlarm::IfcAlarm(IfcEntityInstanceData&& e) : IfcDistributionControlElement(std::move(e)) { }
Ifc4x3_tc1::IfcAlarm::IfcAlarm(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcAlarmTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcAlarmTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcAlarmType
::Ifc4x3_tc1::IfcAlarmTypeEnum::Value Ifc4x3_tc1::IfcAlarmType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcAlarmTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcAlarmType::setPredefinedType(::Ifc4x3_tc1::IfcAlarmTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcAlarmTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcAlarmType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[27]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAlarmType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[27]); }
Ifc4x3_tc1::IfcAlarmType::IfcAlarmType(IfcEntityInstanceData&& e) : IfcDistributionControlElementType(std::move(e)) { }
Ifc4x3_tc1::IfcAlarmType::IfcAlarmType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcAlarmTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcAlarmTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcAlignment
boost::optional< ::Ifc4x3_tc1::IfcAlignmentTypeEnum::Value > Ifc4x3_tc1::IfcAlignment::PredefinedType() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcAlignmentTypeEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcAlignment::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcAlignmentTypeEnum::Value > v) { if (v) {set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcAlignmentTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(7);} }


const IfcParse::entity& Ifc4x3_tc1::IfcAlignment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[29]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAlignment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[29]); }
Ifc4x3_tc1::IfcAlignment::IfcAlignment(IfcEntityInstanceData&& e) : IfcLinearPositioningElement(std::move(e)) { }
Ifc4x3_tc1::IfcAlignment::IfcAlignment(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< ::Ifc4x3_tc1::IfcAlignmentTypeEnum::Value > v8_PredefinedType) : IfcLinearPositioningElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_PredefinedType) {set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcAlignmentTypeEnum::Class(),(size_t)*v8_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcAlignmentCant
double Ifc4x3_tc1::IfcAlignmentCant::RailHeadDistance() const {  double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcAlignmentCant::setRailHeadDistance(double v) { set_attribute_value(7, v);if constexpr (false)unset_attribute_value(7); }


const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentCant::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[30]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentCant::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[30]); }
Ifc4x3_tc1::IfcAlignmentCant::IfcAlignmentCant(IfcEntityInstanceData&& e) : IfcLinearElement(std::move(e)) { }
Ifc4x3_tc1::IfcAlignmentCant::IfcAlignmentCant(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, double v8_RailHeadDistance) : IfcLinearElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (v8_RailHeadDistance));; populate_derived(); }

// Function implementations for IfcAlignmentCantSegment
double Ifc4x3_tc1::IfcAlignmentCantSegment::StartDistAlong() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcAlignmentCantSegment::setStartDistAlong(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
double Ifc4x3_tc1::IfcAlignmentCantSegment::HorizontalLength() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcAlignmentCantSegment::setHorizontalLength(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcAlignmentCantSegment::StartCantLeft() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcAlignmentCantSegment::setStartCantLeft(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
boost::optional< double > Ifc4x3_tc1::IfcAlignmentCantSegment::EndCantLeft() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcAlignmentCantSegment::setEndCantLeft(boost::optional< double > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
double Ifc4x3_tc1::IfcAlignmentCantSegment::StartCantRight() const {  double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcAlignmentCantSegment::setStartCantRight(double v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
boost::optional< double > Ifc4x3_tc1::IfcAlignmentCantSegment::EndCantRight() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcAlignmentCantSegment::setEndCantRight(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
::Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::Value Ifc4x3_tc1::IfcAlignmentCantSegment::PredefinedType() const {  return ::Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcAlignmentCantSegment::setPredefinedType(::Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::Value v) { set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentCantSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[31]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentCantSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[31]); }
Ifc4x3_tc1::IfcAlignmentCantSegment::IfcAlignmentCantSegment(IfcEntityInstanceData&& e) : IfcAlignmentParameterSegment(std::move(e)) { }
Ifc4x3_tc1::IfcAlignmentCantSegment::IfcAlignmentCantSegment(boost::optional< std::string > v1_StartTag, boost::optional< std::string > v2_EndTag, double v3_StartDistAlong, double v4_HorizontalLength, double v5_StartCantLeft, boost::optional< double > v6_EndCantLeft, double v7_StartCantRight, boost::optional< double > v8_EndCantRight, ::Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::Value v9_PredefinedType) : IfcAlignmentParameterSegment(IfcEntityInstanceData(storage_t(9))) {  if (v1_StartTag) {set_attribute_value(0, (*v1_StartTag)); } if (v2_EndTag) {set_attribute_value(1, (*v2_EndTag)); }set_attribute_value(2, (v3_StartDistAlong));set_attribute_value(3, (v4_HorizontalLength));set_attribute_value(4, (v5_StartCantLeft)); if (v6_EndCantLeft) {set_attribute_value(5, (*v6_EndCantLeft)); }set_attribute_value(6, (v7_StartCantRight)); if (v8_EndCantRight) {set_attribute_value(7, (*v8_EndCantRight)); }set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcAlignmentCantSegmentTypeEnum::Class(),(size_t)v9_PredefinedType)));; populate_derived(); }

// Function implementations for IfcAlignmentHorizontal


const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentHorizontal::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[33]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentHorizontal::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[33]); }
Ifc4x3_tc1::IfcAlignmentHorizontal::IfcAlignmentHorizontal(IfcEntityInstanceData&& e) : IfcLinearElement(std::move(e)) { }
Ifc4x3_tc1::IfcAlignmentHorizontal::IfcAlignmentHorizontal(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation) : IfcLinearElement(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcAlignmentHorizontalSegment
::Ifc4x3_tc1::IfcCartesianPoint* Ifc4x3_tc1::IfcAlignmentHorizontalSegment::StartPoint() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcCartesianPoint>(true); }
void Ifc4x3_tc1::IfcAlignmentHorizontalSegment::setStartPoint(::Ifc4x3_tc1::IfcCartesianPoint* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
double Ifc4x3_tc1::IfcAlignmentHorizontalSegment::StartDirection() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcAlignmentHorizontalSegment::setStartDirection(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcAlignmentHorizontalSegment::StartRadiusOfCurvature() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcAlignmentHorizontalSegment::setStartRadiusOfCurvature(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
double Ifc4x3_tc1::IfcAlignmentHorizontalSegment::EndRadiusOfCurvature() const {  double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcAlignmentHorizontalSegment::setEndRadiusOfCurvature(double v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
double Ifc4x3_tc1::IfcAlignmentHorizontalSegment::SegmentLength() const {  double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcAlignmentHorizontalSegment::setSegmentLength(double v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
boost::optional< double > Ifc4x3_tc1::IfcAlignmentHorizontalSegment::GravityCenterLineHeight() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcAlignmentHorizontalSegment::setGravityCenterLineHeight(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
::Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::Value Ifc4x3_tc1::IfcAlignmentHorizontalSegment::PredefinedType() const {  return ::Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcAlignmentHorizontalSegment::setPredefinedType(::Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::Value v) { set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentHorizontalSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[34]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentHorizontalSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[34]); }
Ifc4x3_tc1::IfcAlignmentHorizontalSegment::IfcAlignmentHorizontalSegment(IfcEntityInstanceData&& e) : IfcAlignmentParameterSegment(std::move(e)) { }
Ifc4x3_tc1::IfcAlignmentHorizontalSegment::IfcAlignmentHorizontalSegment(boost::optional< std::string > v1_StartTag, boost::optional< std::string > v2_EndTag, ::Ifc4x3_tc1::IfcCartesianPoint* v3_StartPoint, double v4_StartDirection, double v5_StartRadiusOfCurvature, double v6_EndRadiusOfCurvature, double v7_SegmentLength, boost::optional< double > v8_GravityCenterLineHeight, ::Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::Value v9_PredefinedType) : IfcAlignmentParameterSegment(IfcEntityInstanceData(storage_t(9))) {  if (v1_StartTag) {set_attribute_value(0, (*v1_StartTag)); } if (v2_EndTag) {set_attribute_value(1, (*v2_EndTag)); }set_attribute_value(2, v3_StartPoint ? v3_StartPoint->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_StartDirection));set_attribute_value(4, (v5_StartRadiusOfCurvature));set_attribute_value(5, (v6_EndRadiusOfCurvature));set_attribute_value(6, (v7_SegmentLength)); if (v8_GravityCenterLineHeight) {set_attribute_value(7, (*v8_GravityCenterLineHeight)); }set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcAlignmentHorizontalSegmentTypeEnum::Class(),(size_t)v9_PredefinedType)));; populate_derived(); }

// Function implementations for IfcAlignmentParameterSegment
boost::optional< std::string > Ifc4x3_tc1::IfcAlignmentParameterSegment::StartTag() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcAlignmentParameterSegment::setStartTag(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcAlignmentParameterSegment::EndTag() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcAlignmentParameterSegment::setEndTag(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }


const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentParameterSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[36]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentParameterSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[36]); }
Ifc4x3_tc1::IfcAlignmentParameterSegment::IfcAlignmentParameterSegment(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcAlignmentParameterSegment::IfcAlignmentParameterSegment(boost::optional< std::string > v1_StartTag, boost::optional< std::string > v2_EndTag) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) {  if (v1_StartTag) {set_attribute_value(0, (*v1_StartTag)); } if (v2_EndTag) {set_attribute_value(1, (*v2_EndTag)); }; populate_derived(); }

// Function implementations for IfcAlignmentSegment
::Ifc4x3_tc1::IfcAlignmentParameterSegment* Ifc4x3_tc1::IfcAlignmentSegment::DesignParameters() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(7)))->as<::Ifc4x3_tc1::IfcAlignmentParameterSegment>(true); }
void Ifc4x3_tc1::IfcAlignmentSegment::setDesignParameters(::Ifc4x3_tc1::IfcAlignmentParameterSegment* v) { set_attribute_value(7, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(7); }


const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[37]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[37]); }
Ifc4x3_tc1::IfcAlignmentSegment::IfcAlignmentSegment(IfcEntityInstanceData&& e) : IfcLinearElement(std::move(e)) { }
Ifc4x3_tc1::IfcAlignmentSegment::IfcAlignmentSegment(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcAlignmentParameterSegment* v8_DesignParameters) : IfcLinearElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_DesignParameters ? v8_DesignParameters->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcAlignmentVertical


const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentVertical::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[39]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentVertical::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[39]); }
Ifc4x3_tc1::IfcAlignmentVertical::IfcAlignmentVertical(IfcEntityInstanceData&& e) : IfcLinearElement(std::move(e)) { }
Ifc4x3_tc1::IfcAlignmentVertical::IfcAlignmentVertical(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation) : IfcLinearElement(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcAlignmentVerticalSegment
double Ifc4x3_tc1::IfcAlignmentVerticalSegment::StartDistAlong() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcAlignmentVerticalSegment::setStartDistAlong(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
double Ifc4x3_tc1::IfcAlignmentVerticalSegment::HorizontalLength() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcAlignmentVerticalSegment::setHorizontalLength(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcAlignmentVerticalSegment::StartHeight() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcAlignmentVerticalSegment::setStartHeight(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
double Ifc4x3_tc1::IfcAlignmentVerticalSegment::StartGradient() const {  double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcAlignmentVerticalSegment::setStartGradient(double v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
double Ifc4x3_tc1::IfcAlignmentVerticalSegment::EndGradient() const {  double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcAlignmentVerticalSegment::setEndGradient(double v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
boost::optional< double > Ifc4x3_tc1::IfcAlignmentVerticalSegment::RadiusOfCurvature() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcAlignmentVerticalSegment::setRadiusOfCurvature(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
::Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::Value Ifc4x3_tc1::IfcAlignmentVerticalSegment::PredefinedType() const {  return ::Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcAlignmentVerticalSegment::setPredefinedType(::Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::Value v) { set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentVerticalSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[40]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAlignmentVerticalSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[40]); }
Ifc4x3_tc1::IfcAlignmentVerticalSegment::IfcAlignmentVerticalSegment(IfcEntityInstanceData&& e) : IfcAlignmentParameterSegment(std::move(e)) { }
Ifc4x3_tc1::IfcAlignmentVerticalSegment::IfcAlignmentVerticalSegment(boost::optional< std::string > v1_StartTag, boost::optional< std::string > v2_EndTag, double v3_StartDistAlong, double v4_HorizontalLength, double v5_StartHeight, double v6_StartGradient, double v7_EndGradient, boost::optional< double > v8_RadiusOfCurvature, ::Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::Value v9_PredefinedType) : IfcAlignmentParameterSegment(IfcEntityInstanceData(storage_t(9))) {  if (v1_StartTag) {set_attribute_value(0, (*v1_StartTag)); } if (v2_EndTag) {set_attribute_value(1, (*v2_EndTag)); }set_attribute_value(2, (v3_StartDistAlong));set_attribute_value(3, (v4_HorizontalLength));set_attribute_value(4, (v5_StartHeight));set_attribute_value(5, (v6_StartGradient));set_attribute_value(6, (v7_EndGradient)); if (v8_RadiusOfCurvature) {set_attribute_value(7, (*v8_RadiusOfCurvature)); }set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcAlignmentVerticalSegmentTypeEnum::Class(),(size_t)v9_PredefinedType)));; populate_derived(); }

// Function implementations for IfcAnnotation
boost::optional< ::Ifc4x3_tc1::IfcAnnotationTypeEnum::Value > Ifc4x3_tc1::IfcAnnotation::PredefinedType() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcAnnotationTypeEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcAnnotation::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcAnnotationTypeEnum::Value > v) { if (v) {set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcAnnotationTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(7);} }

::Ifc4x3_tc1::IfcRelContainedInSpatialStructure::list::ptr Ifc4x3_tc1::IfcAnnotation::ContainedInStructure() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[924], 4)->as<IfcRelContainedInSpatialStructure>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcAnnotation::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[46]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAnnotation::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[46]); }
Ifc4x3_tc1::IfcAnnotation::IfcAnnotation(IfcEntityInstanceData&& e) : IfcProduct(std::move(e)) { }
Ifc4x3_tc1::IfcAnnotation::IfcAnnotation(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< ::Ifc4x3_tc1::IfcAnnotationTypeEnum::Value > v8_PredefinedType) : IfcProduct(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_PredefinedType) {set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcAnnotationTypeEnum::Class(),(size_t)*v8_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcAnnotationFillArea
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcAnnotationFillArea::OuterBoundary() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcAnnotationFillArea::setOuterBoundary(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcCurve >::ptr > Ifc4x3_tc1::IfcAnnotationFillArea::InnerBoundaries() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcCurve >(); }
void Ifc4x3_tc1::IfcAnnotationFillArea::setInnerBoundaries(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcCurve >::ptr > v) { if (v) {set_attribute_value(1, (*v)->generalize());} else {unset_attribute_value(1);} }


const IfcParse::entity& Ifc4x3_tc1::IfcAnnotationFillArea::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[47]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAnnotationFillArea::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[47]); }
Ifc4x3_tc1::IfcAnnotationFillArea::IfcAnnotationFillArea(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcAnnotationFillArea::IfcAnnotationFillArea(::Ifc4x3_tc1::IfcCurve* v1_OuterBoundary, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcCurve >::ptr > v2_InnerBoundaries) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_OuterBoundary ? v1_OuterBoundary->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_InnerBoundaries) {set_attribute_value(1, (*v2_InnerBoundaries)->generalize()); }; populate_derived(); }

// Function implementations for IfcApplication
::Ifc4x3_tc1::IfcOrganization* Ifc4x3_tc1::IfcApplication::ApplicationDeveloper() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcOrganization>(true); }
void Ifc4x3_tc1::IfcApplication::setApplicationDeveloper(::Ifc4x3_tc1::IfcOrganization* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
std::string Ifc4x3_tc1::IfcApplication::Version() const {  std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcApplication::setVersion(std::string v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
std::string Ifc4x3_tc1::IfcApplication::ApplicationFullName() const {  std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcApplication::setApplicationFullName(std::string v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
std::string Ifc4x3_tc1::IfcApplication::ApplicationIdentifier() const {  std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcApplication::setApplicationIdentifier(std::string v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcApplication::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[49]); }
const IfcParse::entity& Ifc4x3_tc1::IfcApplication::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[49]); }
Ifc4x3_tc1::IfcApplication::IfcApplication(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcApplication::IfcApplication(::Ifc4x3_tc1::IfcOrganization* v1_ApplicationDeveloper, std::string v2_Version, std::string v3_ApplicationFullName, std::string v4_ApplicationIdentifier) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_ApplicationDeveloper ? v1_ApplicationDeveloper->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Version));set_attribute_value(2, (v3_ApplicationFullName));set_attribute_value(3, (v4_ApplicationIdentifier));; populate_derived(); }

// Function implementations for IfcAppliedValue
boost::optional< std::string > Ifc4x3_tc1::IfcAppliedValue::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcAppliedValue::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcAppliedValue::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcAppliedValue::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
::Ifc4x3_tc1::IfcAppliedValueSelect* Ifc4x3_tc1::IfcAppliedValue::AppliedValue() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcAppliedValueSelect>(true); }
void Ifc4x3_tc1::IfcAppliedValue::setAppliedValue(::Ifc4x3_tc1::IfcAppliedValueSelect* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcMeasureWithUnit* Ifc4x3_tc1::IfcAppliedValue::UnitBasis() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcMeasureWithUnit>(true); }
void Ifc4x3_tc1::IfcAppliedValue::setUnitBasis(::Ifc4x3_tc1::IfcMeasureWithUnit* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcAppliedValue::ApplicableDate() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcAppliedValue::setApplicableDate(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcAppliedValue::FixedUntilDate() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcAppliedValue::setFixedUntilDate(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcAppliedValue::Category() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcAppliedValue::setCategory(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< std::string > Ifc4x3_tc1::IfcAppliedValue::Condition() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcAppliedValue::setCondition(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< ::Ifc4x3_tc1::IfcArithmeticOperatorEnum::Value > Ifc4x3_tc1::IfcAppliedValue::ArithmeticOperator() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcArithmeticOperatorEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcAppliedValue::setArithmeticOperator(boost::optional< ::Ifc4x3_tc1::IfcArithmeticOperatorEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcArithmeticOperatorEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > Ifc4x3_tc1::IfcAppliedValue::Components() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(9); return es->as< ::Ifc4x3_tc1::IfcAppliedValue >(); }
void Ifc4x3_tc1::IfcAppliedValue::setComponents(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v) { if (v) {set_attribute_value(9, (*v)->generalize());} else {unset_attribute_value(9);} }

::Ifc4x3_tc1::IfcExternalReferenceRelationship::list::ptr Ifc4x3_tc1::IfcAppliedValue::HasExternalReference() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[427], 3)->as<IfcExternalReferenceRelationship>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcAppliedValue::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[50]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAppliedValue::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[50]); }
Ifc4x3_tc1::IfcAppliedValue::IfcAppliedValue(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcAppliedValue::IfcAppliedValue(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcAppliedValueSelect* v3_AppliedValue, ::Ifc4x3_tc1::IfcMeasureWithUnit* v4_UnitBasis, boost::optional< std::string > v5_ApplicableDate, boost::optional< std::string > v6_FixedUntilDate, boost::optional< std::string > v7_Category, boost::optional< std::string > v8_Condition, boost::optional< ::Ifc4x3_tc1::IfcArithmeticOperatorEnum::Value > v9_ArithmeticOperator, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v10_Components) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(10))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_AppliedValue ? v3_AppliedValue->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_UnitBasis ? v4_UnitBasis->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_ApplicableDate) {set_attribute_value(4, (*v5_ApplicableDate)); } if (v6_FixedUntilDate) {set_attribute_value(5, (*v6_FixedUntilDate)); } if (v7_Category) {set_attribute_value(6, (*v7_Category)); } if (v8_Condition) {set_attribute_value(7, (*v8_Condition)); } if (v9_ArithmeticOperator) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcArithmeticOperatorEnum::Class(),(size_t)*v9_ArithmeticOperator))); } if (v10_Components) {set_attribute_value(9, (*v10_Components)->generalize()); }; populate_derived(); }

// Function implementations for IfcApproval
boost::optional< std::string > Ifc4x3_tc1::IfcApproval::Identifier() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcApproval::setIdentifier(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcApproval::Name() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcApproval::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcApproval::Description() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcApproval::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< std::string > Ifc4x3_tc1::IfcApproval::TimeOfApproval() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcApproval::setTimeOfApproval(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< std::string > Ifc4x3_tc1::IfcApproval::Status() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcApproval::setStatus(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcApproval::Level() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcApproval::setLevel(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcApproval::Qualifier() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcApproval::setQualifier(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
::Ifc4x3_tc1::IfcActorSelect* Ifc4x3_tc1::IfcApproval::RequestingApproval() const { if(data_.get_attribute_value(7).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(7)))->as<::Ifc4x3_tc1::IfcActorSelect>(true); }
void Ifc4x3_tc1::IfcApproval::setRequestingApproval(::Ifc4x3_tc1::IfcActorSelect* v) { set_attribute_value(7, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(7); }
::Ifc4x3_tc1::IfcActorSelect* Ifc4x3_tc1::IfcApproval::GivingApproval() const { if(data_.get_attribute_value(8).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(8)))->as<::Ifc4x3_tc1::IfcActorSelect>(true); }
void Ifc4x3_tc1::IfcApproval::setGivingApproval(::Ifc4x3_tc1::IfcActorSelect* v) { set_attribute_value(8, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(8); }

::Ifc4x3_tc1::IfcExternalReferenceRelationship::list::ptr Ifc4x3_tc1::IfcApproval::HasExternalReferences() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[427], 3)->as<IfcExternalReferenceRelationship>(); }
::Ifc4x3_tc1::IfcRelAssociatesApproval::list::ptr Ifc4x3_tc1::IfcApproval::ApprovedObjects() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[907], 5)->as<IfcRelAssociatesApproval>(); }
::Ifc4x3_tc1::IfcResourceApprovalRelationship::list::ptr Ifc4x3_tc1::IfcApproval::ApprovedResources() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[953], 3)->as<IfcResourceApprovalRelationship>(); }
::Ifc4x3_tc1::IfcApprovalRelationship::list::ptr Ifc4x3_tc1::IfcApproval::IsRelatedWith() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[53], 3)->as<IfcApprovalRelationship>(); }
::Ifc4x3_tc1::IfcApprovalRelationship::list::ptr Ifc4x3_tc1::IfcApproval::Relates() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[53], 2)->as<IfcApprovalRelationship>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcApproval::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[52]); }
const IfcParse::entity& Ifc4x3_tc1::IfcApproval::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[52]); }
Ifc4x3_tc1::IfcApproval::IfcApproval(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcApproval::IfcApproval(boost::optional< std::string > v1_Identifier, boost::optional< std::string > v2_Name, boost::optional< std::string > v3_Description, boost::optional< std::string > v4_TimeOfApproval, boost::optional< std::string > v5_Status, boost::optional< std::string > v6_Level, boost::optional< std::string > v7_Qualifier, ::Ifc4x3_tc1::IfcActorSelect* v8_RequestingApproval, ::Ifc4x3_tc1::IfcActorSelect* v9_GivingApproval) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(9))) {  if (v1_Identifier) {set_attribute_value(0, (*v1_Identifier)); } if (v2_Name) {set_attribute_value(1, (*v2_Name)); } if (v3_Description) {set_attribute_value(2, (*v3_Description)); } if (v4_TimeOfApproval) {set_attribute_value(3, (*v4_TimeOfApproval)); } if (v5_Status) {set_attribute_value(4, (*v5_Status)); } if (v6_Level) {set_attribute_value(5, (*v6_Level)); } if (v7_Qualifier) {set_attribute_value(6, (*v7_Qualifier)); }set_attribute_value(7, v8_RequestingApproval ? v8_RequestingApproval->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, v9_GivingApproval ? v9_GivingApproval->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcApprovalRelationship
::Ifc4x3_tc1::IfcApproval* Ifc4x3_tc1::IfcApprovalRelationship::RelatingApproval() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcApproval>(true); }
void Ifc4x3_tc1::IfcApprovalRelationship::setRelatingApproval(::Ifc4x3_tc1::IfcApproval* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
aggregate_of< ::Ifc4x3_tc1::IfcApproval >::ptr Ifc4x3_tc1::IfcApprovalRelationship::RelatedApprovals() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(3); return es->as< ::Ifc4x3_tc1::IfcApproval >(); }
void Ifc4x3_tc1::IfcApprovalRelationship::setRelatedApprovals(aggregate_of< ::Ifc4x3_tc1::IfcApproval >::ptr v) { set_attribute_value(3, (v)->generalize());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcApprovalRelationship::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[53]); }
const IfcParse::entity& Ifc4x3_tc1::IfcApprovalRelationship::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[53]); }
Ifc4x3_tc1::IfcApprovalRelationship::IfcApprovalRelationship(IfcEntityInstanceData&& e) : IfcResourceLevelRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcApprovalRelationship::IfcApprovalRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcApproval* v3_RelatingApproval, aggregate_of< ::Ifc4x3_tc1::IfcApproval >::ptr v4_RelatedApprovals) : IfcResourceLevelRelationship(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_RelatingApproval ? v3_RelatingApproval->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_RelatedApprovals)->generalize());; populate_derived(); }

// Function implementations for IfcArbitraryClosedProfileDef
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcArbitraryClosedProfileDef::OuterCurve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcArbitraryClosedProfileDef::setOuterCurve(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcArbitraryClosedProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[54]); }
const IfcParse::entity& Ifc4x3_tc1::IfcArbitraryClosedProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[54]); }
Ifc4x3_tc1::IfcArbitraryClosedProfileDef::IfcArbitraryClosedProfileDef(IfcEntityInstanceData&& e) : IfcProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcArbitraryClosedProfileDef::IfcArbitraryClosedProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcCurve* v3_OuterCurve) : IfcProfileDef(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_OuterCurve ? v3_OuterCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcArbitraryOpenProfileDef
::Ifc4x3_tc1::IfcBoundedCurve* Ifc4x3_tc1::IfcArbitraryOpenProfileDef::Curve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcBoundedCurve>(true); }
void Ifc4x3_tc1::IfcArbitraryOpenProfileDef::setCurve(::Ifc4x3_tc1::IfcBoundedCurve* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcArbitraryOpenProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[55]); }
const IfcParse::entity& Ifc4x3_tc1::IfcArbitraryOpenProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[55]); }
Ifc4x3_tc1::IfcArbitraryOpenProfileDef::IfcArbitraryOpenProfileDef(IfcEntityInstanceData&& e) : IfcProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcArbitraryOpenProfileDef::IfcArbitraryOpenProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcBoundedCurve* v3_Curve) : IfcProfileDef(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Curve ? v3_Curve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcArbitraryProfileDefWithVoids
aggregate_of< ::Ifc4x3_tc1::IfcCurve >::ptr Ifc4x3_tc1::IfcArbitraryProfileDefWithVoids::InnerCurves() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(3); return es->as< ::Ifc4x3_tc1::IfcCurve >(); }
void Ifc4x3_tc1::IfcArbitraryProfileDefWithVoids::setInnerCurves(aggregate_of< ::Ifc4x3_tc1::IfcCurve >::ptr v) { set_attribute_value(3, (v)->generalize());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcArbitraryProfileDefWithVoids::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[56]); }
const IfcParse::entity& Ifc4x3_tc1::IfcArbitraryProfileDefWithVoids::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[56]); }
Ifc4x3_tc1::IfcArbitraryProfileDefWithVoids::IfcArbitraryProfileDefWithVoids(IfcEntityInstanceData&& e) : IfcArbitraryClosedProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcArbitraryProfileDefWithVoids::IfcArbitraryProfileDefWithVoids(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcCurve* v3_OuterCurve, aggregate_of< ::Ifc4x3_tc1::IfcCurve >::ptr v4_InnerCurves) : IfcArbitraryClosedProfileDef(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_OuterCurve ? v3_OuterCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_InnerCurves)->generalize());; populate_derived(); }

// Function implementations for IfcAsset
boost::optional< std::string > Ifc4x3_tc1::IfcAsset::Identification() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcAsset::setIdentification(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
::Ifc4x3_tc1::IfcCostValue* Ifc4x3_tc1::IfcAsset::OriginalValue() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcCostValue>(true); }
void Ifc4x3_tc1::IfcAsset::setOriginalValue(::Ifc4x3_tc1::IfcCostValue* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
::Ifc4x3_tc1::IfcCostValue* Ifc4x3_tc1::IfcAsset::CurrentValue() const { if(data_.get_attribute_value(7).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(7)))->as<::Ifc4x3_tc1::IfcCostValue>(true); }
void Ifc4x3_tc1::IfcAsset::setCurrentValue(::Ifc4x3_tc1::IfcCostValue* v) { set_attribute_value(7, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(7); }
::Ifc4x3_tc1::IfcCostValue* Ifc4x3_tc1::IfcAsset::TotalReplacementCost() const { if(data_.get_attribute_value(8).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(8)))->as<::Ifc4x3_tc1::IfcCostValue>(true); }
void Ifc4x3_tc1::IfcAsset::setTotalReplacementCost(::Ifc4x3_tc1::IfcCostValue* v) { set_attribute_value(8, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(8); }
::Ifc4x3_tc1::IfcActorSelect* Ifc4x3_tc1::IfcAsset::Owner() const { if(data_.get_attribute_value(9).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(9)))->as<::Ifc4x3_tc1::IfcActorSelect>(true); }
void Ifc4x3_tc1::IfcAsset::setOwner(::Ifc4x3_tc1::IfcActorSelect* v) { set_attribute_value(9, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(9); }
::Ifc4x3_tc1::IfcActorSelect* Ifc4x3_tc1::IfcAsset::User() const { if(data_.get_attribute_value(10).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(10)))->as<::Ifc4x3_tc1::IfcActorSelect>(true); }
void Ifc4x3_tc1::IfcAsset::setUser(::Ifc4x3_tc1::IfcActorSelect* v) { set_attribute_value(10, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(10); }
::Ifc4x3_tc1::IfcPerson* Ifc4x3_tc1::IfcAsset::ResponsiblePerson() const { if(data_.get_attribute_value(11).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(11)))->as<::Ifc4x3_tc1::IfcPerson>(true); }
void Ifc4x3_tc1::IfcAsset::setResponsiblePerson(::Ifc4x3_tc1::IfcPerson* v) { set_attribute_value(11, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(11); }
boost::optional< std::string > Ifc4x3_tc1::IfcAsset::IncorporationDate() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcAsset::setIncorporationDate(boost::optional< std::string > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }
::Ifc4x3_tc1::IfcCostValue* Ifc4x3_tc1::IfcAsset::DepreciatedValue() const { if(data_.get_attribute_value(13).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(13)))->as<::Ifc4x3_tc1::IfcCostValue>(true); }
void Ifc4x3_tc1::IfcAsset::setDepreciatedValue(::Ifc4x3_tc1::IfcCostValue* v) { set_attribute_value(13, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(13); }


const IfcParse::entity& Ifc4x3_tc1::IfcAsset::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[62]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAsset::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[62]); }
Ifc4x3_tc1::IfcAsset::IfcAsset(IfcEntityInstanceData&& e) : IfcGroup(std::move(e)) { }
Ifc4x3_tc1::IfcAsset::IfcAsset(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, ::Ifc4x3_tc1::IfcCostValue* v7_OriginalValue, ::Ifc4x3_tc1::IfcCostValue* v8_CurrentValue, ::Ifc4x3_tc1::IfcCostValue* v9_TotalReplacementCost, ::Ifc4x3_tc1::IfcActorSelect* v10_Owner, ::Ifc4x3_tc1::IfcActorSelect* v11_User, ::Ifc4x3_tc1::IfcPerson* v12_ResponsiblePerson, boost::optional< std::string > v13_IncorporationDate, ::Ifc4x3_tc1::IfcCostValue* v14_DepreciatedValue) : IfcGroup(IfcEntityInstanceData(storage_t(14))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); }set_attribute_value(6, v7_OriginalValue ? v7_OriginalValue->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_CurrentValue ? v8_CurrentValue->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, v9_TotalReplacementCost ? v9_TotalReplacementCost->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(9, v10_Owner ? v10_Owner->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(10, v11_User ? v11_User->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(11, v12_ResponsiblePerson ? v12_ResponsiblePerson->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v13_IncorporationDate) {set_attribute_value(12, (*v13_IncorporationDate)); }set_attribute_value(13, v14_DepreciatedValue ? v14_DepreciatedValue->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcAsymmetricIShapeProfileDef
double Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::BottomFlangeWidth() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::setBottomFlangeWidth(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::OverallDepth() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::setOverallDepth(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
double Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::WebThickness() const {  double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::setWebThickness(double v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
double Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::BottomFlangeThickness() const {  double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::setBottomFlangeThickness(double v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
boost::optional< double > Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::BottomFlangeFilletRadius() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::setBottomFlangeFilletRadius(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
double Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::TopFlangeWidth() const {  double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::setTopFlangeWidth(double v) { set_attribute_value(8, v);if constexpr (false)unset_attribute_value(8); }
boost::optional< double > Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::TopFlangeThickness() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::setTopFlangeThickness(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< double > Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::TopFlangeFilletRadius() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::setTopFlangeFilletRadius(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< double > Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::BottomFlangeEdgeRadius() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::setBottomFlangeEdgeRadius(boost::optional< double > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< double > Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::BottomFlangeSlope() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } double v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::setBottomFlangeSlope(boost::optional< double > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }
boost::optional< double > Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::TopFlangeEdgeRadius() const { if(data_.get_attribute_value(13).isNull()) { return boost::none; } double v = data_.get_attribute_value(13); return v; }
void Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::setTopFlangeEdgeRadius(boost::optional< double > v) { if (v) {set_attribute_value(13, *v);} else {unset_attribute_value(13);} }
boost::optional< double > Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::TopFlangeSlope() const { if(data_.get_attribute_value(14).isNull()) { return boost::none; } double v = data_.get_attribute_value(14); return v; }
void Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::setTopFlangeSlope(boost::optional< double > v) { if (v) {set_attribute_value(14, *v);} else {unset_attribute_value(14);} }


const IfcParse::entity& Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[63]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[63]); }
Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::IfcAsymmetricIShapeProfileDef(IfcEntityInstanceData&& e) : IfcParameterizedProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcAsymmetricIShapeProfileDef::IfcAsymmetricIShapeProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_BottomFlangeWidth, double v5_OverallDepth, double v6_WebThickness, double v7_BottomFlangeThickness, boost::optional< double > v8_BottomFlangeFilletRadius, double v9_TopFlangeWidth, boost::optional< double > v10_TopFlangeThickness, boost::optional< double > v11_TopFlangeFilletRadius, boost::optional< double > v12_BottomFlangeEdgeRadius, boost::optional< double > v13_BottomFlangeSlope, boost::optional< double > v14_TopFlangeEdgeRadius, boost::optional< double > v15_TopFlangeSlope) : IfcParameterizedProfileDef(IfcEntityInstanceData(storage_t(15))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_BottomFlangeWidth));set_attribute_value(4, (v5_OverallDepth));set_attribute_value(5, (v6_WebThickness));set_attribute_value(6, (v7_BottomFlangeThickness)); if (v8_BottomFlangeFilletRadius) {set_attribute_value(7, (*v8_BottomFlangeFilletRadius)); }set_attribute_value(8, (v9_TopFlangeWidth)); if (v10_TopFlangeThickness) {set_attribute_value(9, (*v10_TopFlangeThickness)); } if (v11_TopFlangeFilletRadius) {set_attribute_value(10, (*v11_TopFlangeFilletRadius)); } if (v12_BottomFlangeEdgeRadius) {set_attribute_value(11, (*v12_BottomFlangeEdgeRadius)); } if (v13_BottomFlangeSlope) {set_attribute_value(12, (*v13_BottomFlangeSlope)); } if (v14_TopFlangeEdgeRadius) {set_attribute_value(13, (*v14_TopFlangeEdgeRadius)); } if (v15_TopFlangeSlope) {set_attribute_value(14, (*v15_TopFlangeSlope)); }; populate_derived(); }

// Function implementations for IfcAudioVisualAppliance
boost::optional< ::Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Value > Ifc4x3_tc1::IfcAudioVisualAppliance::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcAudioVisualAppliance::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcAudioVisualAppliance::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[64]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAudioVisualAppliance::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[64]); }
Ifc4x3_tc1::IfcAudioVisualAppliance::IfcAudioVisualAppliance(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcAudioVisualAppliance::IfcAudioVisualAppliance(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcAudioVisualApplianceType
::Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Value Ifc4x3_tc1::IfcAudioVisualApplianceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcAudioVisualApplianceType::setPredefinedType(::Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcAudioVisualApplianceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[65]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAudioVisualApplianceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[65]); }
Ifc4x3_tc1::IfcAudioVisualApplianceType::IfcAudioVisualApplianceType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcAudioVisualApplianceType::IfcAudioVisualApplianceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcAudioVisualApplianceTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcAxis1Placement
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcAxis1Placement::Axis() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcAxis1Placement::setAxis(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcAxis1Placement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[67]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAxis1Placement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[67]); }
Ifc4x3_tc1::IfcAxis1Placement::IfcAxis1Placement(IfcEntityInstanceData&& e) : IfcPlacement(std::move(e)) { }
Ifc4x3_tc1::IfcAxis1Placement::IfcAxis1Placement(::Ifc4x3_tc1::IfcPoint* v1_Location, ::Ifc4x3_tc1::IfcDirection* v2_Axis) : IfcPlacement(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Location ? v1_Location->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Axis ? v2_Axis->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcAxis2Placement2D
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcAxis2Placement2D::RefDirection() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcAxis2Placement2D::setRefDirection(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcAxis2Placement2D::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[69]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAxis2Placement2D::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[69]); }
Ifc4x3_tc1::IfcAxis2Placement2D::IfcAxis2Placement2D(IfcEntityInstanceData&& e) : IfcPlacement(std::move(e)) { }
Ifc4x3_tc1::IfcAxis2Placement2D::IfcAxis2Placement2D(::Ifc4x3_tc1::IfcPoint* v1_Location, ::Ifc4x3_tc1::IfcDirection* v2_RefDirection) : IfcPlacement(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Location ? v1_Location->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_RefDirection ? v2_RefDirection->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcAxis2Placement3D
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcAxis2Placement3D::Axis() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcAxis2Placement3D::setAxis(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcAxis2Placement3D::RefDirection() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcAxis2Placement3D::setRefDirection(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcAxis2Placement3D::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[70]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAxis2Placement3D::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[70]); }
Ifc4x3_tc1::IfcAxis2Placement3D::IfcAxis2Placement3D(IfcEntityInstanceData&& e) : IfcPlacement(std::move(e)) { }
Ifc4x3_tc1::IfcAxis2Placement3D::IfcAxis2Placement3D(::Ifc4x3_tc1::IfcPoint* v1_Location, ::Ifc4x3_tc1::IfcDirection* v2_Axis, ::Ifc4x3_tc1::IfcDirection* v3_RefDirection) : IfcPlacement(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Location ? v1_Location->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Axis ? v2_Axis->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_RefDirection ? v3_RefDirection->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcAxis2PlacementLinear
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcAxis2PlacementLinear::Axis() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcAxis2PlacementLinear::setAxis(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcAxis2PlacementLinear::RefDirection() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcAxis2PlacementLinear::setRefDirection(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcAxis2PlacementLinear::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[71]); }
const IfcParse::entity& Ifc4x3_tc1::IfcAxis2PlacementLinear::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[71]); }
Ifc4x3_tc1::IfcAxis2PlacementLinear::IfcAxis2PlacementLinear(IfcEntityInstanceData&& e) : IfcPlacement(std::move(e)) { }
Ifc4x3_tc1::IfcAxis2PlacementLinear::IfcAxis2PlacementLinear(::Ifc4x3_tc1::IfcPoint* v1_Location, ::Ifc4x3_tc1::IfcDirection* v2_Axis, ::Ifc4x3_tc1::IfcDirection* v3_RefDirection) : IfcPlacement(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Location ? v1_Location->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Axis ? v2_Axis->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_RefDirection ? v3_RefDirection->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcBSplineCurve
int Ifc4x3_tc1::IfcBSplineCurve::Degree() const {  int v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcBSplineCurve::setDegree(int v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr Ifc4x3_tc1::IfcBSplineCurve::ControlPointsList() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcCartesianPoint >(); }
void Ifc4x3_tc1::IfcBSplineCurve::setControlPointsList(aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcBSplineCurveForm::Value Ifc4x3_tc1::IfcBSplineCurve::CurveForm() const {  return ::Ifc4x3_tc1::IfcBSplineCurveForm::FromString(data_.get_attribute_value(2)); }
void Ifc4x3_tc1::IfcBSplineCurve::setCurveForm(::Ifc4x3_tc1::IfcBSplineCurveForm::Value v) { set_attribute_value(2, EnumerationReference(&::Ifc4x3_tc1::IfcBSplineCurveForm::Class(), (size_t) v));if constexpr (false)unset_attribute_value(2); }
boost::logic::tribool Ifc4x3_tc1::IfcBSplineCurve::ClosedCurve() const {  boost::logic::tribool v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcBSplineCurve::setClosedCurve(boost::logic::tribool v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
boost::logic::tribool Ifc4x3_tc1::IfcBSplineCurve::SelfIntersect() const {  boost::logic::tribool v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcBSplineCurve::setSelfIntersect(boost::logic::tribool v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcBSplineCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[107]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBSplineCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[107]); }
Ifc4x3_tc1::IfcBSplineCurve::IfcBSplineCurve(IfcEntityInstanceData&& e) : IfcBoundedCurve(std::move(e)) { }
Ifc4x3_tc1::IfcBSplineCurve::IfcBSplineCurve(int v1_Degree, aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr v2_ControlPointsList, ::Ifc4x3_tc1::IfcBSplineCurveForm::Value v3_CurveForm, boost::logic::tribool v4_ClosedCurve, boost::logic::tribool v5_SelfIntersect) : IfcBoundedCurve(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_Degree));set_attribute_value(1, (v2_ControlPointsList)->generalize());set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcBSplineCurveForm::Class(),(size_t)v3_CurveForm)));set_attribute_value(3, (v4_ClosedCurve));set_attribute_value(4, (v5_SelfIntersect));; populate_derived(); }

// Function implementations for IfcBSplineCurveWithKnots
std::vector< int > /*[2:?]*/ Ifc4x3_tc1::IfcBSplineCurveWithKnots::KnotMultiplicities() const {  std::vector< int > /*[2:?]*/ v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcBSplineCurveWithKnots::setKnotMultiplicities(std::vector< int > /*[2:?]*/ v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
std::vector< double > /*[2:?]*/ Ifc4x3_tc1::IfcBSplineCurveWithKnots::Knots() const {  std::vector< double > /*[2:?]*/ v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcBSplineCurveWithKnots::setKnots(std::vector< double > /*[2:?]*/ v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
::Ifc4x3_tc1::IfcKnotType::Value Ifc4x3_tc1::IfcBSplineCurveWithKnots::KnotSpec() const {  return ::Ifc4x3_tc1::IfcKnotType::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcBSplineCurveWithKnots::setKnotSpec(::Ifc4x3_tc1::IfcKnotType::Value v) { set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcKnotType::Class(), (size_t) v));if constexpr (false)unset_attribute_value(7); }


const IfcParse::entity& Ifc4x3_tc1::IfcBSplineCurveWithKnots::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[109]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBSplineCurveWithKnots::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[109]); }
Ifc4x3_tc1::IfcBSplineCurveWithKnots::IfcBSplineCurveWithKnots(IfcEntityInstanceData&& e) : IfcBSplineCurve(std::move(e)) { }
Ifc4x3_tc1::IfcBSplineCurveWithKnots::IfcBSplineCurveWithKnots(int v1_Degree, aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr v2_ControlPointsList, ::Ifc4x3_tc1::IfcBSplineCurveForm::Value v3_CurveForm, boost::logic::tribool v4_ClosedCurve, boost::logic::tribool v5_SelfIntersect, std::vector< int > /*[2:?]*/ v6_KnotMultiplicities, std::vector< double > /*[2:?]*/ v7_Knots, ::Ifc4x3_tc1::IfcKnotType::Value v8_KnotSpec) : IfcBSplineCurve(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_Degree));set_attribute_value(1, (v2_ControlPointsList)->generalize());set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcBSplineCurveForm::Class(),(size_t)v3_CurveForm)));set_attribute_value(3, (v4_ClosedCurve));set_attribute_value(4, (v5_SelfIntersect));set_attribute_value(5, (v6_KnotMultiplicities));set_attribute_value(6, (v7_Knots));set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcKnotType::Class(),(size_t)v8_KnotSpec)));; populate_derived(); }

// Function implementations for IfcBSplineSurface
int Ifc4x3_tc1::IfcBSplineSurface::UDegree() const {  int v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcBSplineSurface::setUDegree(int v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
int Ifc4x3_tc1::IfcBSplineSurface::VDegree() const {  int v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcBSplineSurface::setVDegree(int v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
aggregate_of_aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr Ifc4x3_tc1::IfcBSplineSurface::ControlPointsList() const {  aggregate_of_aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcCartesianPoint >(); }
void Ifc4x3_tc1::IfcBSplineSurface::setControlPointsList(aggregate_of_aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcBSplineSurfaceForm::Value Ifc4x3_tc1::IfcBSplineSurface::SurfaceForm() const {  return ::Ifc4x3_tc1::IfcBSplineSurfaceForm::FromString(data_.get_attribute_value(3)); }
void Ifc4x3_tc1::IfcBSplineSurface::setSurfaceForm(::Ifc4x3_tc1::IfcBSplineSurfaceForm::Value v) { set_attribute_value(3, EnumerationReference(&::Ifc4x3_tc1::IfcBSplineSurfaceForm::Class(), (size_t) v));if constexpr (false)unset_attribute_value(3); }
boost::logic::tribool Ifc4x3_tc1::IfcBSplineSurface::UClosed() const {  boost::logic::tribool v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcBSplineSurface::setUClosed(boost::logic::tribool v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
boost::logic::tribool Ifc4x3_tc1::IfcBSplineSurface::VClosed() const {  boost::logic::tribool v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcBSplineSurface::setVClosed(boost::logic::tribool v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
boost::logic::tribool Ifc4x3_tc1::IfcBSplineSurface::SelfIntersect() const {  boost::logic::tribool v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcBSplineSurface::setSelfIntersect(boost::logic::tribool v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcBSplineSurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[110]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBSplineSurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[110]); }
Ifc4x3_tc1::IfcBSplineSurface::IfcBSplineSurface(IfcEntityInstanceData&& e) : IfcBoundedSurface(std::move(e)) { }
Ifc4x3_tc1::IfcBSplineSurface::IfcBSplineSurface(int v1_UDegree, int v2_VDegree, aggregate_of_aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr v3_ControlPointsList, ::Ifc4x3_tc1::IfcBSplineSurfaceForm::Value v4_SurfaceForm, boost::logic::tribool v5_UClosed, boost::logic::tribool v6_VClosed, boost::logic::tribool v7_SelfIntersect) : IfcBoundedSurface(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_UDegree));set_attribute_value(1, (v2_VDegree));set_attribute_value(2, (v3_ControlPointsList)->generalize());set_attribute_value(3, (EnumerationReference(&::Ifc4x3_tc1::IfcBSplineSurfaceForm::Class(),(size_t)v4_SurfaceForm)));set_attribute_value(4, (v5_UClosed));set_attribute_value(5, (v6_VClosed));set_attribute_value(6, (v7_SelfIntersect));; populate_derived(); }

// Function implementations for IfcBSplineSurfaceWithKnots
std::vector< int > /*[2:?]*/ Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::UMultiplicities() const {  std::vector< int > /*[2:?]*/ v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::setUMultiplicities(std::vector< int > /*[2:?]*/ v) { set_attribute_value(7, v);if constexpr (false)unset_attribute_value(7); }
std::vector< int > /*[2:?]*/ Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::VMultiplicities() const {  std::vector< int > /*[2:?]*/ v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::setVMultiplicities(std::vector< int > /*[2:?]*/ v) { set_attribute_value(8, v);if constexpr (false)unset_attribute_value(8); }
std::vector< double > /*[2:?]*/ Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::UKnots() const {  std::vector< double > /*[2:?]*/ v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::setUKnots(std::vector< double > /*[2:?]*/ v) { set_attribute_value(9, v);if constexpr (false)unset_attribute_value(9); }
std::vector< double > /*[2:?]*/ Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::VKnots() const {  std::vector< double > /*[2:?]*/ v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::setVKnots(std::vector< double > /*[2:?]*/ v) { set_attribute_value(10, v);if constexpr (false)unset_attribute_value(10); }
::Ifc4x3_tc1::IfcKnotType::Value Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::KnotSpec() const {  return ::Ifc4x3_tc1::IfcKnotType::FromString(data_.get_attribute_value(11)); }
void Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::setKnotSpec(::Ifc4x3_tc1::IfcKnotType::Value v) { set_attribute_value(11, EnumerationReference(&::Ifc4x3_tc1::IfcKnotType::Class(), (size_t) v));if constexpr (false)unset_attribute_value(11); }


const IfcParse::entity& Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[112]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[112]); }
Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::IfcBSplineSurfaceWithKnots(IfcEntityInstanceData&& e) : IfcBSplineSurface(std::move(e)) { }
Ifc4x3_tc1::IfcBSplineSurfaceWithKnots::IfcBSplineSurfaceWithKnots(int v1_UDegree, int v2_VDegree, aggregate_of_aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr v3_ControlPointsList, ::Ifc4x3_tc1::IfcBSplineSurfaceForm::Value v4_SurfaceForm, boost::logic::tribool v5_UClosed, boost::logic::tribool v6_VClosed, boost::logic::tribool v7_SelfIntersect, std::vector< int > /*[2:?]*/ v8_UMultiplicities, std::vector< int > /*[2:?]*/ v9_VMultiplicities, std::vector< double > /*[2:?]*/ v10_UKnots, std::vector< double > /*[2:?]*/ v11_VKnots, ::Ifc4x3_tc1::IfcKnotType::Value v12_KnotSpec) : IfcBSplineSurface(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_UDegree));set_attribute_value(1, (v2_VDegree));set_attribute_value(2, (v3_ControlPointsList)->generalize());set_attribute_value(3, (EnumerationReference(&::Ifc4x3_tc1::IfcBSplineSurfaceForm::Class(),(size_t)v4_SurfaceForm)));set_attribute_value(4, (v5_UClosed));set_attribute_value(5, (v6_VClosed));set_attribute_value(6, (v7_SelfIntersect));set_attribute_value(7, (v8_UMultiplicities));set_attribute_value(8, (v9_VMultiplicities));set_attribute_value(9, (v10_UKnots));set_attribute_value(10, (v11_VKnots));set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcKnotType::Class(),(size_t)v12_KnotSpec)));; populate_derived(); }

// Function implementations for IfcBeam
boost::optional< ::Ifc4x3_tc1::IfcBeamTypeEnum::Value > Ifc4x3_tc1::IfcBeam::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcBeamTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcBeam::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcBeamTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcBeamTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcBeam::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[72]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBeam::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[72]); }
Ifc4x3_tc1::IfcBeam::IfcBeam(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcBeam::IfcBeam(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcBeamTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcBeamTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcBeamType
::Ifc4x3_tc1::IfcBeamTypeEnum::Value Ifc4x3_tc1::IfcBeamType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcBeamTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcBeamType::setPredefinedType(::Ifc4x3_tc1::IfcBeamTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcBeamTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcBeamType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[73]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBeamType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[73]); }
Ifc4x3_tc1::IfcBeamType::IfcBeamType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcBeamType::IfcBeamType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcBeamTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcBeamTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcBearing
boost::optional< ::Ifc4x3_tc1::IfcBearingTypeEnum::Value > Ifc4x3_tc1::IfcBearing::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcBearingTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcBearing::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcBearingTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcBearingTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcBearing::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[75]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBearing::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[75]); }
Ifc4x3_tc1::IfcBearing::IfcBearing(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcBearing::IfcBearing(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcBearingTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcBearingTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcBearingType
::Ifc4x3_tc1::IfcBearingTypeEnum::Value Ifc4x3_tc1::IfcBearingType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcBearingTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcBearingType::setPredefinedType(::Ifc4x3_tc1::IfcBearingTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcBearingTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcBearingType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[76]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBearingType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[76]); }
Ifc4x3_tc1::IfcBearingType::IfcBearingType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcBearingType::IfcBearingType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcBearingTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcBearingTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcBlobTexture
std::string Ifc4x3_tc1::IfcBlobTexture::RasterFormat() const {  std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcBlobTexture::setRasterFormat(std::string v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
boost::dynamic_bitset<> Ifc4x3_tc1::IfcBlobTexture::RasterCode() const {  boost::dynamic_bitset<> v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcBlobTexture::setRasterCode(boost::dynamic_bitset<> v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcBlobTexture::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[81]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBlobTexture::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[81]); }
Ifc4x3_tc1::IfcBlobTexture::IfcBlobTexture(IfcEntityInstanceData&& e) : IfcSurfaceTexture(std::move(e)) { }
Ifc4x3_tc1::IfcBlobTexture::IfcBlobTexture(bool v1_RepeatS, bool v2_RepeatT, boost::optional< std::string > v3_Mode, ::Ifc4x3_tc1::IfcCartesianTransformationOperator2D* v4_TextureTransform, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_Parameter, std::string v6_RasterFormat, boost::dynamic_bitset<> v7_RasterCode) : IfcSurfaceTexture(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_RepeatS));set_attribute_value(1, (v2_RepeatT)); if (v3_Mode) {set_attribute_value(2, (*v3_Mode)); }set_attribute_value(3, v4_TextureTransform ? v4_TextureTransform->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_Parameter) {set_attribute_value(4, (*v5_Parameter)); }set_attribute_value(5, (v6_RasterFormat));set_attribute_value(6, (v7_RasterCode));; populate_derived(); }

// Function implementations for IfcBlock
double Ifc4x3_tc1::IfcBlock::XLength() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcBlock::setXLength(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
double Ifc4x3_tc1::IfcBlock::YLength() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcBlock::setYLength(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
double Ifc4x3_tc1::IfcBlock::ZLength() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcBlock::setZLength(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcBlock::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[82]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBlock::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[82]); }
Ifc4x3_tc1::IfcBlock::IfcBlock(IfcEntityInstanceData&& e) : IfcCsgPrimitive3D(std::move(e)) { }
Ifc4x3_tc1::IfcBlock::IfcBlock(::Ifc4x3_tc1::IfcAxis2Placement3D* v1_Position, double v2_XLength, double v3_YLength, double v4_ZLength) : IfcCsgPrimitive3D(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_XLength));set_attribute_value(2, (v3_YLength));set_attribute_value(3, (v4_ZLength));; populate_derived(); }

// Function implementations for IfcBoiler
boost::optional< ::Ifc4x3_tc1::IfcBoilerTypeEnum::Value > Ifc4x3_tc1::IfcBoiler::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcBoilerTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcBoiler::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcBoilerTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcBoilerTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcBoiler::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[83]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBoiler::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[83]); }
Ifc4x3_tc1::IfcBoiler::IfcBoiler(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcBoiler::IfcBoiler(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcBoilerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcBoilerTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcBoilerType
::Ifc4x3_tc1::IfcBoilerTypeEnum::Value Ifc4x3_tc1::IfcBoilerType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcBoilerTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcBoilerType::setPredefinedType(::Ifc4x3_tc1::IfcBoilerTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcBoilerTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcBoilerType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[84]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBoilerType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[84]); }
Ifc4x3_tc1::IfcBoilerType::IfcBoilerType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcBoilerType::IfcBoilerType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcBoilerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcBoilerTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcBooleanClippingResult


const IfcParse::entity& Ifc4x3_tc1::IfcBooleanClippingResult::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[87]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBooleanClippingResult::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[87]); }
Ifc4x3_tc1::IfcBooleanClippingResult::IfcBooleanClippingResult(IfcEntityInstanceData&& e) : IfcBooleanResult(std::move(e)) { }
Ifc4x3_tc1::IfcBooleanClippingResult::IfcBooleanClippingResult(::Ifc4x3_tc1::IfcBooleanOperator::Value v1_Operator, ::Ifc4x3_tc1::IfcBooleanOperand* v2_FirstOperand, ::Ifc4x3_tc1::IfcBooleanOperand* v3_SecondOperand) : IfcBooleanResult(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcBooleanOperator::Class(),(size_t)v1_Operator)));set_attribute_value(1, v2_FirstOperand ? v2_FirstOperand->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_SecondOperand ? v3_SecondOperand->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcBooleanResult
::Ifc4x3_tc1::IfcBooleanOperator::Value Ifc4x3_tc1::IfcBooleanResult::Operator() const {  return ::Ifc4x3_tc1::IfcBooleanOperator::FromString(data_.get_attribute_value(0)); }
void Ifc4x3_tc1::IfcBooleanResult::setOperator(::Ifc4x3_tc1::IfcBooleanOperator::Value v) { set_attribute_value(0, EnumerationReference(&::Ifc4x3_tc1::IfcBooleanOperator::Class(), (size_t) v));if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcBooleanOperand* Ifc4x3_tc1::IfcBooleanResult::FirstOperand() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcBooleanOperand>(true); }
void Ifc4x3_tc1::IfcBooleanResult::setFirstOperand(::Ifc4x3_tc1::IfcBooleanOperand* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcBooleanOperand* Ifc4x3_tc1::IfcBooleanResult::SecondOperand() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcBooleanOperand>(true); }
void Ifc4x3_tc1::IfcBooleanResult::setSecondOperand(::Ifc4x3_tc1::IfcBooleanOperand* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcBooleanResult::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[90]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBooleanResult::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[90]); }
Ifc4x3_tc1::IfcBooleanResult::IfcBooleanResult(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcBooleanResult::IfcBooleanResult(::Ifc4x3_tc1::IfcBooleanOperator::Value v1_Operator, ::Ifc4x3_tc1::IfcBooleanOperand* v2_FirstOperand, ::Ifc4x3_tc1::IfcBooleanOperand* v3_SecondOperand) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcBooleanOperator::Class(),(size_t)v1_Operator)));set_attribute_value(1, v2_FirstOperand ? v2_FirstOperand->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_SecondOperand ? v3_SecondOperand->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcBorehole


const IfcParse::entity& Ifc4x3_tc1::IfcBorehole::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[91]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBorehole::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[91]); }
Ifc4x3_tc1::IfcBorehole::IfcBorehole(IfcEntityInstanceData&& e) : IfcGeotechnicalAssembly(std::move(e)) { }
Ifc4x3_tc1::IfcBorehole::IfcBorehole(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcGeotechnicalAssembly(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcBoundaryCondition
boost::optional< std::string > Ifc4x3_tc1::IfcBoundaryCondition::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcBoundaryCondition::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }


const IfcParse::entity& Ifc4x3_tc1::IfcBoundaryCondition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[92]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBoundaryCondition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[92]); }
Ifc4x3_tc1::IfcBoundaryCondition::IfcBoundaryCondition(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcBoundaryCondition::IfcBoundaryCondition(boost::optional< std::string > v1_Name) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(1))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }; populate_derived(); }

// Function implementations for IfcBoundaryCurve


const IfcParse::entity& Ifc4x3_tc1::IfcBoundaryCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[93]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBoundaryCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[93]); }
Ifc4x3_tc1::IfcBoundaryCurve::IfcBoundaryCurve(IfcEntityInstanceData&& e) : IfcCompositeCurveOnSurface(std::move(e)) { }
Ifc4x3_tc1::IfcBoundaryCurve::IfcBoundaryCurve(aggregate_of< ::Ifc4x3_tc1::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect) : IfcCompositeCurveOnSurface(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_Segments)->generalize());set_attribute_value(1, (v2_SelfIntersect));; populate_derived(); }

// Function implementations for IfcBoundaryEdgeCondition
::Ifc4x3_tc1::IfcModulusOfTranslationalSubgradeReactionSelect* Ifc4x3_tc1::IfcBoundaryEdgeCondition::TranslationalStiffnessByLengthX() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcModulusOfTranslationalSubgradeReactionSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryEdgeCondition::setTranslationalStiffnessByLengthX(::Ifc4x3_tc1::IfcModulusOfTranslationalSubgradeReactionSelect* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcModulusOfTranslationalSubgradeReactionSelect* Ifc4x3_tc1::IfcBoundaryEdgeCondition::TranslationalStiffnessByLengthY() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcModulusOfTranslationalSubgradeReactionSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryEdgeCondition::setTranslationalStiffnessByLengthY(::Ifc4x3_tc1::IfcModulusOfTranslationalSubgradeReactionSelect* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcModulusOfTranslationalSubgradeReactionSelect* Ifc4x3_tc1::IfcBoundaryEdgeCondition::TranslationalStiffnessByLengthZ() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcModulusOfTranslationalSubgradeReactionSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryEdgeCondition::setTranslationalStiffnessByLengthZ(::Ifc4x3_tc1::IfcModulusOfTranslationalSubgradeReactionSelect* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
::Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionSelect* Ifc4x3_tc1::IfcBoundaryEdgeCondition::RotationalStiffnessByLengthX() const { if(data_.get_attribute_value(4).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryEdgeCondition::setRotationalStiffnessByLengthX(::Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionSelect* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionSelect* Ifc4x3_tc1::IfcBoundaryEdgeCondition::RotationalStiffnessByLengthY() const { if(data_.get_attribute_value(5).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryEdgeCondition::setRotationalStiffnessByLengthY(::Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionSelect* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionSelect* Ifc4x3_tc1::IfcBoundaryEdgeCondition::RotationalStiffnessByLengthZ() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryEdgeCondition::setRotationalStiffnessByLengthZ(::Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionSelect* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcBoundaryEdgeCondition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[94]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBoundaryEdgeCondition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[94]); }
Ifc4x3_tc1::IfcBoundaryEdgeCondition::IfcBoundaryEdgeCondition(IfcEntityInstanceData&& e) : IfcBoundaryCondition(std::move(e)) { }
Ifc4x3_tc1::IfcBoundaryEdgeCondition::IfcBoundaryEdgeCondition(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcModulusOfTranslationalSubgradeReactionSelect* v2_TranslationalStiffnessByLengthX, ::Ifc4x3_tc1::IfcModulusOfTranslationalSubgradeReactionSelect* v3_TranslationalStiffnessByLengthY, ::Ifc4x3_tc1::IfcModulusOfTranslationalSubgradeReactionSelect* v4_TranslationalStiffnessByLengthZ, ::Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionSelect* v5_RotationalStiffnessByLengthX, ::Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionSelect* v6_RotationalStiffnessByLengthY, ::Ifc4x3_tc1::IfcModulusOfRotationalSubgradeReactionSelect* v7_RotationalStiffnessByLengthZ) : IfcBoundaryCondition(IfcEntityInstanceData(storage_t(7))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, v2_TranslationalStiffnessByLengthX ? v2_TranslationalStiffnessByLengthX->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_TranslationalStiffnessByLengthY ? v3_TranslationalStiffnessByLengthY->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_TranslationalStiffnessByLengthZ ? v4_TranslationalStiffnessByLengthZ->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, v5_RotationalStiffnessByLengthX ? v5_RotationalStiffnessByLengthX->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RotationalStiffnessByLengthY ? v6_RotationalStiffnessByLengthY->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_RotationalStiffnessByLengthZ ? v7_RotationalStiffnessByLengthZ->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcBoundaryFaceCondition
::Ifc4x3_tc1::IfcModulusOfSubgradeReactionSelect* Ifc4x3_tc1::IfcBoundaryFaceCondition::TranslationalStiffnessByAreaX() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcModulusOfSubgradeReactionSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryFaceCondition::setTranslationalStiffnessByAreaX(::Ifc4x3_tc1::IfcModulusOfSubgradeReactionSelect* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcModulusOfSubgradeReactionSelect* Ifc4x3_tc1::IfcBoundaryFaceCondition::TranslationalStiffnessByAreaY() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcModulusOfSubgradeReactionSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryFaceCondition::setTranslationalStiffnessByAreaY(::Ifc4x3_tc1::IfcModulusOfSubgradeReactionSelect* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcModulusOfSubgradeReactionSelect* Ifc4x3_tc1::IfcBoundaryFaceCondition::TranslationalStiffnessByAreaZ() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcModulusOfSubgradeReactionSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryFaceCondition::setTranslationalStiffnessByAreaZ(::Ifc4x3_tc1::IfcModulusOfSubgradeReactionSelect* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcBoundaryFaceCondition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[95]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBoundaryFaceCondition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[95]); }
Ifc4x3_tc1::IfcBoundaryFaceCondition::IfcBoundaryFaceCondition(IfcEntityInstanceData&& e) : IfcBoundaryCondition(std::move(e)) { }
Ifc4x3_tc1::IfcBoundaryFaceCondition::IfcBoundaryFaceCondition(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcModulusOfSubgradeReactionSelect* v2_TranslationalStiffnessByAreaX, ::Ifc4x3_tc1::IfcModulusOfSubgradeReactionSelect* v3_TranslationalStiffnessByAreaY, ::Ifc4x3_tc1::IfcModulusOfSubgradeReactionSelect* v4_TranslationalStiffnessByAreaZ) : IfcBoundaryCondition(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, v2_TranslationalStiffnessByAreaX ? v2_TranslationalStiffnessByAreaX->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_TranslationalStiffnessByAreaY ? v3_TranslationalStiffnessByAreaY->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_TranslationalStiffnessByAreaZ ? v4_TranslationalStiffnessByAreaZ->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcBoundaryNodeCondition
::Ifc4x3_tc1::IfcTranslationalStiffnessSelect* Ifc4x3_tc1::IfcBoundaryNodeCondition::TranslationalStiffnessX() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcTranslationalStiffnessSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryNodeCondition::setTranslationalStiffnessX(::Ifc4x3_tc1::IfcTranslationalStiffnessSelect* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcTranslationalStiffnessSelect* Ifc4x3_tc1::IfcBoundaryNodeCondition::TranslationalStiffnessY() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcTranslationalStiffnessSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryNodeCondition::setTranslationalStiffnessY(::Ifc4x3_tc1::IfcTranslationalStiffnessSelect* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcTranslationalStiffnessSelect* Ifc4x3_tc1::IfcBoundaryNodeCondition::TranslationalStiffnessZ() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcTranslationalStiffnessSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryNodeCondition::setTranslationalStiffnessZ(::Ifc4x3_tc1::IfcTranslationalStiffnessSelect* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
::Ifc4x3_tc1::IfcRotationalStiffnessSelect* Ifc4x3_tc1::IfcBoundaryNodeCondition::RotationalStiffnessX() const { if(data_.get_attribute_value(4).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcRotationalStiffnessSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryNodeCondition::setRotationalStiffnessX(::Ifc4x3_tc1::IfcRotationalStiffnessSelect* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcRotationalStiffnessSelect* Ifc4x3_tc1::IfcBoundaryNodeCondition::RotationalStiffnessY() const { if(data_.get_attribute_value(5).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcRotationalStiffnessSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryNodeCondition::setRotationalStiffnessY(::Ifc4x3_tc1::IfcRotationalStiffnessSelect* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcRotationalStiffnessSelect* Ifc4x3_tc1::IfcBoundaryNodeCondition::RotationalStiffnessZ() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcRotationalStiffnessSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryNodeCondition::setRotationalStiffnessZ(::Ifc4x3_tc1::IfcRotationalStiffnessSelect* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcBoundaryNodeCondition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[96]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBoundaryNodeCondition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[96]); }
Ifc4x3_tc1::IfcBoundaryNodeCondition::IfcBoundaryNodeCondition(IfcEntityInstanceData&& e) : IfcBoundaryCondition(std::move(e)) { }
Ifc4x3_tc1::IfcBoundaryNodeCondition::IfcBoundaryNodeCondition(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcTranslationalStiffnessSelect* v2_TranslationalStiffnessX, ::Ifc4x3_tc1::IfcTranslationalStiffnessSelect* v3_TranslationalStiffnessY, ::Ifc4x3_tc1::IfcTranslationalStiffnessSelect* v4_TranslationalStiffnessZ, ::Ifc4x3_tc1::IfcRotationalStiffnessSelect* v5_RotationalStiffnessX, ::Ifc4x3_tc1::IfcRotationalStiffnessSelect* v6_RotationalStiffnessY, ::Ifc4x3_tc1::IfcRotationalStiffnessSelect* v7_RotationalStiffnessZ) : IfcBoundaryCondition(IfcEntityInstanceData(storage_t(7))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, v2_TranslationalStiffnessX ? v2_TranslationalStiffnessX->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_TranslationalStiffnessY ? v3_TranslationalStiffnessY->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_TranslationalStiffnessZ ? v4_TranslationalStiffnessZ->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, v5_RotationalStiffnessX ? v5_RotationalStiffnessX->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RotationalStiffnessY ? v6_RotationalStiffnessY->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_RotationalStiffnessZ ? v7_RotationalStiffnessZ->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcBoundaryNodeConditionWarping
::Ifc4x3_tc1::IfcWarpingStiffnessSelect* Ifc4x3_tc1::IfcBoundaryNodeConditionWarping::WarpingStiffness() const { if(data_.get_attribute_value(7).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(7)))->as<::Ifc4x3_tc1::IfcWarpingStiffnessSelect>(true); }
void Ifc4x3_tc1::IfcBoundaryNodeConditionWarping::setWarpingStiffness(::Ifc4x3_tc1::IfcWarpingStiffnessSelect* v) { set_attribute_value(7, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(7); }


const IfcParse::entity& Ifc4x3_tc1::IfcBoundaryNodeConditionWarping::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[97]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBoundaryNodeConditionWarping::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[97]); }
Ifc4x3_tc1::IfcBoundaryNodeConditionWarping::IfcBoundaryNodeConditionWarping(IfcEntityInstanceData&& e) : IfcBoundaryNodeCondition(std::move(e)) { }
Ifc4x3_tc1::IfcBoundaryNodeConditionWarping::IfcBoundaryNodeConditionWarping(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcTranslationalStiffnessSelect* v2_TranslationalStiffnessX, ::Ifc4x3_tc1::IfcTranslationalStiffnessSelect* v3_TranslationalStiffnessY, ::Ifc4x3_tc1::IfcTranslationalStiffnessSelect* v4_TranslationalStiffnessZ, ::Ifc4x3_tc1::IfcRotationalStiffnessSelect* v5_RotationalStiffnessX, ::Ifc4x3_tc1::IfcRotationalStiffnessSelect* v6_RotationalStiffnessY, ::Ifc4x3_tc1::IfcRotationalStiffnessSelect* v7_RotationalStiffnessZ, ::Ifc4x3_tc1::IfcWarpingStiffnessSelect* v8_WarpingStiffness) : IfcBoundaryNodeCondition(IfcEntityInstanceData(storage_t(8))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, v2_TranslationalStiffnessX ? v2_TranslationalStiffnessX->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_TranslationalStiffnessY ? v3_TranslationalStiffnessY->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_TranslationalStiffnessZ ? v4_TranslationalStiffnessZ->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, v5_RotationalStiffnessX ? v5_RotationalStiffnessX->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RotationalStiffnessY ? v6_RotationalStiffnessY->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_RotationalStiffnessZ ? v7_RotationalStiffnessZ->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_WarpingStiffness ? v8_WarpingStiffness->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcBoundedCurve


const IfcParse::entity& Ifc4x3_tc1::IfcBoundedCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[98]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBoundedCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[98]); }
Ifc4x3_tc1::IfcBoundedCurve::IfcBoundedCurve(IfcEntityInstanceData&& e) : IfcCurve(std::move(e)) { }
Ifc4x3_tc1::IfcBoundedCurve::IfcBoundedCurve() : IfcCurve(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcBoundedSurface


const IfcParse::entity& Ifc4x3_tc1::IfcBoundedSurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[99]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBoundedSurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[99]); }
Ifc4x3_tc1::IfcBoundedSurface::IfcBoundedSurface(IfcEntityInstanceData&& e) : IfcSurface(std::move(e)) { }
Ifc4x3_tc1::IfcBoundedSurface::IfcBoundedSurface() : IfcSurface(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcBoundingBox
::Ifc4x3_tc1::IfcCartesianPoint* Ifc4x3_tc1::IfcBoundingBox::Corner() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCartesianPoint>(true); }
void Ifc4x3_tc1::IfcBoundingBox::setCorner(::Ifc4x3_tc1::IfcCartesianPoint* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
double Ifc4x3_tc1::IfcBoundingBox::XDim() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcBoundingBox::setXDim(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
double Ifc4x3_tc1::IfcBoundingBox::YDim() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcBoundingBox::setYDim(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
double Ifc4x3_tc1::IfcBoundingBox::ZDim() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcBoundingBox::setZDim(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcBoundingBox::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[100]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBoundingBox::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[100]); }
Ifc4x3_tc1::IfcBoundingBox::IfcBoundingBox(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcBoundingBox::IfcBoundingBox(::Ifc4x3_tc1::IfcCartesianPoint* v1_Corner, double v2_XDim, double v3_YDim, double v4_ZDim) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_Corner ? v1_Corner->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_XDim));set_attribute_value(2, (v3_YDim));set_attribute_value(3, (v4_ZDim));; populate_derived(); }

// Function implementations for IfcBoxedHalfSpace
::Ifc4x3_tc1::IfcBoundingBox* Ifc4x3_tc1::IfcBoxedHalfSpace::Enclosure() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcBoundingBox>(true); }
void Ifc4x3_tc1::IfcBoxedHalfSpace::setEnclosure(::Ifc4x3_tc1::IfcBoundingBox* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcBoxedHalfSpace::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[102]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBoxedHalfSpace::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[102]); }
Ifc4x3_tc1::IfcBoxedHalfSpace::IfcBoxedHalfSpace(IfcEntityInstanceData&& e) : IfcHalfSpaceSolid(std::move(e)) { }
Ifc4x3_tc1::IfcBoxedHalfSpace::IfcBoxedHalfSpace(::Ifc4x3_tc1::IfcSurface* v1_BaseSurface, bool v2_AgreementFlag, ::Ifc4x3_tc1::IfcBoundingBox* v3_Enclosure) : IfcHalfSpaceSolid(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_BaseSurface ? v1_BaseSurface->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_AgreementFlag));set_attribute_value(2, v3_Enclosure ? v3_Enclosure->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcBridge
boost::optional< ::Ifc4x3_tc1::IfcBridgeTypeEnum::Value > Ifc4x3_tc1::IfcBridge::PredefinedType() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcBridgeTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcBridge::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcBridgeTypeEnum::Value > v) { if (v) {set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcBridgeTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcBridge::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[103]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBridge::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[103]); }
Ifc4x3_tc1::IfcBridge::IfcBridge(IfcEntityInstanceData&& e) : IfcFacility(std::move(e)) { }
Ifc4x3_tc1::IfcBridge::IfcBridge(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_tc1::IfcBridgeTypeEnum::Value > v10_PredefinedType) : IfcFacility(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); } if (v10_PredefinedType) {set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcBridgeTypeEnum::Class(),(size_t)*v10_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcBridgePart
boost::optional< ::Ifc4x3_tc1::IfcBridgePartTypeEnum::Value > Ifc4x3_tc1::IfcBridgePart::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcBridgePartTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcBridgePart::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcBridgePartTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcBridgePartTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcBridgePart::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[104]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBridgePart::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[104]); }
Ifc4x3_tc1::IfcBridgePart::IfcBridgePart(IfcEntityInstanceData&& e) : IfcFacilityPart(std::move(e)) { }
Ifc4x3_tc1::IfcBridgePart::IfcBridgePart(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_tc1::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_tc1::IfcBridgePartTypeEnum::Value > v11_PredefinedType) : IfcFacilityPart(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcFacilityUsageEnum::Class(),(size_t)v10_UsageType))); if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcBridgePartTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcBuilding
boost::optional< double > Ifc4x3_tc1::IfcBuilding::ElevationOfRefHeight() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcBuilding::setElevationOfRefHeight(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< double > Ifc4x3_tc1::IfcBuilding::ElevationOfTerrain() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcBuilding::setElevationOfTerrain(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
::Ifc4x3_tc1::IfcPostalAddress* Ifc4x3_tc1::IfcBuilding::BuildingAddress() const { if(data_.get_attribute_value(11).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(11)))->as<::Ifc4x3_tc1::IfcPostalAddress>(true); }
void Ifc4x3_tc1::IfcBuilding::setBuildingAddress(::Ifc4x3_tc1::IfcPostalAddress* v) { set_attribute_value(11, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(11); }


const IfcParse::entity& Ifc4x3_tc1::IfcBuilding::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[113]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBuilding::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[113]); }
Ifc4x3_tc1::IfcBuilding::IfcBuilding(IfcEntityInstanceData&& e) : IfcFacility(std::move(e)) { }
Ifc4x3_tc1::IfcBuilding::IfcBuilding(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< double > v10_ElevationOfRefHeight, boost::optional< double > v11_ElevationOfTerrain, ::Ifc4x3_tc1::IfcPostalAddress* v12_BuildingAddress) : IfcFacility(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); } if (v10_ElevationOfRefHeight) {set_attribute_value(9, (*v10_ElevationOfRefHeight)); } if (v11_ElevationOfTerrain) {set_attribute_value(10, (*v11_ElevationOfTerrain)); }set_attribute_value(11, v12_BuildingAddress ? v12_BuildingAddress->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcBuildingElementPart
boost::optional< ::Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Value > Ifc4x3_tc1::IfcBuildingElementPart::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcBuildingElementPart::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcBuildingElementPart::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[114]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBuildingElementPart::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[114]); }
Ifc4x3_tc1::IfcBuildingElementPart::IfcBuildingElementPart(IfcEntityInstanceData&& e) : IfcElementComponent(std::move(e)) { }
Ifc4x3_tc1::IfcBuildingElementPart::IfcBuildingElementPart(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Value > v9_PredefinedType) : IfcElementComponent(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcBuildingElementPartType
::Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Value Ifc4x3_tc1::IfcBuildingElementPartType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcBuildingElementPartType::setPredefinedType(::Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcBuildingElementPartType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[115]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBuildingElementPartType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[115]); }
Ifc4x3_tc1::IfcBuildingElementPartType::IfcBuildingElementPartType(IfcEntityInstanceData&& e) : IfcElementComponentType(std::move(e)) { }
Ifc4x3_tc1::IfcBuildingElementPartType::IfcBuildingElementPartType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Value v10_PredefinedType) : IfcElementComponentType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcBuildingElementPartTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcBuildingElementProxy
boost::optional< ::Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Value > Ifc4x3_tc1::IfcBuildingElementProxy::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcBuildingElementProxy::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcBuildingElementProxy::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[117]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBuildingElementProxy::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[117]); }
Ifc4x3_tc1::IfcBuildingElementProxy::IfcBuildingElementProxy(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcBuildingElementProxy::IfcBuildingElementProxy(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcBuildingElementProxyType
::Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Value Ifc4x3_tc1::IfcBuildingElementProxyType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcBuildingElementProxyType::setPredefinedType(::Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcBuildingElementProxyType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[118]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBuildingElementProxyType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[118]); }
Ifc4x3_tc1::IfcBuildingElementProxyType::IfcBuildingElementProxyType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcBuildingElementProxyType::IfcBuildingElementProxyType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcBuildingElementProxyTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcBuildingStorey
boost::optional< double > Ifc4x3_tc1::IfcBuildingStorey::Elevation() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcBuildingStorey::setElevation(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcBuildingStorey::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[120]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBuildingStorey::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[120]); }
Ifc4x3_tc1::IfcBuildingStorey::IfcBuildingStorey(IfcEntityInstanceData&& e) : IfcSpatialStructureElement(std::move(e)) { }
Ifc4x3_tc1::IfcBuildingStorey::IfcBuildingStorey(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< double > v10_Elevation) : IfcSpatialStructureElement(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); } if (v10_Elevation) {set_attribute_value(9, (*v10_Elevation)); }; populate_derived(); }

// Function implementations for IfcBuildingSystem
boost::optional< ::Ifc4x3_tc1::IfcBuildingSystemTypeEnum::Value > Ifc4x3_tc1::IfcBuildingSystem::PredefinedType() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcBuildingSystemTypeEnum::FromString(data_.get_attribute_value(5)); }
void Ifc4x3_tc1::IfcBuildingSystem::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcBuildingSystemTypeEnum::Value > v) { if (v) {set_attribute_value(5, EnumerationReference(&::Ifc4x3_tc1::IfcBuildingSystemTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcBuildingSystem::LongName() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcBuildingSystem::setLongName(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }


const IfcParse::entity& Ifc4x3_tc1::IfcBuildingSystem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[121]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBuildingSystem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[121]); }
Ifc4x3_tc1::IfcBuildingSystem::IfcBuildingSystem(IfcEntityInstanceData&& e) : IfcSystem(std::move(e)) { }
Ifc4x3_tc1::IfcBuildingSystem::IfcBuildingSystem(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< ::Ifc4x3_tc1::IfcBuildingSystemTypeEnum::Value > v6_PredefinedType, boost::optional< std::string > v7_LongName) : IfcSystem(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_PredefinedType) {set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcBuildingSystemTypeEnum::Class(),(size_t)*v6_PredefinedType))); } if (v7_LongName) {set_attribute_value(6, (*v7_LongName)); }; populate_derived(); }

// Function implementations for IfcBuiltElement


const IfcParse::entity& Ifc4x3_tc1::IfcBuiltElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[123]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBuiltElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[123]); }
Ifc4x3_tc1::IfcBuiltElement::IfcBuiltElement(IfcEntityInstanceData&& e) : IfcElement(std::move(e)) { }
Ifc4x3_tc1::IfcBuiltElement::IfcBuiltElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcBuiltElementType


const IfcParse::entity& Ifc4x3_tc1::IfcBuiltElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[124]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBuiltElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[124]); }
Ifc4x3_tc1::IfcBuiltElementType::IfcBuiltElementType(IfcEntityInstanceData&& e) : IfcElementType(std::move(e)) { }
Ifc4x3_tc1::IfcBuiltElementType::IfcBuiltElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcBuiltSystem
boost::optional< ::Ifc4x3_tc1::IfcBuiltSystemTypeEnum::Value > Ifc4x3_tc1::IfcBuiltSystem::PredefinedType() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcBuiltSystemTypeEnum::FromString(data_.get_attribute_value(5)); }
void Ifc4x3_tc1::IfcBuiltSystem::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcBuiltSystemTypeEnum::Value > v) { if (v) {set_attribute_value(5, EnumerationReference(&::Ifc4x3_tc1::IfcBuiltSystemTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcBuiltSystem::LongName() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcBuiltSystem::setLongName(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }


const IfcParse::entity& Ifc4x3_tc1::IfcBuiltSystem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[125]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBuiltSystem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[125]); }
Ifc4x3_tc1::IfcBuiltSystem::IfcBuiltSystem(IfcEntityInstanceData&& e) : IfcSystem(std::move(e)) { }
Ifc4x3_tc1::IfcBuiltSystem::IfcBuiltSystem(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< ::Ifc4x3_tc1::IfcBuiltSystemTypeEnum::Value > v6_PredefinedType, boost::optional< std::string > v7_LongName) : IfcSystem(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_PredefinedType) {set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcBuiltSystemTypeEnum::Class(),(size_t)*v6_PredefinedType))); } if (v7_LongName) {set_attribute_value(6, (*v7_LongName)); }; populate_derived(); }

// Function implementations for IfcBurner
boost::optional< ::Ifc4x3_tc1::IfcBurnerTypeEnum::Value > Ifc4x3_tc1::IfcBurner::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcBurnerTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcBurner::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcBurnerTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcBurnerTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcBurner::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[127]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBurner::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[127]); }
Ifc4x3_tc1::IfcBurner::IfcBurner(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcBurner::IfcBurner(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcBurnerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcBurnerTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcBurnerType
::Ifc4x3_tc1::IfcBurnerTypeEnum::Value Ifc4x3_tc1::IfcBurnerType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcBurnerTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcBurnerType::setPredefinedType(::Ifc4x3_tc1::IfcBurnerTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcBurnerTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcBurnerType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[128]); }
const IfcParse::entity& Ifc4x3_tc1::IfcBurnerType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[128]); }
Ifc4x3_tc1::IfcBurnerType::IfcBurnerType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcBurnerType::IfcBurnerType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcBurnerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcBurnerTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCShapeProfileDef
double Ifc4x3_tc1::IfcCShapeProfileDef::Depth() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcCShapeProfileDef::setDepth(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcCShapeProfileDef::Width() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcCShapeProfileDef::setWidth(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
double Ifc4x3_tc1::IfcCShapeProfileDef::WallThickness() const {  double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcCShapeProfileDef::setWallThickness(double v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
double Ifc4x3_tc1::IfcCShapeProfileDef::Girth() const {  double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcCShapeProfileDef::setGirth(double v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
boost::optional< double > Ifc4x3_tc1::IfcCShapeProfileDef::InternalFilletRadius() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcCShapeProfileDef::setInternalFilletRadius(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCShapeProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[265]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCShapeProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[265]); }
Ifc4x3_tc1::IfcCShapeProfileDef::IfcCShapeProfileDef(IfcEntityInstanceData&& e) : IfcParameterizedProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcCShapeProfileDef::IfcCShapeProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_Depth, double v5_Width, double v6_WallThickness, double v7_Girth, boost::optional< double > v8_InternalFilletRadius) : IfcParameterizedProfileDef(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Depth));set_attribute_value(4, (v5_Width));set_attribute_value(5, (v6_WallThickness));set_attribute_value(6, (v7_Girth)); if (v8_InternalFilletRadius) {set_attribute_value(7, (*v8_InternalFilletRadius)); }; populate_derived(); }

// Function implementations for IfcCableCarrierFitting
boost::optional< ::Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Value > Ifc4x3_tc1::IfcCableCarrierFitting::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCableCarrierFitting::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCableCarrierFitting::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[130]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCableCarrierFitting::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[130]); }
Ifc4x3_tc1::IfcCableCarrierFitting::IfcCableCarrierFitting(IfcEntityInstanceData&& e) : IfcFlowFitting(std::move(e)) { }
Ifc4x3_tc1::IfcCableCarrierFitting::IfcCableCarrierFitting(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Value > v9_PredefinedType) : IfcFlowFitting(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCableCarrierFittingType
::Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Value Ifc4x3_tc1::IfcCableCarrierFittingType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCableCarrierFittingType::setPredefinedType(::Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCableCarrierFittingType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[131]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCableCarrierFittingType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[131]); }
Ifc4x3_tc1::IfcCableCarrierFittingType::IfcCableCarrierFittingType(IfcEntityInstanceData&& e) : IfcFlowFittingType(std::move(e)) { }
Ifc4x3_tc1::IfcCableCarrierFittingType::IfcCableCarrierFittingType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Value v10_PredefinedType) : IfcFlowFittingType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCableCarrierFittingTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCableCarrierSegment
boost::optional< ::Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Value > Ifc4x3_tc1::IfcCableCarrierSegment::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCableCarrierSegment::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCableCarrierSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[133]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCableCarrierSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[133]); }
Ifc4x3_tc1::IfcCableCarrierSegment::IfcCableCarrierSegment(IfcEntityInstanceData&& e) : IfcFlowSegment(std::move(e)) { }
Ifc4x3_tc1::IfcCableCarrierSegment::IfcCableCarrierSegment(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Value > v9_PredefinedType) : IfcFlowSegment(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCableCarrierSegmentType
::Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Value Ifc4x3_tc1::IfcCableCarrierSegmentType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCableCarrierSegmentType::setPredefinedType(::Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCableCarrierSegmentType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[134]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCableCarrierSegmentType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[134]); }
Ifc4x3_tc1::IfcCableCarrierSegmentType::IfcCableCarrierSegmentType(IfcEntityInstanceData&& e) : IfcFlowSegmentType(std::move(e)) { }
Ifc4x3_tc1::IfcCableCarrierSegmentType::IfcCableCarrierSegmentType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Value v10_PredefinedType) : IfcFlowSegmentType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCableCarrierSegmentTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCableFitting
boost::optional< ::Ifc4x3_tc1::IfcCableFittingTypeEnum::Value > Ifc4x3_tc1::IfcCableFitting::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCableFittingTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCableFitting::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCableFittingTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCableFittingTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCableFitting::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[136]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCableFitting::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[136]); }
Ifc4x3_tc1::IfcCableFitting::IfcCableFitting(IfcEntityInstanceData&& e) : IfcFlowFitting(std::move(e)) { }
Ifc4x3_tc1::IfcCableFitting::IfcCableFitting(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCableFittingTypeEnum::Value > v9_PredefinedType) : IfcFlowFitting(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCableFittingTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCableFittingType
::Ifc4x3_tc1::IfcCableFittingTypeEnum::Value Ifc4x3_tc1::IfcCableFittingType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCableFittingTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCableFittingType::setPredefinedType(::Ifc4x3_tc1::IfcCableFittingTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCableFittingTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCableFittingType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[137]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCableFittingType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[137]); }
Ifc4x3_tc1::IfcCableFittingType::IfcCableFittingType(IfcEntityInstanceData&& e) : IfcFlowFittingType(std::move(e)) { }
Ifc4x3_tc1::IfcCableFittingType::IfcCableFittingType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCableFittingTypeEnum::Value v10_PredefinedType) : IfcFlowFittingType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCableFittingTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCableSegment
boost::optional< ::Ifc4x3_tc1::IfcCableSegmentTypeEnum::Value > Ifc4x3_tc1::IfcCableSegment::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCableSegmentTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCableSegment::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCableSegmentTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCableSegmentTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCableSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[139]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCableSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[139]); }
Ifc4x3_tc1::IfcCableSegment::IfcCableSegment(IfcEntityInstanceData&& e) : IfcFlowSegment(std::move(e)) { }
Ifc4x3_tc1::IfcCableSegment::IfcCableSegment(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCableSegmentTypeEnum::Value > v9_PredefinedType) : IfcFlowSegment(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCableSegmentTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCableSegmentType
::Ifc4x3_tc1::IfcCableSegmentTypeEnum::Value Ifc4x3_tc1::IfcCableSegmentType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCableSegmentTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCableSegmentType::setPredefinedType(::Ifc4x3_tc1::IfcCableSegmentTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCableSegmentTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCableSegmentType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[140]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCableSegmentType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[140]); }
Ifc4x3_tc1::IfcCableSegmentType::IfcCableSegmentType(IfcEntityInstanceData&& e) : IfcFlowSegmentType(std::move(e)) { }
Ifc4x3_tc1::IfcCableSegmentType::IfcCableSegmentType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCableSegmentTypeEnum::Value v10_PredefinedType) : IfcFlowSegmentType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCableSegmentTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCaissonFoundation
boost::optional< ::Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Value > Ifc4x3_tc1::IfcCaissonFoundation::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCaissonFoundation::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCaissonFoundation::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[142]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCaissonFoundation::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[142]); }
Ifc4x3_tc1::IfcCaissonFoundation::IfcCaissonFoundation(IfcEntityInstanceData&& e) : IfcDeepFoundation(std::move(e)) { }
Ifc4x3_tc1::IfcCaissonFoundation::IfcCaissonFoundation(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Value > v9_PredefinedType) : IfcDeepFoundation(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCaissonFoundationType
::Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Value Ifc4x3_tc1::IfcCaissonFoundationType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCaissonFoundationType::setPredefinedType(::Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCaissonFoundationType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[143]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCaissonFoundationType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[143]); }
Ifc4x3_tc1::IfcCaissonFoundationType::IfcCaissonFoundationType(IfcEntityInstanceData&& e) : IfcDeepFoundationType(std::move(e)) { }
Ifc4x3_tc1::IfcCaissonFoundationType::IfcCaissonFoundationType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Value v10_PredefinedType) : IfcDeepFoundationType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCaissonFoundationTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCartesianPoint
std::vector< double > /*[1:3]*/ Ifc4x3_tc1::IfcCartesianPoint::Coordinates() const {  std::vector< double > /*[1:3]*/ v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcCartesianPoint::setCoordinates(std::vector< double > /*[1:3]*/ v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcCartesianPoint::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[146]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCartesianPoint::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[146]); }
Ifc4x3_tc1::IfcCartesianPoint::IfcCartesianPoint(IfcEntityInstanceData&& e) : IfcPoint(std::move(e)) { }
Ifc4x3_tc1::IfcCartesianPoint::IfcCartesianPoint(std::vector< double > /*[1:3]*/ v1_Coordinates) : IfcPoint(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Coordinates));; populate_derived(); }

// Function implementations for IfcCartesianPointList


const IfcParse::entity& Ifc4x3_tc1::IfcCartesianPointList::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[147]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCartesianPointList::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[147]); }
Ifc4x3_tc1::IfcCartesianPointList::IfcCartesianPointList(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcCartesianPointList::IfcCartesianPointList() : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcCartesianPointList2D
std::vector< std::vector< double > > Ifc4x3_tc1::IfcCartesianPointList2D::CoordList() const {  std::vector< std::vector< double > > v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcCartesianPointList2D::setCoordList(std::vector< std::vector< double > > v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_tc1::IfcCartesianPointList2D::TagList() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcCartesianPointList2D::setTagList(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCartesianPointList2D::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[148]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCartesianPointList2D::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[148]); }
Ifc4x3_tc1::IfcCartesianPointList2D::IfcCartesianPointList2D(IfcEntityInstanceData&& e) : IfcCartesianPointList(std::move(e)) { }
Ifc4x3_tc1::IfcCartesianPointList2D::IfcCartesianPointList2D(std::vector< std::vector< double > > v1_CoordList, boost::optional< std::vector< std::string > /*[1:?]*/ > v2_TagList) : IfcCartesianPointList(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_CoordList)); if (v2_TagList) {set_attribute_value(1, (*v2_TagList)); }; populate_derived(); }

// Function implementations for IfcCartesianPointList3D
std::vector< std::vector< double > > Ifc4x3_tc1::IfcCartesianPointList3D::CoordList() const {  std::vector< std::vector< double > > v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcCartesianPointList3D::setCoordList(std::vector< std::vector< double > > v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_tc1::IfcCartesianPointList3D::TagList() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcCartesianPointList3D::setTagList(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCartesianPointList3D::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[149]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCartesianPointList3D::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[149]); }
Ifc4x3_tc1::IfcCartesianPointList3D::IfcCartesianPointList3D(IfcEntityInstanceData&& e) : IfcCartesianPointList(std::move(e)) { }
Ifc4x3_tc1::IfcCartesianPointList3D::IfcCartesianPointList3D(std::vector< std::vector< double > > v1_CoordList, boost::optional< std::vector< std::string > /*[1:?]*/ > v2_TagList) : IfcCartesianPointList(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_CoordList)); if (v2_TagList) {set_attribute_value(1, (*v2_TagList)); }; populate_derived(); }

// Function implementations for IfcCartesianTransformationOperator
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcCartesianTransformationOperator::Axis1() const { if(data_.get_attribute_value(0).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcCartesianTransformationOperator::setAxis1(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcCartesianTransformationOperator::Axis2() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcCartesianTransformationOperator::setAxis2(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcCartesianPoint* Ifc4x3_tc1::IfcCartesianTransformationOperator::LocalOrigin() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcCartesianPoint>(true); }
void Ifc4x3_tc1::IfcCartesianTransformationOperator::setLocalOrigin(::Ifc4x3_tc1::IfcCartesianPoint* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
boost::optional< double > Ifc4x3_tc1::IfcCartesianTransformationOperator::Scale() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcCartesianTransformationOperator::setScale(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCartesianTransformationOperator::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[150]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCartesianTransformationOperator::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[150]); }
Ifc4x3_tc1::IfcCartesianTransformationOperator::IfcCartesianTransformationOperator(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcCartesianTransformationOperator::IfcCartesianTransformationOperator(::Ifc4x3_tc1::IfcDirection* v1_Axis1, ::Ifc4x3_tc1::IfcDirection* v2_Axis2, ::Ifc4x3_tc1::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_Axis1 ? v1_Axis1->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Axis2 ? v2_Axis2->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_LocalOrigin ? v3_LocalOrigin->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v4_Scale) {set_attribute_value(3, (*v4_Scale)); }; populate_derived(); }

// Function implementations for IfcCartesianTransformationOperator2D


const IfcParse::entity& Ifc4x3_tc1::IfcCartesianTransformationOperator2D::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[151]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCartesianTransformationOperator2D::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[151]); }
Ifc4x3_tc1::IfcCartesianTransformationOperator2D::IfcCartesianTransformationOperator2D(IfcEntityInstanceData&& e) : IfcCartesianTransformationOperator(std::move(e)) { }
Ifc4x3_tc1::IfcCartesianTransformationOperator2D::IfcCartesianTransformationOperator2D(::Ifc4x3_tc1::IfcDirection* v1_Axis1, ::Ifc4x3_tc1::IfcDirection* v2_Axis2, ::Ifc4x3_tc1::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale) : IfcCartesianTransformationOperator(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_Axis1 ? v1_Axis1->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Axis2 ? v2_Axis2->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_LocalOrigin ? v3_LocalOrigin->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v4_Scale) {set_attribute_value(3, (*v4_Scale)); }; populate_derived(); }

// Function implementations for IfcCartesianTransformationOperator2DnonUniform
boost::optional< double > Ifc4x3_tc1::IfcCartesianTransformationOperator2DnonUniform::Scale2() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcCartesianTransformationOperator2DnonUniform::setScale2(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCartesianTransformationOperator2DnonUniform::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[152]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCartesianTransformationOperator2DnonUniform::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[152]); }
Ifc4x3_tc1::IfcCartesianTransformationOperator2DnonUniform::IfcCartesianTransformationOperator2DnonUniform(IfcEntityInstanceData&& e) : IfcCartesianTransformationOperator2D(std::move(e)) { }
Ifc4x3_tc1::IfcCartesianTransformationOperator2DnonUniform::IfcCartesianTransformationOperator2DnonUniform(::Ifc4x3_tc1::IfcDirection* v1_Axis1, ::Ifc4x3_tc1::IfcDirection* v2_Axis2, ::Ifc4x3_tc1::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale, boost::optional< double > v5_Scale2) : IfcCartesianTransformationOperator2D(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_Axis1 ? v1_Axis1->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Axis2 ? v2_Axis2->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_LocalOrigin ? v3_LocalOrigin->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v4_Scale) {set_attribute_value(3, (*v4_Scale)); } if (v5_Scale2) {set_attribute_value(4, (*v5_Scale2)); }; populate_derived(); }

// Function implementations for IfcCartesianTransformationOperator3D
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcCartesianTransformationOperator3D::Axis3() const { if(data_.get_attribute_value(4).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcCartesianTransformationOperator3D::setAxis3(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcCartesianTransformationOperator3D::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[153]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCartesianTransformationOperator3D::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[153]); }
Ifc4x3_tc1::IfcCartesianTransformationOperator3D::IfcCartesianTransformationOperator3D(IfcEntityInstanceData&& e) : IfcCartesianTransformationOperator(std::move(e)) { }
Ifc4x3_tc1::IfcCartesianTransformationOperator3D::IfcCartesianTransformationOperator3D(::Ifc4x3_tc1::IfcDirection* v1_Axis1, ::Ifc4x3_tc1::IfcDirection* v2_Axis2, ::Ifc4x3_tc1::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale, ::Ifc4x3_tc1::IfcDirection* v5_Axis3) : IfcCartesianTransformationOperator(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_Axis1 ? v1_Axis1->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Axis2 ? v2_Axis2->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_LocalOrigin ? v3_LocalOrigin->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v4_Scale) {set_attribute_value(3, (*v4_Scale)); }set_attribute_value(4, v5_Axis3 ? v5_Axis3->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcCartesianTransformationOperator3DnonUniform
boost::optional< double > Ifc4x3_tc1::IfcCartesianTransformationOperator3DnonUniform::Scale2() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcCartesianTransformationOperator3DnonUniform::setScale2(boost::optional< double > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< double > Ifc4x3_tc1::IfcCartesianTransformationOperator3DnonUniform::Scale3() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcCartesianTransformationOperator3DnonUniform::setScale3(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCartesianTransformationOperator3DnonUniform::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[154]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCartesianTransformationOperator3DnonUniform::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[154]); }
Ifc4x3_tc1::IfcCartesianTransformationOperator3DnonUniform::IfcCartesianTransformationOperator3DnonUniform(IfcEntityInstanceData&& e) : IfcCartesianTransformationOperator3D(std::move(e)) { }
Ifc4x3_tc1::IfcCartesianTransformationOperator3DnonUniform::IfcCartesianTransformationOperator3DnonUniform(::Ifc4x3_tc1::IfcDirection* v1_Axis1, ::Ifc4x3_tc1::IfcDirection* v2_Axis2, ::Ifc4x3_tc1::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale, ::Ifc4x3_tc1::IfcDirection* v5_Axis3, boost::optional< double > v6_Scale2, boost::optional< double > v7_Scale3) : IfcCartesianTransformationOperator3D(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, v1_Axis1 ? v1_Axis1->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Axis2 ? v2_Axis2->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_LocalOrigin ? v3_LocalOrigin->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v4_Scale) {set_attribute_value(3, (*v4_Scale)); }set_attribute_value(4, v5_Axis3 ? v5_Axis3->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v6_Scale2) {set_attribute_value(5, (*v6_Scale2)); } if (v7_Scale3) {set_attribute_value(6, (*v7_Scale3)); }; populate_derived(); }

// Function implementations for IfcCenterLineProfileDef
double Ifc4x3_tc1::IfcCenterLineProfileDef::Thickness() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcCenterLineProfileDef::setThickness(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcCenterLineProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[155]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCenterLineProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[155]); }
Ifc4x3_tc1::IfcCenterLineProfileDef::IfcCenterLineProfileDef(IfcEntityInstanceData&& e) : IfcArbitraryOpenProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcCenterLineProfileDef::IfcCenterLineProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcBoundedCurve* v3_Curve, double v4_Thickness) : IfcArbitraryOpenProfileDef(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Curve ? v3_Curve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Thickness));; populate_derived(); }

// Function implementations for IfcChiller
boost::optional< ::Ifc4x3_tc1::IfcChillerTypeEnum::Value > Ifc4x3_tc1::IfcChiller::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcChillerTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcChiller::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcChillerTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcChillerTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcChiller::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[157]); }
const IfcParse::entity& Ifc4x3_tc1::IfcChiller::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[157]); }
Ifc4x3_tc1::IfcChiller::IfcChiller(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcChiller::IfcChiller(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcChillerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcChillerTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcChillerType
::Ifc4x3_tc1::IfcChillerTypeEnum::Value Ifc4x3_tc1::IfcChillerType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcChillerTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcChillerType::setPredefinedType(::Ifc4x3_tc1::IfcChillerTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcChillerTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcChillerType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[158]); }
const IfcParse::entity& Ifc4x3_tc1::IfcChillerType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[158]); }
Ifc4x3_tc1::IfcChillerType::IfcChillerType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcChillerType::IfcChillerType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcChillerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcChillerTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcChimney
boost::optional< ::Ifc4x3_tc1::IfcChimneyTypeEnum::Value > Ifc4x3_tc1::IfcChimney::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcChimneyTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcChimney::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcChimneyTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcChimneyTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcChimney::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[160]); }
const IfcParse::entity& Ifc4x3_tc1::IfcChimney::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[160]); }
Ifc4x3_tc1::IfcChimney::IfcChimney(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcChimney::IfcChimney(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcChimneyTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcChimneyTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcChimneyType
::Ifc4x3_tc1::IfcChimneyTypeEnum::Value Ifc4x3_tc1::IfcChimneyType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcChimneyTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcChimneyType::setPredefinedType(::Ifc4x3_tc1::IfcChimneyTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcChimneyTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcChimneyType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[161]); }
const IfcParse::entity& Ifc4x3_tc1::IfcChimneyType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[161]); }
Ifc4x3_tc1::IfcChimneyType::IfcChimneyType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcChimneyType::IfcChimneyType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcChimneyTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcChimneyTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCircle
double Ifc4x3_tc1::IfcCircle::Radius() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcCircle::setRadius(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcCircle::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[163]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCircle::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[163]); }
Ifc4x3_tc1::IfcCircle::IfcCircle(IfcEntityInstanceData&& e) : IfcConic(std::move(e)) { }
Ifc4x3_tc1::IfcCircle::IfcCircle(::Ifc4x3_tc1::IfcAxis2Placement* v1_Position, double v2_Radius) : IfcConic(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Radius));; populate_derived(); }

// Function implementations for IfcCircleHollowProfileDef
double Ifc4x3_tc1::IfcCircleHollowProfileDef::WallThickness() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcCircleHollowProfileDef::setWallThickness(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcCircleHollowProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[164]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCircleHollowProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[164]); }
Ifc4x3_tc1::IfcCircleHollowProfileDef::IfcCircleHollowProfileDef(IfcEntityInstanceData&& e) : IfcCircleProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcCircleHollowProfileDef::IfcCircleHollowProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_Radius, double v5_WallThickness) : IfcCircleProfileDef(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Radius));set_attribute_value(4, (v5_WallThickness));; populate_derived(); }

// Function implementations for IfcCircleProfileDef
double Ifc4x3_tc1::IfcCircleProfileDef::Radius() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcCircleProfileDef::setRadius(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcCircleProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[165]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCircleProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[165]); }
Ifc4x3_tc1::IfcCircleProfileDef::IfcCircleProfileDef(IfcEntityInstanceData&& e) : IfcParameterizedProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcCircleProfileDef::IfcCircleProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_Radius) : IfcParameterizedProfileDef(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Radius));; populate_derived(); }

// Function implementations for IfcCivilElement


const IfcParse::entity& Ifc4x3_tc1::IfcCivilElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[166]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCivilElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[166]); }
Ifc4x3_tc1::IfcCivilElement::IfcCivilElement(IfcEntityInstanceData&& e) : IfcElement(std::move(e)) { }
Ifc4x3_tc1::IfcCivilElement::IfcCivilElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcCivilElementType


const IfcParse::entity& Ifc4x3_tc1::IfcCivilElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[167]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCivilElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[167]); }
Ifc4x3_tc1::IfcCivilElementType::IfcCivilElementType(IfcEntityInstanceData&& e) : IfcElementType(std::move(e)) { }
Ifc4x3_tc1::IfcCivilElementType::IfcCivilElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcClassification
boost::optional< std::string > Ifc4x3_tc1::IfcClassification::Source() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcClassification::setSource(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcClassification::Edition() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcClassification::setEdition(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcClassification::EditionDate() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcClassification::setEditionDate(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
std::string Ifc4x3_tc1::IfcClassification::Name() const {  std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcClassification::setName(std::string v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcClassification::Description() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcClassification::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcClassification::Specification() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcClassification::setSpecification(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_tc1::IfcClassification::ReferenceTokens() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcClassification::setReferenceTokens(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }

::Ifc4x3_tc1::IfcRelAssociatesClassification::list::ptr Ifc4x3_tc1::IfcClassification::ClassificationForObjects() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[908], 5)->as<IfcRelAssociatesClassification>(); }
::Ifc4x3_tc1::IfcClassificationReference::list::ptr Ifc4x3_tc1::IfcClassification::HasReferences() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[169], 3)->as<IfcClassificationReference>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcClassification::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[168]); }
const IfcParse::entity& Ifc4x3_tc1::IfcClassification::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[168]); }
Ifc4x3_tc1::IfcClassification::IfcClassification(IfcEntityInstanceData&& e) : IfcExternalInformation(std::move(e)) { }
Ifc4x3_tc1::IfcClassification::IfcClassification(boost::optional< std::string > v1_Source, boost::optional< std::string > v2_Edition, boost::optional< std::string > v3_EditionDate, std::string v4_Name, boost::optional< std::string > v5_Description, boost::optional< std::string > v6_Specification, boost::optional< std::vector< std::string > /*[1:?]*/ > v7_ReferenceTokens) : IfcExternalInformation(IfcEntityInstanceData(storage_t(7))) {  if (v1_Source) {set_attribute_value(0, (*v1_Source)); } if (v2_Edition) {set_attribute_value(1, (*v2_Edition)); } if (v3_EditionDate) {set_attribute_value(2, (*v3_EditionDate)); }set_attribute_value(3, (v4_Name)); if (v5_Description) {set_attribute_value(4, (*v5_Description)); } if (v6_Specification) {set_attribute_value(5, (*v6_Specification)); } if (v7_ReferenceTokens) {set_attribute_value(6, (*v7_ReferenceTokens)); }; populate_derived(); }

// Function implementations for IfcClassificationReference
::Ifc4x3_tc1::IfcClassificationReferenceSelect* Ifc4x3_tc1::IfcClassificationReference::ReferencedSource() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcClassificationReferenceSelect>(true); }
void Ifc4x3_tc1::IfcClassificationReference::setReferencedSource(::Ifc4x3_tc1::IfcClassificationReferenceSelect* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcClassificationReference::Description() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcClassificationReference::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcClassificationReference::Sort() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcClassificationReference::setSort(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }

::Ifc4x3_tc1::IfcRelAssociatesClassification::list::ptr Ifc4x3_tc1::IfcClassificationReference::ClassificationRefForObjects() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[908], 5)->as<IfcRelAssociatesClassification>(); }
::Ifc4x3_tc1::IfcClassificationReference::list::ptr Ifc4x3_tc1::IfcClassificationReference::HasReferences() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[169], 3)->as<IfcClassificationReference>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcClassificationReference::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[169]); }
const IfcParse::entity& Ifc4x3_tc1::IfcClassificationReference::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[169]); }
Ifc4x3_tc1::IfcClassificationReference::IfcClassificationReference(IfcEntityInstanceData&& e) : IfcExternalReference(std::move(e)) { }
Ifc4x3_tc1::IfcClassificationReference::IfcClassificationReference(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name, ::Ifc4x3_tc1::IfcClassificationReferenceSelect* v4_ReferencedSource, boost::optional< std::string > v5_Description, boost::optional< std::string > v6_Sort) : IfcExternalReference(IfcEntityInstanceData(storage_t(6))) {  if (v1_Location) {set_attribute_value(0, (*v1_Location)); } if (v2_Identification) {set_attribute_value(1, (*v2_Identification)); } if (v3_Name) {set_attribute_value(2, (*v3_Name)); }set_attribute_value(3, v4_ReferencedSource ? v4_ReferencedSource->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_Description) {set_attribute_value(4, (*v5_Description)); } if (v6_Sort) {set_attribute_value(5, (*v6_Sort)); }; populate_derived(); }

// Function implementations for IfcClosedShell


const IfcParse::entity& Ifc4x3_tc1::IfcClosedShell::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[172]); }
const IfcParse::entity& Ifc4x3_tc1::IfcClosedShell::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[172]); }
Ifc4x3_tc1::IfcClosedShell::IfcClosedShell(IfcEntityInstanceData&& e) : IfcConnectedFaceSet(std::move(e)) { }
Ifc4x3_tc1::IfcClosedShell::IfcClosedShell(aggregate_of< ::Ifc4x3_tc1::IfcFace >::ptr v1_CfsFaces) : IfcConnectedFaceSet(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_CfsFaces)->generalize());; populate_derived(); }

// Function implementations for IfcClothoid
double Ifc4x3_tc1::IfcClothoid::ClothoidConstant() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcClothoid::setClothoidConstant(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcClothoid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[173]); }
const IfcParse::entity& Ifc4x3_tc1::IfcClothoid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[173]); }
Ifc4x3_tc1::IfcClothoid::IfcClothoid(IfcEntityInstanceData&& e) : IfcSpiral(std::move(e)) { }
Ifc4x3_tc1::IfcClothoid::IfcClothoid(::Ifc4x3_tc1::IfcAxis2Placement* v1_Position, double v2_ClothoidConstant) : IfcSpiral(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_ClothoidConstant));; populate_derived(); }

// Function implementations for IfcCoil
boost::optional< ::Ifc4x3_tc1::IfcCoilTypeEnum::Value > Ifc4x3_tc1::IfcCoil::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCoilTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCoil::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCoilTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCoilTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCoil::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[174]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCoil::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[174]); }
Ifc4x3_tc1::IfcCoil::IfcCoil(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcCoil::IfcCoil(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCoilTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCoilTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCoilType
::Ifc4x3_tc1::IfcCoilTypeEnum::Value Ifc4x3_tc1::IfcCoilType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCoilTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCoilType::setPredefinedType(::Ifc4x3_tc1::IfcCoilTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCoilTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCoilType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[175]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCoilType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[175]); }
Ifc4x3_tc1::IfcCoilType::IfcCoilType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcCoilType::IfcCoilType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCoilTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCoilTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcColourRgb
double Ifc4x3_tc1::IfcColourRgb::Red() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcColourRgb::setRed(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
double Ifc4x3_tc1::IfcColourRgb::Green() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcColourRgb::setGreen(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
double Ifc4x3_tc1::IfcColourRgb::Blue() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcColourRgb::setBlue(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcColourRgb::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[179]); }
const IfcParse::entity& Ifc4x3_tc1::IfcColourRgb::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[179]); }
Ifc4x3_tc1::IfcColourRgb::IfcColourRgb(IfcEntityInstanceData&& e) : IfcColourSpecification(std::move(e)) { }
Ifc4x3_tc1::IfcColourRgb::IfcColourRgb(boost::optional< std::string > v1_Name, double v2_Red, double v3_Green, double v4_Blue) : IfcColourSpecification(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, (v2_Red));set_attribute_value(2, (v3_Green));set_attribute_value(3, (v4_Blue));; populate_derived(); }

// Function implementations for IfcColourRgbList
std::vector< std::vector< double > > Ifc4x3_tc1::IfcColourRgbList::ColourList() const {  std::vector< std::vector< double > > v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcColourRgbList::setColourList(std::vector< std::vector< double > > v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcColourRgbList::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[180]); }
const IfcParse::entity& Ifc4x3_tc1::IfcColourRgbList::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[180]); }
Ifc4x3_tc1::IfcColourRgbList::IfcColourRgbList(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcColourRgbList::IfcColourRgbList(std::vector< std::vector< double > > v1_ColourList) : IfcPresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_ColourList));; populate_derived(); }

// Function implementations for IfcColourSpecification
boost::optional< std::string > Ifc4x3_tc1::IfcColourSpecification::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcColourSpecification::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }


const IfcParse::entity& Ifc4x3_tc1::IfcColourSpecification::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[181]); }
const IfcParse::entity& Ifc4x3_tc1::IfcColourSpecification::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[181]); }
Ifc4x3_tc1::IfcColourSpecification::IfcColourSpecification(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcColourSpecification::IfcColourSpecification(boost::optional< std::string > v1_Name) : IfcPresentationItem(IfcEntityInstanceData(storage_t(1))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }; populate_derived(); }

// Function implementations for IfcColumn
boost::optional< ::Ifc4x3_tc1::IfcColumnTypeEnum::Value > Ifc4x3_tc1::IfcColumn::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcColumnTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcColumn::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcColumnTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcColumnTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcColumn::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[182]); }
const IfcParse::entity& Ifc4x3_tc1::IfcColumn::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[182]); }
Ifc4x3_tc1::IfcColumn::IfcColumn(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcColumn::IfcColumn(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcColumnTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcColumnTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcColumnType
::Ifc4x3_tc1::IfcColumnTypeEnum::Value Ifc4x3_tc1::IfcColumnType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcColumnTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcColumnType::setPredefinedType(::Ifc4x3_tc1::IfcColumnTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcColumnTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcColumnType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[183]); }
const IfcParse::entity& Ifc4x3_tc1::IfcColumnType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[183]); }
Ifc4x3_tc1::IfcColumnType::IfcColumnType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcColumnType::IfcColumnType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcColumnTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcColumnTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCommunicationsAppliance
boost::optional< ::Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Value > Ifc4x3_tc1::IfcCommunicationsAppliance::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCommunicationsAppliance::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCommunicationsAppliance::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[185]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCommunicationsAppliance::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[185]); }
Ifc4x3_tc1::IfcCommunicationsAppliance::IfcCommunicationsAppliance(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcCommunicationsAppliance::IfcCommunicationsAppliance(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCommunicationsApplianceType
::Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Value Ifc4x3_tc1::IfcCommunicationsApplianceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCommunicationsApplianceType::setPredefinedType(::Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCommunicationsApplianceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[186]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCommunicationsApplianceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[186]); }
Ifc4x3_tc1::IfcCommunicationsApplianceType::IfcCommunicationsApplianceType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcCommunicationsApplianceType::IfcCommunicationsApplianceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCommunicationsApplianceTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcComplexProperty
std::string Ifc4x3_tc1::IfcComplexProperty::UsageName() const {  std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcComplexProperty::setUsageName(std::string v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
aggregate_of< ::Ifc4x3_tc1::IfcProperty >::ptr Ifc4x3_tc1::IfcComplexProperty::HasProperties() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(3); return es->as< ::Ifc4x3_tc1::IfcProperty >(); }
void Ifc4x3_tc1::IfcComplexProperty::setHasProperties(aggregate_of< ::Ifc4x3_tc1::IfcProperty >::ptr v) { set_attribute_value(3, (v)->generalize());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcComplexProperty::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[189]); }
const IfcParse::entity& Ifc4x3_tc1::IfcComplexProperty::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[189]); }
Ifc4x3_tc1::IfcComplexProperty::IfcComplexProperty(IfcEntityInstanceData&& e) : IfcProperty(std::move(e)) { }
Ifc4x3_tc1::IfcComplexProperty::IfcComplexProperty(std::string v1_Name, boost::optional< std::string > v2_Specification, std::string v3_UsageName, aggregate_of< ::Ifc4x3_tc1::IfcProperty >::ptr v4_HasProperties) : IfcProperty(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_Name)); if (v2_Specification) {set_attribute_value(1, (*v2_Specification)); }set_attribute_value(2, (v3_UsageName));set_attribute_value(3, (v4_HasProperties)->generalize());; populate_derived(); }

// Function implementations for IfcComplexPropertyTemplate
boost::optional< std::string > Ifc4x3_tc1::IfcComplexPropertyTemplate::UsageName() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcComplexPropertyTemplate::setUsageName(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< ::Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::Value > Ifc4x3_tc1::IfcComplexPropertyTemplate::TemplateType() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::FromString(data_.get_attribute_value(5)); }
void Ifc4x3_tc1::IfcComplexPropertyTemplate::setTemplateType(boost::optional< ::Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::Value > v) { if (v) {set_attribute_value(5, EnumerationReference(&::Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(5);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertyTemplate >::ptr > Ifc4x3_tc1::IfcComplexPropertyTemplate::HasPropertyTemplates() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(6); return es->as< ::Ifc4x3_tc1::IfcPropertyTemplate >(); }
void Ifc4x3_tc1::IfcComplexPropertyTemplate::setHasPropertyTemplates(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertyTemplate >::ptr > v) { if (v) {set_attribute_value(6, (*v)->generalize());} else {unset_attribute_value(6);} }


const IfcParse::entity& Ifc4x3_tc1::IfcComplexPropertyTemplate::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[190]); }
const IfcParse::entity& Ifc4x3_tc1::IfcComplexPropertyTemplate::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[190]); }
Ifc4x3_tc1::IfcComplexPropertyTemplate::IfcComplexPropertyTemplate(IfcEntityInstanceData&& e) : IfcPropertyTemplate(std::move(e)) { }
Ifc4x3_tc1::IfcComplexPropertyTemplate::IfcComplexPropertyTemplate(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_UsageName, boost::optional< ::Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::Value > v6_TemplateType, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertyTemplate >::ptr > v7_HasPropertyTemplates) : IfcPropertyTemplate(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_UsageName) {set_attribute_value(4, (*v5_UsageName)); } if (v6_TemplateType) {set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcComplexPropertyTemplateTypeEnum::Class(),(size_t)*v6_TemplateType))); } if (v7_HasPropertyTemplates) {set_attribute_value(6, (*v7_HasPropertyTemplates)->generalize()); }; populate_derived(); }

// Function implementations for IfcCompositeCurve
aggregate_of< ::Ifc4x3_tc1::IfcSegment >::ptr Ifc4x3_tc1::IfcCompositeCurve::Segments() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcSegment >(); }
void Ifc4x3_tc1::IfcCompositeCurve::setSegments(aggregate_of< ::Ifc4x3_tc1::IfcSegment >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }
boost::logic::tribool Ifc4x3_tc1::IfcCompositeCurve::SelfIntersect() const {  boost::logic::tribool v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcCompositeCurve::setSelfIntersect(boost::logic::tribool v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcCompositeCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[192]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCompositeCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[192]); }
Ifc4x3_tc1::IfcCompositeCurve::IfcCompositeCurve(IfcEntityInstanceData&& e) : IfcBoundedCurve(std::move(e)) { }
Ifc4x3_tc1::IfcCompositeCurve::IfcCompositeCurve(aggregate_of< ::Ifc4x3_tc1::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect) : IfcBoundedCurve(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_Segments)->generalize());set_attribute_value(1, (v2_SelfIntersect));; populate_derived(); }

// Function implementations for IfcCompositeCurveOnSurface


const IfcParse::entity& Ifc4x3_tc1::IfcCompositeCurveOnSurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[193]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCompositeCurveOnSurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[193]); }
Ifc4x3_tc1::IfcCompositeCurveOnSurface::IfcCompositeCurveOnSurface(IfcEntityInstanceData&& e) : IfcCompositeCurve(std::move(e)) { }
Ifc4x3_tc1::IfcCompositeCurveOnSurface::IfcCompositeCurveOnSurface(aggregate_of< ::Ifc4x3_tc1::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect) : IfcCompositeCurve(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_Segments)->generalize());set_attribute_value(1, (v2_SelfIntersect));; populate_derived(); }

// Function implementations for IfcCompositeCurveSegment
bool Ifc4x3_tc1::IfcCompositeCurveSegment::SameSense() const {  bool v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcCompositeCurveSegment::setSameSense(bool v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcCompositeCurveSegment::ParentCurve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcCompositeCurveSegment::setParentCurve(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcCompositeCurveSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[194]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCompositeCurveSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[194]); }
Ifc4x3_tc1::IfcCompositeCurveSegment::IfcCompositeCurveSegment(IfcEntityInstanceData&& e) : IfcSegment(std::move(e)) { }
Ifc4x3_tc1::IfcCompositeCurveSegment::IfcCompositeCurveSegment(::Ifc4x3_tc1::IfcTransitionCode::Value v1_Transition, bool v2_SameSense, ::Ifc4x3_tc1::IfcCurve* v3_ParentCurve) : IfcSegment(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcTransitionCode::Class(),(size_t)v1_Transition)));set_attribute_value(1, (v2_SameSense));set_attribute_value(2, v3_ParentCurve ? v3_ParentCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcCompositeProfileDef
aggregate_of< ::Ifc4x3_tc1::IfcProfileDef >::ptr Ifc4x3_tc1::IfcCompositeProfileDef::Profiles() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcProfileDef >(); }
void Ifc4x3_tc1::IfcCompositeProfileDef::setProfiles(aggregate_of< ::Ifc4x3_tc1::IfcProfileDef >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }
boost::optional< std::string > Ifc4x3_tc1::IfcCompositeProfileDef::Label() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcCompositeProfileDef::setLabel(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCompositeProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[195]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCompositeProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[195]); }
Ifc4x3_tc1::IfcCompositeProfileDef::IfcCompositeProfileDef(IfcEntityInstanceData&& e) : IfcProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcCompositeProfileDef::IfcCompositeProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, aggregate_of< ::Ifc4x3_tc1::IfcProfileDef >::ptr v3_Profiles, boost::optional< std::string > v4_Label) : IfcProfileDef(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, (v3_Profiles)->generalize()); if (v4_Label) {set_attribute_value(3, (*v4_Label)); }; populate_derived(); }

// Function implementations for IfcCompressor
boost::optional< ::Ifc4x3_tc1::IfcCompressorTypeEnum::Value > Ifc4x3_tc1::IfcCompressor::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCompressorTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCompressor::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCompressorTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCompressorTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCompressor::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[197]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCompressor::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[197]); }
Ifc4x3_tc1::IfcCompressor::IfcCompressor(IfcEntityInstanceData&& e) : IfcFlowMovingDevice(std::move(e)) { }
Ifc4x3_tc1::IfcCompressor::IfcCompressor(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCompressorTypeEnum::Value > v9_PredefinedType) : IfcFlowMovingDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCompressorTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCompressorType
::Ifc4x3_tc1::IfcCompressorTypeEnum::Value Ifc4x3_tc1::IfcCompressorType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCompressorTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCompressorType::setPredefinedType(::Ifc4x3_tc1::IfcCompressorTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCompressorTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCompressorType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[198]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCompressorType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[198]); }
Ifc4x3_tc1::IfcCompressorType::IfcCompressorType(IfcEntityInstanceData&& e) : IfcFlowMovingDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcCompressorType::IfcCompressorType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCompressorTypeEnum::Value v10_PredefinedType) : IfcFlowMovingDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCompressorTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCondenser
boost::optional< ::Ifc4x3_tc1::IfcCondenserTypeEnum::Value > Ifc4x3_tc1::IfcCondenser::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCondenserTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCondenser::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCondenserTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCondenserTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCondenser::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[200]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCondenser::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[200]); }
Ifc4x3_tc1::IfcCondenser::IfcCondenser(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcCondenser::IfcCondenser(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCondenserTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCondenserTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCondenserType
::Ifc4x3_tc1::IfcCondenserTypeEnum::Value Ifc4x3_tc1::IfcCondenserType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCondenserTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCondenserType::setPredefinedType(::Ifc4x3_tc1::IfcCondenserTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCondenserTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCondenserType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[201]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCondenserType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[201]); }
Ifc4x3_tc1::IfcCondenserType::IfcCondenserType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcCondenserType::IfcCondenserType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCondenserTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCondenserTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcConic
::Ifc4x3_tc1::IfcAxis2Placement* Ifc4x3_tc1::IfcConic::Position() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcAxis2Placement>(true); }
void Ifc4x3_tc1::IfcConic::setPosition(::Ifc4x3_tc1::IfcAxis2Placement* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcConic::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[203]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConic::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[203]); }
Ifc4x3_tc1::IfcConic::IfcConic(IfcEntityInstanceData&& e) : IfcCurve(std::move(e)) { }
Ifc4x3_tc1::IfcConic::IfcConic(::Ifc4x3_tc1::IfcAxis2Placement* v1_Position) : IfcCurve(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcConnectedFaceSet
aggregate_of< ::Ifc4x3_tc1::IfcFace >::ptr Ifc4x3_tc1::IfcConnectedFaceSet::CfsFaces() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcFace >(); }
void Ifc4x3_tc1::IfcConnectedFaceSet::setCfsFaces(aggregate_of< ::Ifc4x3_tc1::IfcFace >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcConnectedFaceSet::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[204]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConnectedFaceSet::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[204]); }
Ifc4x3_tc1::IfcConnectedFaceSet::IfcConnectedFaceSet(IfcEntityInstanceData&& e) : IfcTopologicalRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcConnectedFaceSet::IfcConnectedFaceSet(aggregate_of< ::Ifc4x3_tc1::IfcFace >::ptr v1_CfsFaces) : IfcTopologicalRepresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_CfsFaces)->generalize());; populate_derived(); }

// Function implementations for IfcConnectionCurveGeometry
::Ifc4x3_tc1::IfcCurveOrEdgeCurve* Ifc4x3_tc1::IfcConnectionCurveGeometry::CurveOnRelatingElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCurveOrEdgeCurve>(true); }
void Ifc4x3_tc1::IfcConnectionCurveGeometry::setCurveOnRelatingElement(::Ifc4x3_tc1::IfcCurveOrEdgeCurve* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcCurveOrEdgeCurve* Ifc4x3_tc1::IfcConnectionCurveGeometry::CurveOnRelatedElement() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcCurveOrEdgeCurve>(true); }
void Ifc4x3_tc1::IfcConnectionCurveGeometry::setCurveOnRelatedElement(::Ifc4x3_tc1::IfcCurveOrEdgeCurve* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcConnectionCurveGeometry::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[205]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConnectionCurveGeometry::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[205]); }
Ifc4x3_tc1::IfcConnectionCurveGeometry::IfcConnectionCurveGeometry(IfcEntityInstanceData&& e) : IfcConnectionGeometry(std::move(e)) { }
Ifc4x3_tc1::IfcConnectionCurveGeometry::IfcConnectionCurveGeometry(::Ifc4x3_tc1::IfcCurveOrEdgeCurve* v1_CurveOnRelatingElement, ::Ifc4x3_tc1::IfcCurveOrEdgeCurve* v2_CurveOnRelatedElement) : IfcConnectionGeometry(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_CurveOnRelatingElement ? v1_CurveOnRelatingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_CurveOnRelatedElement ? v2_CurveOnRelatedElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcConnectionGeometry


const IfcParse::entity& Ifc4x3_tc1::IfcConnectionGeometry::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[206]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConnectionGeometry::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[206]); }
Ifc4x3_tc1::IfcConnectionGeometry::IfcConnectionGeometry(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcConnectionGeometry::IfcConnectionGeometry() : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcConnectionPointEccentricity
boost::optional< double > Ifc4x3_tc1::IfcConnectionPointEccentricity::EccentricityInX() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcConnectionPointEccentricity::setEccentricityInX(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcConnectionPointEccentricity::EccentricityInY() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcConnectionPointEccentricity::setEccentricityInY(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< double > Ifc4x3_tc1::IfcConnectionPointEccentricity::EccentricityInZ() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcConnectionPointEccentricity::setEccentricityInZ(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcConnectionPointEccentricity::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[207]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConnectionPointEccentricity::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[207]); }
Ifc4x3_tc1::IfcConnectionPointEccentricity::IfcConnectionPointEccentricity(IfcEntityInstanceData&& e) : IfcConnectionPointGeometry(std::move(e)) { }
Ifc4x3_tc1::IfcConnectionPointEccentricity::IfcConnectionPointEccentricity(::Ifc4x3_tc1::IfcPointOrVertexPoint* v1_PointOnRelatingElement, ::Ifc4x3_tc1::IfcPointOrVertexPoint* v2_PointOnRelatedElement, boost::optional< double > v3_EccentricityInX, boost::optional< double > v4_EccentricityInY, boost::optional< double > v5_EccentricityInZ) : IfcConnectionPointGeometry(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_PointOnRelatingElement ? v1_PointOnRelatingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_PointOnRelatedElement ? v2_PointOnRelatedElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_EccentricityInX) {set_attribute_value(2, (*v3_EccentricityInX)); } if (v4_EccentricityInY) {set_attribute_value(3, (*v4_EccentricityInY)); } if (v5_EccentricityInZ) {set_attribute_value(4, (*v5_EccentricityInZ)); }; populate_derived(); }

// Function implementations for IfcConnectionPointGeometry
::Ifc4x3_tc1::IfcPointOrVertexPoint* Ifc4x3_tc1::IfcConnectionPointGeometry::PointOnRelatingElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcPointOrVertexPoint>(true); }
void Ifc4x3_tc1::IfcConnectionPointGeometry::setPointOnRelatingElement(::Ifc4x3_tc1::IfcPointOrVertexPoint* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcPointOrVertexPoint* Ifc4x3_tc1::IfcConnectionPointGeometry::PointOnRelatedElement() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcPointOrVertexPoint>(true); }
void Ifc4x3_tc1::IfcConnectionPointGeometry::setPointOnRelatedElement(::Ifc4x3_tc1::IfcPointOrVertexPoint* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcConnectionPointGeometry::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[208]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConnectionPointGeometry::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[208]); }
Ifc4x3_tc1::IfcConnectionPointGeometry::IfcConnectionPointGeometry(IfcEntityInstanceData&& e) : IfcConnectionGeometry(std::move(e)) { }
Ifc4x3_tc1::IfcConnectionPointGeometry::IfcConnectionPointGeometry(::Ifc4x3_tc1::IfcPointOrVertexPoint* v1_PointOnRelatingElement, ::Ifc4x3_tc1::IfcPointOrVertexPoint* v2_PointOnRelatedElement) : IfcConnectionGeometry(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_PointOnRelatingElement ? v1_PointOnRelatingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_PointOnRelatedElement ? v2_PointOnRelatedElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcConnectionSurfaceGeometry
::Ifc4x3_tc1::IfcSurfaceOrFaceSurface* Ifc4x3_tc1::IfcConnectionSurfaceGeometry::SurfaceOnRelatingElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcSurfaceOrFaceSurface>(true); }
void Ifc4x3_tc1::IfcConnectionSurfaceGeometry::setSurfaceOnRelatingElement(::Ifc4x3_tc1::IfcSurfaceOrFaceSurface* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcSurfaceOrFaceSurface* Ifc4x3_tc1::IfcConnectionSurfaceGeometry::SurfaceOnRelatedElement() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcSurfaceOrFaceSurface>(true); }
void Ifc4x3_tc1::IfcConnectionSurfaceGeometry::setSurfaceOnRelatedElement(::Ifc4x3_tc1::IfcSurfaceOrFaceSurface* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcConnectionSurfaceGeometry::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[209]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConnectionSurfaceGeometry::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[209]); }
Ifc4x3_tc1::IfcConnectionSurfaceGeometry::IfcConnectionSurfaceGeometry(IfcEntityInstanceData&& e) : IfcConnectionGeometry(std::move(e)) { }
Ifc4x3_tc1::IfcConnectionSurfaceGeometry::IfcConnectionSurfaceGeometry(::Ifc4x3_tc1::IfcSurfaceOrFaceSurface* v1_SurfaceOnRelatingElement, ::Ifc4x3_tc1::IfcSurfaceOrFaceSurface* v2_SurfaceOnRelatedElement) : IfcConnectionGeometry(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_SurfaceOnRelatingElement ? v1_SurfaceOnRelatingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_SurfaceOnRelatedElement ? v2_SurfaceOnRelatedElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcConnectionVolumeGeometry
::Ifc4x3_tc1::IfcSolidOrShell* Ifc4x3_tc1::IfcConnectionVolumeGeometry::VolumeOnRelatingElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcSolidOrShell>(true); }
void Ifc4x3_tc1::IfcConnectionVolumeGeometry::setVolumeOnRelatingElement(::Ifc4x3_tc1::IfcSolidOrShell* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcSolidOrShell* Ifc4x3_tc1::IfcConnectionVolumeGeometry::VolumeOnRelatedElement() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcSolidOrShell>(true); }
void Ifc4x3_tc1::IfcConnectionVolumeGeometry::setVolumeOnRelatedElement(::Ifc4x3_tc1::IfcSolidOrShell* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcConnectionVolumeGeometry::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[211]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConnectionVolumeGeometry::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[211]); }
Ifc4x3_tc1::IfcConnectionVolumeGeometry::IfcConnectionVolumeGeometry(IfcEntityInstanceData&& e) : IfcConnectionGeometry(std::move(e)) { }
Ifc4x3_tc1::IfcConnectionVolumeGeometry::IfcConnectionVolumeGeometry(::Ifc4x3_tc1::IfcSolidOrShell* v1_VolumeOnRelatingElement, ::Ifc4x3_tc1::IfcSolidOrShell* v2_VolumeOnRelatedElement) : IfcConnectionGeometry(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_VolumeOnRelatingElement ? v1_VolumeOnRelatingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_VolumeOnRelatedElement ? v2_VolumeOnRelatedElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcConstraint
std::string Ifc4x3_tc1::IfcConstraint::Name() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcConstraint::setName(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcConstraint::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcConstraint::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
::Ifc4x3_tc1::IfcConstraintEnum::Value Ifc4x3_tc1::IfcConstraint::ConstraintGrade() const {  return ::Ifc4x3_tc1::IfcConstraintEnum::FromString(data_.get_attribute_value(2)); }
void Ifc4x3_tc1::IfcConstraint::setConstraintGrade(::Ifc4x3_tc1::IfcConstraintEnum::Value v) { set_attribute_value(2, EnumerationReference(&::Ifc4x3_tc1::IfcConstraintEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(2); }
boost::optional< std::string > Ifc4x3_tc1::IfcConstraint::ConstraintSource() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcConstraint::setConstraintSource(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
::Ifc4x3_tc1::IfcActorSelect* Ifc4x3_tc1::IfcConstraint::CreatingActor() const { if(data_.get_attribute_value(4).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcActorSelect>(true); }
void Ifc4x3_tc1::IfcConstraint::setCreatingActor(::Ifc4x3_tc1::IfcActorSelect* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
boost::optional< std::string > Ifc4x3_tc1::IfcConstraint::CreationTime() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcConstraint::setCreationTime(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcConstraint::UserDefinedGrade() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcConstraint::setUserDefinedGrade(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }

::Ifc4x3_tc1::IfcExternalReferenceRelationship::list::ptr Ifc4x3_tc1::IfcConstraint::HasExternalReferences() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[427], 3)->as<IfcExternalReferenceRelationship>(); }
::Ifc4x3_tc1::IfcResourceConstraintRelationship::list::ptr Ifc4x3_tc1::IfcConstraint::PropertiesForConstraint() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[954], 2)->as<IfcResourceConstraintRelationship>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcConstraint::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[212]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConstraint::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[212]); }
Ifc4x3_tc1::IfcConstraint::IfcConstraint(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcConstraint::IfcConstraint(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcConstraintEnum::Value v3_ConstraintGrade, boost::optional< std::string > v4_ConstraintSource, ::Ifc4x3_tc1::IfcActorSelect* v5_CreatingActor, boost::optional< std::string > v6_CreationTime, boost::optional< std::string > v7_UserDefinedGrade) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcConstraintEnum::Class(),(size_t)v3_ConstraintGrade))); if (v4_ConstraintSource) {set_attribute_value(3, (*v4_ConstraintSource)); }set_attribute_value(4, v5_CreatingActor ? v5_CreatingActor->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v6_CreationTime) {set_attribute_value(5, (*v6_CreationTime)); } if (v7_UserDefinedGrade) {set_attribute_value(6, (*v7_UserDefinedGrade)); }; populate_derived(); }

// Function implementations for IfcConstructionEquipmentResource
boost::optional< ::Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Value > Ifc4x3_tc1::IfcConstructionEquipmentResource::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcConstructionEquipmentResource::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcConstructionEquipmentResource::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[214]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConstructionEquipmentResource::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[214]); }
Ifc4x3_tc1::IfcConstructionEquipmentResource::IfcConstructionEquipmentResource(IfcEntityInstanceData&& e) : IfcConstructionResource(std::move(e)) { }
Ifc4x3_tc1::IfcConstructionEquipmentResource::IfcConstructionEquipmentResource(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_tc1::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Value > v11_PredefinedType) : IfcConstructionResource(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_LongDescription) {set_attribute_value(6, (*v7_LongDescription)); }set_attribute_value(7, v8_Usage ? v8_Usage->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v9_BaseCosts) {set_attribute_value(8, (*v9_BaseCosts)->generalize()); }set_attribute_value(9, v10_BaseQuantity ? v10_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcConstructionEquipmentResourceType
::Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Value Ifc4x3_tc1::IfcConstructionEquipmentResourceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::FromString(data_.get_attribute_value(11)); }
void Ifc4x3_tc1::IfcConstructionEquipmentResourceType::setPredefinedType(::Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Value v) { set_attribute_value(11, EnumerationReference(&::Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(11); }


const IfcParse::entity& Ifc4x3_tc1::IfcConstructionEquipmentResourceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[215]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConstructionEquipmentResourceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[215]); }
Ifc4x3_tc1::IfcConstructionEquipmentResourceType::IfcConstructionEquipmentResourceType(IfcEntityInstanceData&& e) : IfcConstructionResourceType(std::move(e)) { }
Ifc4x3_tc1::IfcConstructionEquipmentResourceType::IfcConstructionEquipmentResourceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Value v12_PredefinedType) : IfcConstructionResourceType(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_Identification) {set_attribute_value(6, (*v7_Identification)); } if (v8_LongDescription) {set_attribute_value(7, (*v8_LongDescription)); } if (v9_ResourceType) {set_attribute_value(8, (*v9_ResourceType)); } if (v10_BaseCosts) {set_attribute_value(9, (*v10_BaseCosts)->generalize()); }set_attribute_value(10, v11_BaseQuantity ? v11_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcConstructionEquipmentResourceTypeEnum::Class(),(size_t)v12_PredefinedType)));; populate_derived(); }

// Function implementations for IfcConstructionMaterialResource
boost::optional< ::Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Value > Ifc4x3_tc1::IfcConstructionMaterialResource::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcConstructionMaterialResource::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcConstructionMaterialResource::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[217]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConstructionMaterialResource::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[217]); }
Ifc4x3_tc1::IfcConstructionMaterialResource::IfcConstructionMaterialResource(IfcEntityInstanceData&& e) : IfcConstructionResource(std::move(e)) { }
Ifc4x3_tc1::IfcConstructionMaterialResource::IfcConstructionMaterialResource(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_tc1::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Value > v11_PredefinedType) : IfcConstructionResource(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_LongDescription) {set_attribute_value(6, (*v7_LongDescription)); }set_attribute_value(7, v8_Usage ? v8_Usage->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v9_BaseCosts) {set_attribute_value(8, (*v9_BaseCosts)->generalize()); }set_attribute_value(9, v10_BaseQuantity ? v10_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcConstructionMaterialResourceType
::Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Value Ifc4x3_tc1::IfcConstructionMaterialResourceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::FromString(data_.get_attribute_value(11)); }
void Ifc4x3_tc1::IfcConstructionMaterialResourceType::setPredefinedType(::Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Value v) { set_attribute_value(11, EnumerationReference(&::Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(11); }


const IfcParse::entity& Ifc4x3_tc1::IfcConstructionMaterialResourceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[218]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConstructionMaterialResourceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[218]); }
Ifc4x3_tc1::IfcConstructionMaterialResourceType::IfcConstructionMaterialResourceType(IfcEntityInstanceData&& e) : IfcConstructionResourceType(std::move(e)) { }
Ifc4x3_tc1::IfcConstructionMaterialResourceType::IfcConstructionMaterialResourceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Value v12_PredefinedType) : IfcConstructionResourceType(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_Identification) {set_attribute_value(6, (*v7_Identification)); } if (v8_LongDescription) {set_attribute_value(7, (*v8_LongDescription)); } if (v9_ResourceType) {set_attribute_value(8, (*v9_ResourceType)); } if (v10_BaseCosts) {set_attribute_value(9, (*v10_BaseCosts)->generalize()); }set_attribute_value(10, v11_BaseQuantity ? v11_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcConstructionMaterialResourceTypeEnum::Class(),(size_t)v12_PredefinedType)));; populate_derived(); }

// Function implementations for IfcConstructionProductResource
boost::optional< ::Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Value > Ifc4x3_tc1::IfcConstructionProductResource::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcConstructionProductResource::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcConstructionProductResource::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[220]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConstructionProductResource::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[220]); }
Ifc4x3_tc1::IfcConstructionProductResource::IfcConstructionProductResource(IfcEntityInstanceData&& e) : IfcConstructionResource(std::move(e)) { }
Ifc4x3_tc1::IfcConstructionProductResource::IfcConstructionProductResource(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_tc1::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Value > v11_PredefinedType) : IfcConstructionResource(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_LongDescription) {set_attribute_value(6, (*v7_LongDescription)); }set_attribute_value(7, v8_Usage ? v8_Usage->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v9_BaseCosts) {set_attribute_value(8, (*v9_BaseCosts)->generalize()); }set_attribute_value(9, v10_BaseQuantity ? v10_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcConstructionProductResourceType
::Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Value Ifc4x3_tc1::IfcConstructionProductResourceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::FromString(data_.get_attribute_value(11)); }
void Ifc4x3_tc1::IfcConstructionProductResourceType::setPredefinedType(::Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Value v) { set_attribute_value(11, EnumerationReference(&::Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(11); }


const IfcParse::entity& Ifc4x3_tc1::IfcConstructionProductResourceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[221]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConstructionProductResourceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[221]); }
Ifc4x3_tc1::IfcConstructionProductResourceType::IfcConstructionProductResourceType(IfcEntityInstanceData&& e) : IfcConstructionResourceType(std::move(e)) { }
Ifc4x3_tc1::IfcConstructionProductResourceType::IfcConstructionProductResourceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Value v12_PredefinedType) : IfcConstructionResourceType(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_Identification) {set_attribute_value(6, (*v7_Identification)); } if (v8_LongDescription) {set_attribute_value(7, (*v8_LongDescription)); } if (v9_ResourceType) {set_attribute_value(8, (*v9_ResourceType)); } if (v10_BaseCosts) {set_attribute_value(9, (*v10_BaseCosts)->generalize()); }set_attribute_value(10, v11_BaseQuantity ? v11_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcConstructionProductResourceTypeEnum::Class(),(size_t)v12_PredefinedType)));; populate_derived(); }

// Function implementations for IfcConstructionResource
::Ifc4x3_tc1::IfcResourceTime* Ifc4x3_tc1::IfcConstructionResource::Usage() const { if(data_.get_attribute_value(7).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(7)))->as<::Ifc4x3_tc1::IfcResourceTime>(true); }
void Ifc4x3_tc1::IfcConstructionResource::setUsage(::Ifc4x3_tc1::IfcResourceTime* v) { set_attribute_value(7, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(7); }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > Ifc4x3_tc1::IfcConstructionResource::BaseCosts() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(8); return es->as< ::Ifc4x3_tc1::IfcAppliedValue >(); }
void Ifc4x3_tc1::IfcConstructionResource::setBaseCosts(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v) { if (v) {set_attribute_value(8, (*v)->generalize());} else {unset_attribute_value(8);} }
::Ifc4x3_tc1::IfcPhysicalQuantity* Ifc4x3_tc1::IfcConstructionResource::BaseQuantity() const { if(data_.get_attribute_value(9).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(9)))->as<::Ifc4x3_tc1::IfcPhysicalQuantity>(true); }
void Ifc4x3_tc1::IfcConstructionResource::setBaseQuantity(::Ifc4x3_tc1::IfcPhysicalQuantity* v) { set_attribute_value(9, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcConstructionResource::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[223]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConstructionResource::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[223]); }
Ifc4x3_tc1::IfcConstructionResource::IfcConstructionResource(IfcEntityInstanceData&& e) : IfcResource(std::move(e)) { }
Ifc4x3_tc1::IfcConstructionResource::IfcConstructionResource(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_tc1::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v10_BaseQuantity) : IfcResource(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_LongDescription) {set_attribute_value(6, (*v7_LongDescription)); }set_attribute_value(7, v8_Usage ? v8_Usage->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v9_BaseCosts) {set_attribute_value(8, (*v9_BaseCosts)->generalize()); }set_attribute_value(9, v10_BaseQuantity ? v10_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcConstructionResourceType
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > Ifc4x3_tc1::IfcConstructionResourceType::BaseCosts() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(9); return es->as< ::Ifc4x3_tc1::IfcAppliedValue >(); }
void Ifc4x3_tc1::IfcConstructionResourceType::setBaseCosts(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v) { if (v) {set_attribute_value(9, (*v)->generalize());} else {unset_attribute_value(9);} }
::Ifc4x3_tc1::IfcPhysicalQuantity* Ifc4x3_tc1::IfcConstructionResourceType::BaseQuantity() const { if(data_.get_attribute_value(10).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(10)))->as<::Ifc4x3_tc1::IfcPhysicalQuantity>(true); }
void Ifc4x3_tc1::IfcConstructionResourceType::setBaseQuantity(::Ifc4x3_tc1::IfcPhysicalQuantity* v) { set_attribute_value(10, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(10); }


const IfcParse::entity& Ifc4x3_tc1::IfcConstructionResourceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[224]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConstructionResourceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[224]); }
Ifc4x3_tc1::IfcConstructionResourceType::IfcConstructionResourceType(IfcEntityInstanceData&& e) : IfcTypeResource(std::move(e)) { }
Ifc4x3_tc1::IfcConstructionResourceType::IfcConstructionResourceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v11_BaseQuantity) : IfcTypeResource(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_Identification) {set_attribute_value(6, (*v7_Identification)); } if (v8_LongDescription) {set_attribute_value(7, (*v8_LongDescription)); } if (v9_ResourceType) {set_attribute_value(8, (*v9_ResourceType)); } if (v10_BaseCosts) {set_attribute_value(9, (*v10_BaseCosts)->generalize()); }set_attribute_value(10, v11_BaseQuantity ? v11_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcContext
boost::optional< std::string > Ifc4x3_tc1::IfcContext::ObjectType() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcContext::setObjectType(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcContext::LongName() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcContext::setLongName(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcContext::Phase() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcContext::setPhase(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationContext >::ptr > Ifc4x3_tc1::IfcContext::RepresentationContexts() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(7); return es->as< ::Ifc4x3_tc1::IfcRepresentationContext >(); }
void Ifc4x3_tc1::IfcContext::setRepresentationContexts(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationContext >::ptr > v) { if (v) {set_attribute_value(7, (*v)->generalize());} else {unset_attribute_value(7);} }
::Ifc4x3_tc1::IfcUnitAssignment* Ifc4x3_tc1::IfcContext::UnitsInContext() const { if(data_.get_attribute_value(8).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(8)))->as<::Ifc4x3_tc1::IfcUnitAssignment>(true); }
void Ifc4x3_tc1::IfcContext::setUnitsInContext(::Ifc4x3_tc1::IfcUnitAssignment* v) { set_attribute_value(8, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(8); }

::Ifc4x3_tc1::IfcRelDefinesByProperties::list::ptr Ifc4x3_tc1::IfcContext::IsDefinedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[931], 4)->as<IfcRelDefinesByProperties>(); }
::Ifc4x3_tc1::IfcRelDeclares::list::ptr Ifc4x3_tc1::IfcContext::Declares() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[927], 4)->as<IfcRelDeclares>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcContext::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[225]); }
const IfcParse::entity& Ifc4x3_tc1::IfcContext::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[225]); }
Ifc4x3_tc1::IfcContext::IfcContext(IfcEntityInstanceData&& e) : IfcObjectDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcContext::IfcContext(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< std::string > v7_Phase, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationContext >::ptr > v8_RepresentationContexts, ::Ifc4x3_tc1::IfcUnitAssignment* v9_UnitsInContext) : IfcObjectDefinition(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_LongName) {set_attribute_value(5, (*v6_LongName)); } if (v7_Phase) {set_attribute_value(6, (*v7_Phase)); } if (v8_RepresentationContexts) {set_attribute_value(7, (*v8_RepresentationContexts)->generalize()); }set_attribute_value(8, v9_UnitsInContext ? v9_UnitsInContext->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcContextDependentUnit
std::string Ifc4x3_tc1::IfcContextDependentUnit::Name() const {  std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcContextDependentUnit::setName(std::string v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }

::Ifc4x3_tc1::IfcExternalReferenceRelationship::list::ptr Ifc4x3_tc1::IfcContextDependentUnit::HasExternalReference() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[427], 3)->as<IfcExternalReferenceRelationship>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcContextDependentUnit::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[227]); }
const IfcParse::entity& Ifc4x3_tc1::IfcContextDependentUnit::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[227]); }
Ifc4x3_tc1::IfcContextDependentUnit::IfcContextDependentUnit(IfcEntityInstanceData&& e) : IfcNamedUnit(std::move(e)) { }
Ifc4x3_tc1::IfcContextDependentUnit::IfcContextDependentUnit(::Ifc4x3_tc1::IfcDimensionalExponents* v1_Dimensions, ::Ifc4x3_tc1::IfcUnitEnum::Value v2_UnitType, std::string v3_Name) : IfcNamedUnit(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Dimensions ? v1_Dimensions->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcUnitEnum::Class(),(size_t)v2_UnitType)));set_attribute_value(2, (v3_Name));; populate_derived(); }

// Function implementations for IfcControl
boost::optional< std::string > Ifc4x3_tc1::IfcControl::Identification() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcControl::setIdentification(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }

::Ifc4x3_tc1::IfcRelAssignsToControl::list::ptr Ifc4x3_tc1::IfcControl::Controls() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[900], 6)->as<IfcRelAssignsToControl>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcControl::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[228]); }
const IfcParse::entity& Ifc4x3_tc1::IfcControl::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[228]); }
Ifc4x3_tc1::IfcControl::IfcControl(IfcEntityInstanceData&& e) : IfcObject(std::move(e)) { }
Ifc4x3_tc1::IfcControl::IfcControl(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification) : IfcObject(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); }; populate_derived(); }

// Function implementations for IfcController
boost::optional< ::Ifc4x3_tc1::IfcControllerTypeEnum::Value > Ifc4x3_tc1::IfcController::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcControllerTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcController::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcControllerTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcControllerTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcController::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[229]); }
const IfcParse::entity& Ifc4x3_tc1::IfcController::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[229]); }
Ifc4x3_tc1::IfcController::IfcController(IfcEntityInstanceData&& e) : IfcDistributionControlElement(std::move(e)) { }
Ifc4x3_tc1::IfcController::IfcController(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcControllerTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcControllerTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcControllerType
::Ifc4x3_tc1::IfcControllerTypeEnum::Value Ifc4x3_tc1::IfcControllerType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcControllerTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcControllerType::setPredefinedType(::Ifc4x3_tc1::IfcControllerTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcControllerTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcControllerType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[230]); }
const IfcParse::entity& Ifc4x3_tc1::IfcControllerType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[230]); }
Ifc4x3_tc1::IfcControllerType::IfcControllerType(IfcEntityInstanceData&& e) : IfcDistributionControlElementType(std::move(e)) { }
Ifc4x3_tc1::IfcControllerType::IfcControllerType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcControllerTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcControllerTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcConversionBasedUnit
std::string Ifc4x3_tc1::IfcConversionBasedUnit::Name() const {  std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcConversionBasedUnit::setName(std::string v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcMeasureWithUnit* Ifc4x3_tc1::IfcConversionBasedUnit::ConversionFactor() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcMeasureWithUnit>(true); }
void Ifc4x3_tc1::IfcConversionBasedUnit::setConversionFactor(::Ifc4x3_tc1::IfcMeasureWithUnit* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }

::Ifc4x3_tc1::IfcExternalReferenceRelationship::list::ptr Ifc4x3_tc1::IfcConversionBasedUnit::HasExternalReference() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[427], 3)->as<IfcExternalReferenceRelationship>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcConversionBasedUnit::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[232]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConversionBasedUnit::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[232]); }
Ifc4x3_tc1::IfcConversionBasedUnit::IfcConversionBasedUnit(IfcEntityInstanceData&& e) : IfcNamedUnit(std::move(e)) { }
Ifc4x3_tc1::IfcConversionBasedUnit::IfcConversionBasedUnit(::Ifc4x3_tc1::IfcDimensionalExponents* v1_Dimensions, ::Ifc4x3_tc1::IfcUnitEnum::Value v2_UnitType, std::string v3_Name, ::Ifc4x3_tc1::IfcMeasureWithUnit* v4_ConversionFactor) : IfcNamedUnit(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_Dimensions ? v1_Dimensions->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcUnitEnum::Class(),(size_t)v2_UnitType)));set_attribute_value(2, (v3_Name));set_attribute_value(3, v4_ConversionFactor ? v4_ConversionFactor->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcConversionBasedUnitWithOffset
double Ifc4x3_tc1::IfcConversionBasedUnitWithOffset::ConversionOffset() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcConversionBasedUnitWithOffset::setConversionOffset(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcConversionBasedUnitWithOffset::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[233]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConversionBasedUnitWithOffset::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[233]); }
Ifc4x3_tc1::IfcConversionBasedUnitWithOffset::IfcConversionBasedUnitWithOffset(IfcEntityInstanceData&& e) : IfcConversionBasedUnit(std::move(e)) { }
Ifc4x3_tc1::IfcConversionBasedUnitWithOffset::IfcConversionBasedUnitWithOffset(::Ifc4x3_tc1::IfcDimensionalExponents* v1_Dimensions, ::Ifc4x3_tc1::IfcUnitEnum::Value v2_UnitType, std::string v3_Name, ::Ifc4x3_tc1::IfcMeasureWithUnit* v4_ConversionFactor, double v5_ConversionOffset) : IfcConversionBasedUnit(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_Dimensions ? v1_Dimensions->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcUnitEnum::Class(),(size_t)v2_UnitType)));set_attribute_value(2, (v3_Name));set_attribute_value(3, v4_ConversionFactor ? v4_ConversionFactor->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, (v5_ConversionOffset));; populate_derived(); }

// Function implementations for IfcConveyorSegment
boost::optional< ::Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Value > Ifc4x3_tc1::IfcConveyorSegment::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcConveyorSegment::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcConveyorSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[234]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConveyorSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[234]); }
Ifc4x3_tc1::IfcConveyorSegment::IfcConveyorSegment(IfcEntityInstanceData&& e) : IfcFlowSegment(std::move(e)) { }
Ifc4x3_tc1::IfcConveyorSegment::IfcConveyorSegment(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Value > v9_PredefinedType) : IfcFlowSegment(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcConveyorSegmentType
::Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Value Ifc4x3_tc1::IfcConveyorSegmentType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcConveyorSegmentType::setPredefinedType(::Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcConveyorSegmentType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[235]); }
const IfcParse::entity& Ifc4x3_tc1::IfcConveyorSegmentType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[235]); }
Ifc4x3_tc1::IfcConveyorSegmentType::IfcConveyorSegmentType(IfcEntityInstanceData&& e) : IfcFlowSegmentType(std::move(e)) { }
Ifc4x3_tc1::IfcConveyorSegmentType::IfcConveyorSegmentType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Value v10_PredefinedType) : IfcFlowSegmentType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcConveyorSegmentTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCooledBeam
boost::optional< ::Ifc4x3_tc1::IfcCooledBeamTypeEnum::Value > Ifc4x3_tc1::IfcCooledBeam::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCooledBeamTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCooledBeam::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCooledBeamTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCooledBeamTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCooledBeam::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[237]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCooledBeam::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[237]); }
Ifc4x3_tc1::IfcCooledBeam::IfcCooledBeam(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcCooledBeam::IfcCooledBeam(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCooledBeamTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCooledBeamTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCooledBeamType
::Ifc4x3_tc1::IfcCooledBeamTypeEnum::Value Ifc4x3_tc1::IfcCooledBeamType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCooledBeamTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCooledBeamType::setPredefinedType(::Ifc4x3_tc1::IfcCooledBeamTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCooledBeamTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCooledBeamType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[238]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCooledBeamType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[238]); }
Ifc4x3_tc1::IfcCooledBeamType::IfcCooledBeamType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcCooledBeamType::IfcCooledBeamType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCooledBeamTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCooledBeamTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCoolingTower
boost::optional< ::Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Value > Ifc4x3_tc1::IfcCoolingTower::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCoolingTowerTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCoolingTower::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCoolingTower::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[240]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCoolingTower::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[240]); }
Ifc4x3_tc1::IfcCoolingTower::IfcCoolingTower(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcCoolingTower::IfcCoolingTower(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCoolingTowerType
::Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Value Ifc4x3_tc1::IfcCoolingTowerType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCoolingTowerTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCoolingTowerType::setPredefinedType(::Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCoolingTowerType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[241]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCoolingTowerType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[241]); }
Ifc4x3_tc1::IfcCoolingTowerType::IfcCoolingTowerType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcCoolingTowerType::IfcCoolingTowerType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCoolingTowerTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCoordinateOperation
::Ifc4x3_tc1::IfcCoordinateReferenceSystemSelect* Ifc4x3_tc1::IfcCoordinateOperation::SourceCRS() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCoordinateReferenceSystemSelect>(true); }
void Ifc4x3_tc1::IfcCoordinateOperation::setSourceCRS(::Ifc4x3_tc1::IfcCoordinateReferenceSystemSelect* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcCoordinateReferenceSystem* Ifc4x3_tc1::IfcCoordinateOperation::TargetCRS() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcCoordinateReferenceSystem>(true); }
void Ifc4x3_tc1::IfcCoordinateOperation::setTargetCRS(::Ifc4x3_tc1::IfcCoordinateReferenceSystem* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcCoordinateOperation::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[243]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCoordinateOperation::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[243]); }
Ifc4x3_tc1::IfcCoordinateOperation::IfcCoordinateOperation(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcCoordinateOperation::IfcCoordinateOperation(::Ifc4x3_tc1::IfcCoordinateReferenceSystemSelect* v1_SourceCRS, ::Ifc4x3_tc1::IfcCoordinateReferenceSystem* v2_TargetCRS) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_SourceCRS ? v1_SourceCRS->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_TargetCRS ? v2_TargetCRS->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcCoordinateReferenceSystem
std::string Ifc4x3_tc1::IfcCoordinateReferenceSystem::Name() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcCoordinateReferenceSystem::setName(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcCoordinateReferenceSystem::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcCoordinateReferenceSystem::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcCoordinateReferenceSystem::GeodeticDatum() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcCoordinateReferenceSystem::setGeodeticDatum(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< std::string > Ifc4x3_tc1::IfcCoordinateReferenceSystem::VerticalDatum() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcCoordinateReferenceSystem::setVerticalDatum(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }

::Ifc4x3_tc1::IfcCoordinateOperation::list::ptr Ifc4x3_tc1::IfcCoordinateReferenceSystem::HasCoordinateOperation() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[243], 0)->as<IfcCoordinateOperation>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcCoordinateReferenceSystem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[244]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCoordinateReferenceSystem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[244]); }
Ifc4x3_tc1::IfcCoordinateReferenceSystem::IfcCoordinateReferenceSystem(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcCoordinateReferenceSystem::IfcCoordinateReferenceSystem(std::string v1_Name, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_GeodeticDatum, boost::optional< std::string > v4_VerticalDatum) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); } if (v3_GeodeticDatum) {set_attribute_value(2, (*v3_GeodeticDatum)); } if (v4_VerticalDatum) {set_attribute_value(3, (*v4_VerticalDatum)); }; populate_derived(); }

// Function implementations for IfcCosineSpiral
double Ifc4x3_tc1::IfcCosineSpiral::CosineTerm() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcCosineSpiral::setCosineTerm(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< double > Ifc4x3_tc1::IfcCosineSpiral::ConstantTerm() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcCosineSpiral::setConstantTerm(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCosineSpiral::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[246]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCosineSpiral::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[246]); }
Ifc4x3_tc1::IfcCosineSpiral::IfcCosineSpiral(IfcEntityInstanceData&& e) : IfcSpiral(std::move(e)) { }
Ifc4x3_tc1::IfcCosineSpiral::IfcCosineSpiral(::Ifc4x3_tc1::IfcAxis2Placement* v1_Position, double v2_CosineTerm, boost::optional< double > v3_ConstantTerm) : IfcSpiral(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_CosineTerm)); if (v3_ConstantTerm) {set_attribute_value(2, (*v3_ConstantTerm)); }; populate_derived(); }

// Function implementations for IfcCostItem
boost::optional< ::Ifc4x3_tc1::IfcCostItemTypeEnum::Value > Ifc4x3_tc1::IfcCostItem::PredefinedType() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCostItemTypeEnum::FromString(data_.get_attribute_value(6)); }
void Ifc4x3_tc1::IfcCostItem::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCostItemTypeEnum::Value > v) { if (v) {set_attribute_value(6, EnumerationReference(&::Ifc4x3_tc1::IfcCostItemTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(6);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcCostValue >::ptr > Ifc4x3_tc1::IfcCostItem::CostValues() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(7); return es->as< ::Ifc4x3_tc1::IfcCostValue >(); }
void Ifc4x3_tc1::IfcCostItem::setCostValues(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcCostValue >::ptr > v) { if (v) {set_attribute_value(7, (*v)->generalize());} else {unset_attribute_value(7);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPhysicalQuantity >::ptr > Ifc4x3_tc1::IfcCostItem::CostQuantities() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(8); return es->as< ::Ifc4x3_tc1::IfcPhysicalQuantity >(); }
void Ifc4x3_tc1::IfcCostItem::setCostQuantities(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPhysicalQuantity >::ptr > v) { if (v) {set_attribute_value(8, (*v)->generalize());} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCostItem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[247]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCostItem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[247]); }
Ifc4x3_tc1::IfcCostItem::IfcCostItem(IfcEntityInstanceData&& e) : IfcControl(std::move(e)) { }
Ifc4x3_tc1::IfcCostItem::IfcCostItem(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_tc1::IfcCostItemTypeEnum::Value > v7_PredefinedType, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcCostValue >::ptr > v8_CostValues, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPhysicalQuantity >::ptr > v9_CostQuantities) : IfcControl(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_PredefinedType) {set_attribute_value(6, (EnumerationReference(&::Ifc4x3_tc1::IfcCostItemTypeEnum::Class(),(size_t)*v7_PredefinedType))); } if (v8_CostValues) {set_attribute_value(7, (*v8_CostValues)->generalize()); } if (v9_CostQuantities) {set_attribute_value(8, (*v9_CostQuantities)->generalize()); }; populate_derived(); }

// Function implementations for IfcCostSchedule
boost::optional< ::Ifc4x3_tc1::IfcCostScheduleTypeEnum::Value > Ifc4x3_tc1::IfcCostSchedule::PredefinedType() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCostScheduleTypeEnum::FromString(data_.get_attribute_value(6)); }
void Ifc4x3_tc1::IfcCostSchedule::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCostScheduleTypeEnum::Value > v) { if (v) {set_attribute_value(6, EnumerationReference(&::Ifc4x3_tc1::IfcCostScheduleTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(6);} }
boost::optional< std::string > Ifc4x3_tc1::IfcCostSchedule::Status() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcCostSchedule::setStatus(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< std::string > Ifc4x3_tc1::IfcCostSchedule::SubmittedOn() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcCostSchedule::setSubmittedOn(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< std::string > Ifc4x3_tc1::IfcCostSchedule::UpdateDate() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcCostSchedule::setUpdateDate(boost::optional< std::string > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCostSchedule::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[249]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCostSchedule::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[249]); }
Ifc4x3_tc1::IfcCostSchedule::IfcCostSchedule(IfcEntityInstanceData&& e) : IfcControl(std::move(e)) { }
Ifc4x3_tc1::IfcCostSchedule::IfcCostSchedule(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_tc1::IfcCostScheduleTypeEnum::Value > v7_PredefinedType, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_SubmittedOn, boost::optional< std::string > v10_UpdateDate) : IfcControl(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_PredefinedType) {set_attribute_value(6, (EnumerationReference(&::Ifc4x3_tc1::IfcCostScheduleTypeEnum::Class(),(size_t)*v7_PredefinedType))); } if (v8_Status) {set_attribute_value(7, (*v8_Status)); } if (v9_SubmittedOn) {set_attribute_value(8, (*v9_SubmittedOn)); } if (v10_UpdateDate) {set_attribute_value(9, (*v10_UpdateDate)); }; populate_derived(); }

// Function implementations for IfcCostValue


const IfcParse::entity& Ifc4x3_tc1::IfcCostValue::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[251]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCostValue::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[251]); }
Ifc4x3_tc1::IfcCostValue::IfcCostValue(IfcEntityInstanceData&& e) : IfcAppliedValue(std::move(e)) { }
Ifc4x3_tc1::IfcCostValue::IfcCostValue(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcAppliedValueSelect* v3_AppliedValue, ::Ifc4x3_tc1::IfcMeasureWithUnit* v4_UnitBasis, boost::optional< std::string > v5_ApplicableDate, boost::optional< std::string > v6_FixedUntilDate, boost::optional< std::string > v7_Category, boost::optional< std::string > v8_Condition, boost::optional< ::Ifc4x3_tc1::IfcArithmeticOperatorEnum::Value > v9_ArithmeticOperator, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v10_Components) : IfcAppliedValue(IfcEntityInstanceData(storage_t(10))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_AppliedValue ? v3_AppliedValue->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_UnitBasis ? v4_UnitBasis->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_ApplicableDate) {set_attribute_value(4, (*v5_ApplicableDate)); } if (v6_FixedUntilDate) {set_attribute_value(5, (*v6_FixedUntilDate)); } if (v7_Category) {set_attribute_value(6, (*v7_Category)); } if (v8_Condition) {set_attribute_value(7, (*v8_Condition)); } if (v9_ArithmeticOperator) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcArithmeticOperatorEnum::Class(),(size_t)*v9_ArithmeticOperator))); } if (v10_Components) {set_attribute_value(9, (*v10_Components)->generalize()); }; populate_derived(); }

// Function implementations for IfcCourse
boost::optional< ::Ifc4x3_tc1::IfcCourseTypeEnum::Value > Ifc4x3_tc1::IfcCourse::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCourseTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCourse::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCourseTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCourseTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCourse::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[253]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCourse::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[253]); }
Ifc4x3_tc1::IfcCourse::IfcCourse(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcCourse::IfcCourse(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCourseTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCourseTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCourseType
::Ifc4x3_tc1::IfcCourseTypeEnum::Value Ifc4x3_tc1::IfcCourseType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCourseTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCourseType::setPredefinedType(::Ifc4x3_tc1::IfcCourseTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCourseTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCourseType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[254]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCourseType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[254]); }
Ifc4x3_tc1::IfcCourseType::IfcCourseType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcCourseType::IfcCourseType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCourseTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCourseTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCovering
boost::optional< ::Ifc4x3_tc1::IfcCoveringTypeEnum::Value > Ifc4x3_tc1::IfcCovering::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCoveringTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCovering::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCoveringTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCoveringTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }

::Ifc4x3_tc1::IfcRelCoversSpaces::list::ptr Ifc4x3_tc1::IfcCovering::CoversSpaces() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[926], 5)->as<IfcRelCoversSpaces>(); }
::Ifc4x3_tc1::IfcRelCoversBldgElements::list::ptr Ifc4x3_tc1::IfcCovering::CoversElements() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[925], 5)->as<IfcRelCoversBldgElements>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcCovering::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[256]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCovering::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[256]); }
Ifc4x3_tc1::IfcCovering::IfcCovering(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcCovering::IfcCovering(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCoveringTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCoveringTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCoveringType
::Ifc4x3_tc1::IfcCoveringTypeEnum::Value Ifc4x3_tc1::IfcCoveringType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCoveringTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCoveringType::setPredefinedType(::Ifc4x3_tc1::IfcCoveringTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCoveringTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCoveringType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[257]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCoveringType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[257]); }
Ifc4x3_tc1::IfcCoveringType::IfcCoveringType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcCoveringType::IfcCoveringType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCoveringTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCoveringTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCrewResource
boost::optional< ::Ifc4x3_tc1::IfcCrewResourceTypeEnum::Value > Ifc4x3_tc1::IfcCrewResource::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCrewResourceTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcCrewResource::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCrewResourceTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcCrewResourceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCrewResource::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[259]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCrewResource::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[259]); }
Ifc4x3_tc1::IfcCrewResource::IfcCrewResource(IfcEntityInstanceData&& e) : IfcConstructionResource(std::move(e)) { }
Ifc4x3_tc1::IfcCrewResource::IfcCrewResource(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_tc1::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_tc1::IfcCrewResourceTypeEnum::Value > v11_PredefinedType) : IfcConstructionResource(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_LongDescription) {set_attribute_value(6, (*v7_LongDescription)); }set_attribute_value(7, v8_Usage ? v8_Usage->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v9_BaseCosts) {set_attribute_value(8, (*v9_BaseCosts)->generalize()); }set_attribute_value(9, v10_BaseQuantity ? v10_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcCrewResourceTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCrewResourceType
::Ifc4x3_tc1::IfcCrewResourceTypeEnum::Value Ifc4x3_tc1::IfcCrewResourceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCrewResourceTypeEnum::FromString(data_.get_attribute_value(11)); }
void Ifc4x3_tc1::IfcCrewResourceType::setPredefinedType(::Ifc4x3_tc1::IfcCrewResourceTypeEnum::Value v) { set_attribute_value(11, EnumerationReference(&::Ifc4x3_tc1::IfcCrewResourceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(11); }


const IfcParse::entity& Ifc4x3_tc1::IfcCrewResourceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[260]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCrewResourceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[260]); }
Ifc4x3_tc1::IfcCrewResourceType::IfcCrewResourceType(IfcEntityInstanceData&& e) : IfcConstructionResourceType(std::move(e)) { }
Ifc4x3_tc1::IfcCrewResourceType::IfcCrewResourceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_tc1::IfcCrewResourceTypeEnum::Value v12_PredefinedType) : IfcConstructionResourceType(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_Identification) {set_attribute_value(6, (*v7_Identification)); } if (v8_LongDescription) {set_attribute_value(7, (*v8_LongDescription)); } if (v9_ResourceType) {set_attribute_value(8, (*v9_ResourceType)); } if (v10_BaseCosts) {set_attribute_value(9, (*v10_BaseCosts)->generalize()); }set_attribute_value(10, v11_BaseQuantity ? v11_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcCrewResourceTypeEnum::Class(),(size_t)v12_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCsgPrimitive3D
::Ifc4x3_tc1::IfcAxis2Placement3D* Ifc4x3_tc1::IfcCsgPrimitive3D::Position() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcAxis2Placement3D>(true); }
void Ifc4x3_tc1::IfcCsgPrimitive3D::setPosition(::Ifc4x3_tc1::IfcAxis2Placement3D* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcCsgPrimitive3D::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[262]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCsgPrimitive3D::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[262]); }
Ifc4x3_tc1::IfcCsgPrimitive3D::IfcCsgPrimitive3D(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcCsgPrimitive3D::IfcCsgPrimitive3D(::Ifc4x3_tc1::IfcAxis2Placement3D* v1_Position) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcCsgSolid
::Ifc4x3_tc1::IfcCsgSelect* Ifc4x3_tc1::IfcCsgSolid::TreeRootExpression() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCsgSelect>(true); }
void Ifc4x3_tc1::IfcCsgSolid::setTreeRootExpression(::Ifc4x3_tc1::IfcCsgSelect* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcCsgSolid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[264]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCsgSolid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[264]); }
Ifc4x3_tc1::IfcCsgSolid::IfcCsgSolid(IfcEntityInstanceData&& e) : IfcSolidModel(std::move(e)) { }
Ifc4x3_tc1::IfcCsgSolid::IfcCsgSolid(::Ifc4x3_tc1::IfcCsgSelect* v1_TreeRootExpression) : IfcSolidModel(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_TreeRootExpression ? v1_TreeRootExpression->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcCurrencyRelationship
::Ifc4x3_tc1::IfcMonetaryUnit* Ifc4x3_tc1::IfcCurrencyRelationship::RelatingMonetaryUnit() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcMonetaryUnit>(true); }
void Ifc4x3_tc1::IfcCurrencyRelationship::setRelatingMonetaryUnit(::Ifc4x3_tc1::IfcMonetaryUnit* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcMonetaryUnit* Ifc4x3_tc1::IfcCurrencyRelationship::RelatedMonetaryUnit() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcMonetaryUnit>(true); }
void Ifc4x3_tc1::IfcCurrencyRelationship::setRelatedMonetaryUnit(::Ifc4x3_tc1::IfcMonetaryUnit* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcCurrencyRelationship::ExchangeRate() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcCurrencyRelationship::setExchangeRate(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
boost::optional< std::string > Ifc4x3_tc1::IfcCurrencyRelationship::RateDateTime() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcCurrencyRelationship::setRateDateTime(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
::Ifc4x3_tc1::IfcLibraryInformation* Ifc4x3_tc1::IfcCurrencyRelationship::RateSource() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcLibraryInformation>(true); }
void Ifc4x3_tc1::IfcCurrencyRelationship::setRateSource(::Ifc4x3_tc1::IfcLibraryInformation* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcCurrencyRelationship::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[266]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCurrencyRelationship::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[266]); }
Ifc4x3_tc1::IfcCurrencyRelationship::IfcCurrencyRelationship(IfcEntityInstanceData&& e) : IfcResourceLevelRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcCurrencyRelationship::IfcCurrencyRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcMonetaryUnit* v3_RelatingMonetaryUnit, ::Ifc4x3_tc1::IfcMonetaryUnit* v4_RelatedMonetaryUnit, double v5_ExchangeRate, boost::optional< std::string > v6_RateDateTime, ::Ifc4x3_tc1::IfcLibraryInformation* v7_RateSource) : IfcResourceLevelRelationship(IfcEntityInstanceData(storage_t(7))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_RelatingMonetaryUnit ? v3_RelatingMonetaryUnit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_RelatedMonetaryUnit ? v4_RelatedMonetaryUnit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, (v5_ExchangeRate)); if (v6_RateDateTime) {set_attribute_value(5, (*v6_RateDateTime)); }set_attribute_value(6, v7_RateSource ? v7_RateSource->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcCurtainWall
boost::optional< ::Ifc4x3_tc1::IfcCurtainWallTypeEnum::Value > Ifc4x3_tc1::IfcCurtainWall::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCurtainWallTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcCurtainWall::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcCurtainWallTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcCurtainWallTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCurtainWall::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[267]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCurtainWall::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[267]); }
Ifc4x3_tc1::IfcCurtainWall::IfcCurtainWall(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcCurtainWall::IfcCurtainWall(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcCurtainWallTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcCurtainWallTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcCurtainWallType
::Ifc4x3_tc1::IfcCurtainWallTypeEnum::Value Ifc4x3_tc1::IfcCurtainWallType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcCurtainWallTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcCurtainWallType::setPredefinedType(::Ifc4x3_tc1::IfcCurtainWallTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcCurtainWallTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcCurtainWallType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[268]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCurtainWallType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[268]); }
Ifc4x3_tc1::IfcCurtainWallType::IfcCurtainWallType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcCurtainWallType::IfcCurtainWallType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcCurtainWallTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcCurtainWallTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcCurve


const IfcParse::entity& Ifc4x3_tc1::IfcCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[271]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[271]); }
Ifc4x3_tc1::IfcCurve::IfcCurve(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcCurve::IfcCurve() : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcCurveBoundedPlane
::Ifc4x3_tc1::IfcPlane* Ifc4x3_tc1::IfcCurveBoundedPlane::BasisSurface() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcPlane>(true); }
void Ifc4x3_tc1::IfcCurveBoundedPlane::setBasisSurface(::Ifc4x3_tc1::IfcPlane* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcCurveBoundedPlane::OuterBoundary() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcCurveBoundedPlane::setOuterBoundary(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
aggregate_of< ::Ifc4x3_tc1::IfcCurve >::ptr Ifc4x3_tc1::IfcCurveBoundedPlane::InnerBoundaries() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcCurve >(); }
void Ifc4x3_tc1::IfcCurveBoundedPlane::setInnerBoundaries(aggregate_of< ::Ifc4x3_tc1::IfcCurve >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcCurveBoundedPlane::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[272]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCurveBoundedPlane::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[272]); }
Ifc4x3_tc1::IfcCurveBoundedPlane::IfcCurveBoundedPlane(IfcEntityInstanceData&& e) : IfcBoundedSurface(std::move(e)) { }
Ifc4x3_tc1::IfcCurveBoundedPlane::IfcCurveBoundedPlane(::Ifc4x3_tc1::IfcPlane* v1_BasisSurface, ::Ifc4x3_tc1::IfcCurve* v2_OuterBoundary, aggregate_of< ::Ifc4x3_tc1::IfcCurve >::ptr v3_InnerBoundaries) : IfcBoundedSurface(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_BasisSurface ? v1_BasisSurface->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_OuterBoundary ? v2_OuterBoundary->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, (v3_InnerBoundaries)->generalize());; populate_derived(); }

// Function implementations for IfcCurveBoundedSurface
::Ifc4x3_tc1::IfcSurface* Ifc4x3_tc1::IfcCurveBoundedSurface::BasisSurface() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcSurface>(true); }
void Ifc4x3_tc1::IfcCurveBoundedSurface::setBasisSurface(::Ifc4x3_tc1::IfcSurface* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
aggregate_of< ::Ifc4x3_tc1::IfcBoundaryCurve >::ptr Ifc4x3_tc1::IfcCurveBoundedSurface::Boundaries() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcBoundaryCurve >(); }
void Ifc4x3_tc1::IfcCurveBoundedSurface::setBoundaries(aggregate_of< ::Ifc4x3_tc1::IfcBoundaryCurve >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }
bool Ifc4x3_tc1::IfcCurveBoundedSurface::ImplicitOuter() const {  bool v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcCurveBoundedSurface::setImplicitOuter(bool v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcCurveBoundedSurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[273]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCurveBoundedSurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[273]); }
Ifc4x3_tc1::IfcCurveBoundedSurface::IfcCurveBoundedSurface(IfcEntityInstanceData&& e) : IfcBoundedSurface(std::move(e)) { }
Ifc4x3_tc1::IfcCurveBoundedSurface::IfcCurveBoundedSurface(::Ifc4x3_tc1::IfcSurface* v1_BasisSurface, aggregate_of< ::Ifc4x3_tc1::IfcBoundaryCurve >::ptr v2_Boundaries, bool v3_ImplicitOuter) : IfcBoundedSurface(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_BasisSurface ? v1_BasisSurface->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Boundaries)->generalize());set_attribute_value(2, (v3_ImplicitOuter));; populate_derived(); }

// Function implementations for IfcCurveSegment
::Ifc4x3_tc1::IfcPlacement* Ifc4x3_tc1::IfcCurveSegment::Placement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcPlacement>(true); }
void Ifc4x3_tc1::IfcCurveSegment::setPlacement(::Ifc4x3_tc1::IfcPlacement* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcCurveMeasureSelect* Ifc4x3_tc1::IfcCurveSegment::SegmentStart() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcCurveMeasureSelect>(true); }
void Ifc4x3_tc1::IfcCurveSegment::setSegmentStart(::Ifc4x3_tc1::IfcCurveMeasureSelect* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcCurveMeasureSelect* Ifc4x3_tc1::IfcCurveSegment::SegmentLength() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcCurveMeasureSelect>(true); }
void Ifc4x3_tc1::IfcCurveSegment::setSegmentLength(::Ifc4x3_tc1::IfcCurveMeasureSelect* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcCurveSegment::ParentCurve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcCurveSegment::setParentCurve(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcCurveSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[279]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCurveSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[279]); }
Ifc4x3_tc1::IfcCurveSegment::IfcCurveSegment(IfcEntityInstanceData&& e) : IfcSegment(std::move(e)) { }
Ifc4x3_tc1::IfcCurveSegment::IfcCurveSegment(::Ifc4x3_tc1::IfcTransitionCode::Value v1_Transition, ::Ifc4x3_tc1::IfcPlacement* v2_Placement, ::Ifc4x3_tc1::IfcCurveMeasureSelect* v3_SegmentStart, ::Ifc4x3_tc1::IfcCurveMeasureSelect* v4_SegmentLength, ::Ifc4x3_tc1::IfcCurve* v5_ParentCurve) : IfcSegment(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcTransitionCode::Class(),(size_t)v1_Transition)));set_attribute_value(1, v2_Placement ? v2_Placement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_SegmentStart ? v3_SegmentStart->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_SegmentLength ? v4_SegmentLength->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, v5_ParentCurve ? v5_ParentCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcCurveStyle
::Ifc4x3_tc1::IfcCurveFontOrScaledCurveFontSelect* Ifc4x3_tc1::IfcCurveStyle::CurveFont() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcCurveFontOrScaledCurveFontSelect>(true); }
void Ifc4x3_tc1::IfcCurveStyle::setCurveFont(::Ifc4x3_tc1::IfcCurveFontOrScaledCurveFontSelect* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcSizeSelect* Ifc4x3_tc1::IfcCurveStyle::CurveWidth() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcSizeSelect>(true); }
void Ifc4x3_tc1::IfcCurveStyle::setCurveWidth(::Ifc4x3_tc1::IfcSizeSelect* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcColour* Ifc4x3_tc1::IfcCurveStyle::CurveColour() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcColour>(true); }
void Ifc4x3_tc1::IfcCurveStyle::setCurveColour(::Ifc4x3_tc1::IfcColour* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
boost::optional< bool > Ifc4x3_tc1::IfcCurveStyle::ModelOrDraughting() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } bool v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcCurveStyle::setModelOrDraughting(boost::optional< bool > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcCurveStyle::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[280]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCurveStyle::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[280]); }
Ifc4x3_tc1::IfcCurveStyle::IfcCurveStyle(IfcEntityInstanceData&& e) : IfcPresentationStyle(std::move(e)) { }
Ifc4x3_tc1::IfcCurveStyle::IfcCurveStyle(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcCurveFontOrScaledCurveFontSelect* v2_CurveFont, ::Ifc4x3_tc1::IfcSizeSelect* v3_CurveWidth, ::Ifc4x3_tc1::IfcColour* v4_CurveColour, boost::optional< bool > v5_ModelOrDraughting) : IfcPresentationStyle(IfcEntityInstanceData(storage_t(5))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, v2_CurveFont ? v2_CurveFont->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_CurveWidth ? v3_CurveWidth->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_CurveColour ? v4_CurveColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_ModelOrDraughting) {set_attribute_value(4, (*v5_ModelOrDraughting)); }; populate_derived(); }

// Function implementations for IfcCurveStyleFont
boost::optional< std::string > Ifc4x3_tc1::IfcCurveStyleFont::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcCurveStyleFont::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
aggregate_of< ::Ifc4x3_tc1::IfcCurveStyleFontPattern >::ptr Ifc4x3_tc1::IfcCurveStyleFont::PatternList() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcCurveStyleFontPattern >(); }
void Ifc4x3_tc1::IfcCurveStyleFont::setPatternList(aggregate_of< ::Ifc4x3_tc1::IfcCurveStyleFontPattern >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcCurveStyleFont::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[281]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCurveStyleFont::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[281]); }
Ifc4x3_tc1::IfcCurveStyleFont::IfcCurveStyleFont(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcCurveStyleFont::IfcCurveStyleFont(boost::optional< std::string > v1_Name, aggregate_of< ::Ifc4x3_tc1::IfcCurveStyleFontPattern >::ptr v2_PatternList) : IfcPresentationItem(IfcEntityInstanceData(storage_t(2))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, (v2_PatternList)->generalize());; populate_derived(); }

// Function implementations for IfcCurveStyleFontAndScaling
boost::optional< std::string > Ifc4x3_tc1::IfcCurveStyleFontAndScaling::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcCurveStyleFontAndScaling::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
::Ifc4x3_tc1::IfcCurveStyleFontSelect* Ifc4x3_tc1::IfcCurveStyleFontAndScaling::CurveStyleFont() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcCurveStyleFontSelect>(true); }
void Ifc4x3_tc1::IfcCurveStyleFontAndScaling::setCurveStyleFont(::Ifc4x3_tc1::IfcCurveStyleFontSelect* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
double Ifc4x3_tc1::IfcCurveStyleFontAndScaling::CurveFontScaling() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcCurveStyleFontAndScaling::setCurveFontScaling(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcCurveStyleFontAndScaling::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[282]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCurveStyleFontAndScaling::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[282]); }
Ifc4x3_tc1::IfcCurveStyleFontAndScaling::IfcCurveStyleFontAndScaling(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcCurveStyleFontAndScaling::IfcCurveStyleFontAndScaling(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcCurveStyleFontSelect* v2_CurveStyleFont, double v3_CurveFontScaling) : IfcPresentationItem(IfcEntityInstanceData(storage_t(3))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, v2_CurveStyleFont ? v2_CurveStyleFont->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, (v3_CurveFontScaling));; populate_derived(); }

// Function implementations for IfcCurveStyleFontPattern
double Ifc4x3_tc1::IfcCurveStyleFontPattern::VisibleSegmentLength() const {  double v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcCurveStyleFontPattern::setVisibleSegmentLength(double v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
double Ifc4x3_tc1::IfcCurveStyleFontPattern::InvisibleSegmentLength() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcCurveStyleFontPattern::setInvisibleSegmentLength(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcCurveStyleFontPattern::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[283]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCurveStyleFontPattern::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[283]); }
Ifc4x3_tc1::IfcCurveStyleFontPattern::IfcCurveStyleFontPattern(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcCurveStyleFontPattern::IfcCurveStyleFontPattern(double v1_VisibleSegmentLength, double v2_InvisibleSegmentLength) : IfcPresentationItem(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_VisibleSegmentLength));set_attribute_value(1, (v2_InvisibleSegmentLength));; populate_derived(); }

// Function implementations for IfcCylindricalSurface
double Ifc4x3_tc1::IfcCylindricalSurface::Radius() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcCylindricalSurface::setRadius(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcCylindricalSurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[285]); }
const IfcParse::entity& Ifc4x3_tc1::IfcCylindricalSurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[285]); }
Ifc4x3_tc1::IfcCylindricalSurface::IfcCylindricalSurface(IfcEntityInstanceData&& e) : IfcElementarySurface(std::move(e)) { }
Ifc4x3_tc1::IfcCylindricalSurface::IfcCylindricalSurface(::Ifc4x3_tc1::IfcAxis2Placement3D* v1_Position, double v2_Radius) : IfcElementarySurface(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Radius));; populate_derived(); }

// Function implementations for IfcDamper
boost::optional< ::Ifc4x3_tc1::IfcDamperTypeEnum::Value > Ifc4x3_tc1::IfcDamper::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDamperTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcDamper::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcDamperTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcDamperTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDamper::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[286]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDamper::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[286]); }
Ifc4x3_tc1::IfcDamper::IfcDamper(IfcEntityInstanceData&& e) : IfcFlowController(std::move(e)) { }
Ifc4x3_tc1::IfcDamper::IfcDamper(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcDamperTypeEnum::Value > v9_PredefinedType) : IfcFlowController(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcDamperTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcDamperType
::Ifc4x3_tc1::IfcDamperTypeEnum::Value Ifc4x3_tc1::IfcDamperType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcDamperTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcDamperType::setPredefinedType(::Ifc4x3_tc1::IfcDamperTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcDamperTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcDamperType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[287]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDamperType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[287]); }
Ifc4x3_tc1::IfcDamperType::IfcDamperType(IfcEntityInstanceData&& e) : IfcFlowControllerType(std::move(e)) { }
Ifc4x3_tc1::IfcDamperType::IfcDamperType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcDamperTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcDamperTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcDeepFoundation


const IfcParse::entity& Ifc4x3_tc1::IfcDeepFoundation::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[294]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDeepFoundation::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[294]); }
Ifc4x3_tc1::IfcDeepFoundation::IfcDeepFoundation(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcDeepFoundation::IfcDeepFoundation(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcBuiltElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcDeepFoundationType


const IfcParse::entity& Ifc4x3_tc1::IfcDeepFoundationType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[295]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDeepFoundationType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[295]); }
Ifc4x3_tc1::IfcDeepFoundationType::IfcDeepFoundationType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcDeepFoundationType::IfcDeepFoundationType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcDerivedProfileDef
::Ifc4x3_tc1::IfcProfileDef* Ifc4x3_tc1::IfcDerivedProfileDef::ParentProfile() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcProfileDef>(true); }
void Ifc4x3_tc1::IfcDerivedProfileDef::setParentProfile(::Ifc4x3_tc1::IfcProfileDef* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcCartesianTransformationOperator2D* Ifc4x3_tc1::IfcDerivedProfileDef::Operator() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcCartesianTransformationOperator2D>(true); }
void Ifc4x3_tc1::IfcDerivedProfileDef::setOperator(::Ifc4x3_tc1::IfcCartesianTransformationOperator2D* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcDerivedProfileDef::Label() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcDerivedProfileDef::setLabel(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDerivedProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[298]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDerivedProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[298]); }
Ifc4x3_tc1::IfcDerivedProfileDef::IfcDerivedProfileDef(IfcEntityInstanceData&& e) : IfcProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcDerivedProfileDef::IfcDerivedProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcProfileDef* v3_ParentProfile, ::Ifc4x3_tc1::IfcCartesianTransformationOperator2D* v4_Operator, boost::optional< std::string > v5_Label) : IfcProfileDef(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_ParentProfile ? v3_ParentProfile->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_Operator ? v4_Operator->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_Label) {set_attribute_value(4, (*v5_Label)); }; populate_derived(); }

// Function implementations for IfcDerivedUnit
aggregate_of< ::Ifc4x3_tc1::IfcDerivedUnitElement >::ptr Ifc4x3_tc1::IfcDerivedUnit::Elements() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcDerivedUnitElement >(); }
void Ifc4x3_tc1::IfcDerivedUnit::setElements(aggregate_of< ::Ifc4x3_tc1::IfcDerivedUnitElement >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcDerivedUnitEnum::Value Ifc4x3_tc1::IfcDerivedUnit::UnitType() const {  return ::Ifc4x3_tc1::IfcDerivedUnitEnum::FromString(data_.get_attribute_value(1)); }
void Ifc4x3_tc1::IfcDerivedUnit::setUnitType(::Ifc4x3_tc1::IfcDerivedUnitEnum::Value v) { set_attribute_value(1, EnumerationReference(&::Ifc4x3_tc1::IfcDerivedUnitEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(1); }
boost::optional< std::string > Ifc4x3_tc1::IfcDerivedUnit::UserDefinedType() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcDerivedUnit::setUserDefinedType(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< std::string > Ifc4x3_tc1::IfcDerivedUnit::Name() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcDerivedUnit::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDerivedUnit::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[299]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDerivedUnit::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[299]); }
Ifc4x3_tc1::IfcDerivedUnit::IfcDerivedUnit(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcDerivedUnit::IfcDerivedUnit(aggregate_of< ::Ifc4x3_tc1::IfcDerivedUnitElement >::ptr v1_Elements, ::Ifc4x3_tc1::IfcDerivedUnitEnum::Value v2_UnitType, boost::optional< std::string > v3_UserDefinedType, boost::optional< std::string > v4_Name) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_Elements)->generalize());set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcDerivedUnitEnum::Class(),(size_t)v2_UnitType))); if (v3_UserDefinedType) {set_attribute_value(2, (*v3_UserDefinedType)); } if (v4_Name) {set_attribute_value(3, (*v4_Name)); }; populate_derived(); }

// Function implementations for IfcDerivedUnitElement
::Ifc4x3_tc1::IfcNamedUnit* Ifc4x3_tc1::IfcDerivedUnitElement::Unit() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcNamedUnit>(true); }
void Ifc4x3_tc1::IfcDerivedUnitElement::setUnit(::Ifc4x3_tc1::IfcNamedUnit* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
int Ifc4x3_tc1::IfcDerivedUnitElement::Exponent() const {  int v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcDerivedUnitElement::setExponent(int v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcDerivedUnitElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[300]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDerivedUnitElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[300]); }
Ifc4x3_tc1::IfcDerivedUnitElement::IfcDerivedUnitElement(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcDerivedUnitElement::IfcDerivedUnitElement(::Ifc4x3_tc1::IfcNamedUnit* v1_Unit, int v2_Exponent) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Unit ? v1_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Exponent));; populate_derived(); }

// Function implementations for IfcDimensionalExponents
int Ifc4x3_tc1::IfcDimensionalExponents::LengthExponent() const {  int v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcDimensionalExponents::setLengthExponent(int v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
int Ifc4x3_tc1::IfcDimensionalExponents::MassExponent() const {  int v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcDimensionalExponents::setMassExponent(int v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
int Ifc4x3_tc1::IfcDimensionalExponents::TimeExponent() const {  int v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcDimensionalExponents::setTimeExponent(int v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
int Ifc4x3_tc1::IfcDimensionalExponents::ElectricCurrentExponent() const {  int v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcDimensionalExponents::setElectricCurrentExponent(int v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
int Ifc4x3_tc1::IfcDimensionalExponents::ThermodynamicTemperatureExponent() const {  int v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcDimensionalExponents::setThermodynamicTemperatureExponent(int v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
int Ifc4x3_tc1::IfcDimensionalExponents::AmountOfSubstanceExponent() const {  int v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcDimensionalExponents::setAmountOfSubstanceExponent(int v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
int Ifc4x3_tc1::IfcDimensionalExponents::LuminousIntensityExponent() const {  int v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcDimensionalExponents::setLuminousIntensityExponent(int v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcDimensionalExponents::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[303]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDimensionalExponents::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[303]); }
Ifc4x3_tc1::IfcDimensionalExponents::IfcDimensionalExponents(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcDimensionalExponents::IfcDimensionalExponents(int v1_LengthExponent, int v2_MassExponent, int v3_TimeExponent, int v4_ElectricCurrentExponent, int v5_ThermodynamicTemperatureExponent, int v6_AmountOfSubstanceExponent, int v7_LuminousIntensityExponent) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_LengthExponent));set_attribute_value(1, (v2_MassExponent));set_attribute_value(2, (v3_TimeExponent));set_attribute_value(3, (v4_ElectricCurrentExponent));set_attribute_value(4, (v5_ThermodynamicTemperatureExponent));set_attribute_value(5, (v6_AmountOfSubstanceExponent));set_attribute_value(6, (v7_LuminousIntensityExponent));; populate_derived(); }

// Function implementations for IfcDirection
std::vector< double > /*[2:3]*/ Ifc4x3_tc1::IfcDirection::DirectionRatios() const {  std::vector< double > /*[2:3]*/ v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcDirection::setDirectionRatios(std::vector< double > /*[2:3]*/ v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcDirection::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[305]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDirection::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[305]); }
Ifc4x3_tc1::IfcDirection::IfcDirection(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcDirection::IfcDirection(std::vector< double > /*[2:3]*/ v1_DirectionRatios) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_DirectionRatios));; populate_derived(); }

// Function implementations for IfcDirectrixCurveSweptAreaSolid
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcDirectrixCurveSweptAreaSolid::Directrix() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcDirectrixCurveSweptAreaSolid::setDirectrix(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcCurveMeasureSelect* Ifc4x3_tc1::IfcDirectrixCurveSweptAreaSolid::StartParam() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcCurveMeasureSelect>(true); }
void Ifc4x3_tc1::IfcDirectrixCurveSweptAreaSolid::setStartParam(::Ifc4x3_tc1::IfcCurveMeasureSelect* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
::Ifc4x3_tc1::IfcCurveMeasureSelect* Ifc4x3_tc1::IfcDirectrixCurveSweptAreaSolid::EndParam() const { if(data_.get_attribute_value(4).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcCurveMeasureSelect>(true); }
void Ifc4x3_tc1::IfcDirectrixCurveSweptAreaSolid::setEndParam(::Ifc4x3_tc1::IfcCurveMeasureSelect* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcDirectrixCurveSweptAreaSolid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[307]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDirectrixCurveSweptAreaSolid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[307]); }
Ifc4x3_tc1::IfcDirectrixCurveSweptAreaSolid::IfcDirectrixCurveSweptAreaSolid(IfcEntityInstanceData&& e) : IfcSweptAreaSolid(std::move(e)) { }
Ifc4x3_tc1::IfcDirectrixCurveSweptAreaSolid::IfcDirectrixCurveSweptAreaSolid(::Ifc4x3_tc1::IfcProfileDef* v1_SweptArea, ::Ifc4x3_tc1::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_tc1::IfcCurve* v3_Directrix, ::Ifc4x3_tc1::IfcCurveMeasureSelect* v4_StartParam, ::Ifc4x3_tc1::IfcCurveMeasureSelect* v5_EndParam) : IfcSweptAreaSolid(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_SweptArea ? v1_SweptArea->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Position ? v2_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_Directrix ? v3_Directrix->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_StartParam ? v4_StartParam->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, v5_EndParam ? v5_EndParam->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcDirectrixDerivedReferenceSweptAreaSolid


const IfcParse::entity& Ifc4x3_tc1::IfcDirectrixDerivedReferenceSweptAreaSolid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[308]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDirectrixDerivedReferenceSweptAreaSolid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[308]); }
Ifc4x3_tc1::IfcDirectrixDerivedReferenceSweptAreaSolid::IfcDirectrixDerivedReferenceSweptAreaSolid(IfcEntityInstanceData&& e) : IfcFixedReferenceSweptAreaSolid(std::move(e)) { }
Ifc4x3_tc1::IfcDirectrixDerivedReferenceSweptAreaSolid::IfcDirectrixDerivedReferenceSweptAreaSolid(::Ifc4x3_tc1::IfcProfileDef* v1_SweptArea, ::Ifc4x3_tc1::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_tc1::IfcCurve* v3_Directrix, ::Ifc4x3_tc1::IfcCurveMeasureSelect* v4_StartParam, ::Ifc4x3_tc1::IfcCurveMeasureSelect* v5_EndParam, ::Ifc4x3_tc1::IfcDirection* v6_FixedReference) : IfcFixedReferenceSweptAreaSolid(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, v1_SweptArea ? v1_SweptArea->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Position ? v2_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_Directrix ? v3_Directrix->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_StartParam ? v4_StartParam->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, v5_EndParam ? v5_EndParam->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_FixedReference ? v6_FixedReference->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcDiscreteAccessory
boost::optional< ::Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Value > Ifc4x3_tc1::IfcDiscreteAccessory::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcDiscreteAccessory::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDiscreteAccessory::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[309]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDiscreteAccessory::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[309]); }
Ifc4x3_tc1::IfcDiscreteAccessory::IfcDiscreteAccessory(IfcEntityInstanceData&& e) : IfcElementComponent(std::move(e)) { }
Ifc4x3_tc1::IfcDiscreteAccessory::IfcDiscreteAccessory(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Value > v9_PredefinedType) : IfcElementComponent(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcDiscreteAccessoryType
::Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Value Ifc4x3_tc1::IfcDiscreteAccessoryType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcDiscreteAccessoryType::setPredefinedType(::Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcDiscreteAccessoryType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[310]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDiscreteAccessoryType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[310]); }
Ifc4x3_tc1::IfcDiscreteAccessoryType::IfcDiscreteAccessoryType(IfcEntityInstanceData&& e) : IfcElementComponentType(std::move(e)) { }
Ifc4x3_tc1::IfcDiscreteAccessoryType::IfcDiscreteAccessoryType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Value v10_PredefinedType) : IfcElementComponentType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcDiscreteAccessoryTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcDistributionBoard
boost::optional< ::Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Value > Ifc4x3_tc1::IfcDistributionBoard::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDistributionBoardTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcDistributionBoard::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDistributionBoard::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[312]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDistributionBoard::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[312]); }
Ifc4x3_tc1::IfcDistributionBoard::IfcDistributionBoard(IfcEntityInstanceData&& e) : IfcFlowController(std::move(e)) { }
Ifc4x3_tc1::IfcDistributionBoard::IfcDistributionBoard(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Value > v9_PredefinedType) : IfcFlowController(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcDistributionBoardType
::Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Value Ifc4x3_tc1::IfcDistributionBoardType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcDistributionBoardTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcDistributionBoardType::setPredefinedType(::Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcDistributionBoardType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[313]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDistributionBoardType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[313]); }
Ifc4x3_tc1::IfcDistributionBoardType::IfcDistributionBoardType(IfcEntityInstanceData&& e) : IfcFlowControllerType(std::move(e)) { }
Ifc4x3_tc1::IfcDistributionBoardType::IfcDistributionBoardType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcDistributionBoardTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcDistributionChamberElement
boost::optional< ::Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Value > Ifc4x3_tc1::IfcDistributionChamberElement::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcDistributionChamberElement::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDistributionChamberElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[315]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDistributionChamberElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[315]); }
Ifc4x3_tc1::IfcDistributionChamberElement::IfcDistributionChamberElement(IfcEntityInstanceData&& e) : IfcDistributionFlowElement(std::move(e)) { }
Ifc4x3_tc1::IfcDistributionChamberElement::IfcDistributionChamberElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Value > v9_PredefinedType) : IfcDistributionFlowElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcDistributionChamberElementType
::Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Value Ifc4x3_tc1::IfcDistributionChamberElementType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcDistributionChamberElementType::setPredefinedType(::Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcDistributionChamberElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[316]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDistributionChamberElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[316]); }
Ifc4x3_tc1::IfcDistributionChamberElementType::IfcDistributionChamberElementType(IfcEntityInstanceData&& e) : IfcDistributionFlowElementType(std::move(e)) { }
Ifc4x3_tc1::IfcDistributionChamberElementType::IfcDistributionChamberElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Value v10_PredefinedType) : IfcDistributionFlowElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcDistributionChamberElementTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcDistributionCircuit


const IfcParse::entity& Ifc4x3_tc1::IfcDistributionCircuit::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[318]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDistributionCircuit::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[318]); }
Ifc4x3_tc1::IfcDistributionCircuit::IfcDistributionCircuit(IfcEntityInstanceData&& e) : IfcDistributionSystem(std::move(e)) { }
Ifc4x3_tc1::IfcDistributionCircuit::IfcDistributionCircuit(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< ::Ifc4x3_tc1::IfcDistributionSystemEnum::Value > v7_PredefinedType) : IfcDistributionSystem(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_LongName) {set_attribute_value(5, (*v6_LongName)); } if (v7_PredefinedType) {set_attribute_value(6, (EnumerationReference(&::Ifc4x3_tc1::IfcDistributionSystemEnum::Class(),(size_t)*v7_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcDistributionControlElement

::Ifc4x3_tc1::IfcRelFlowControlElements::list::ptr Ifc4x3_tc1::IfcDistributionControlElement::AssignedToFlowElement() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[935], 4)->as<IfcRelFlowControlElements>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcDistributionControlElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[319]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDistributionControlElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[319]); }
Ifc4x3_tc1::IfcDistributionControlElement::IfcDistributionControlElement(IfcEntityInstanceData&& e) : IfcDistributionElement(std::move(e)) { }
Ifc4x3_tc1::IfcDistributionControlElement::IfcDistributionControlElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcDistributionControlElementType


const IfcParse::entity& Ifc4x3_tc1::IfcDistributionControlElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[320]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDistributionControlElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[320]); }
Ifc4x3_tc1::IfcDistributionControlElementType::IfcDistributionControlElementType(IfcEntityInstanceData&& e) : IfcDistributionElementType(std::move(e)) { }
Ifc4x3_tc1::IfcDistributionControlElementType::IfcDistributionControlElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcDistributionElement

::Ifc4x3_tc1::IfcRelConnectsPortToElement::list::ptr Ifc4x3_tc1::IfcDistributionElement::HasPorts() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[919], 5)->as<IfcRelConnectsPortToElement>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcDistributionElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[321]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDistributionElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[321]); }
Ifc4x3_tc1::IfcDistributionElement::IfcDistributionElement(IfcEntityInstanceData&& e) : IfcElement(std::move(e)) { }
Ifc4x3_tc1::IfcDistributionElement::IfcDistributionElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcDistributionElementType


const IfcParse::entity& Ifc4x3_tc1::IfcDistributionElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[322]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDistributionElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[322]); }
Ifc4x3_tc1::IfcDistributionElementType::IfcDistributionElementType(IfcEntityInstanceData&& e) : IfcElementType(std::move(e)) { }
Ifc4x3_tc1::IfcDistributionElementType::IfcDistributionElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcDistributionFlowElement

::Ifc4x3_tc1::IfcRelFlowControlElements::list::ptr Ifc4x3_tc1::IfcDistributionFlowElement::HasControlElements() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[935], 5)->as<IfcRelFlowControlElements>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcDistributionFlowElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[323]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDistributionFlowElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[323]); }
Ifc4x3_tc1::IfcDistributionFlowElement::IfcDistributionFlowElement(IfcEntityInstanceData&& e) : IfcDistributionElement(std::move(e)) { }
Ifc4x3_tc1::IfcDistributionFlowElement::IfcDistributionFlowElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcDistributionFlowElementType


const IfcParse::entity& Ifc4x3_tc1::IfcDistributionFlowElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[324]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDistributionFlowElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[324]); }
Ifc4x3_tc1::IfcDistributionFlowElementType::IfcDistributionFlowElementType(IfcEntityInstanceData&& e) : IfcDistributionElementType(std::move(e)) { }
Ifc4x3_tc1::IfcDistributionFlowElementType::IfcDistributionFlowElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcDistributionPort
boost::optional< ::Ifc4x3_tc1::IfcFlowDirectionEnum::Value > Ifc4x3_tc1::IfcDistributionPort::FlowDirection() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcFlowDirectionEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcDistributionPort::setFlowDirection(boost::optional< ::Ifc4x3_tc1::IfcFlowDirectionEnum::Value > v) { if (v) {set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcFlowDirectionEnum::Class(), (size_t) *v));} else {unset_attribute_value(7);} }
boost::optional< ::Ifc4x3_tc1::IfcDistributionPortTypeEnum::Value > Ifc4x3_tc1::IfcDistributionPort::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDistributionPortTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcDistributionPort::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcDistributionPortTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcDistributionPortTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }
boost::optional< ::Ifc4x3_tc1::IfcDistributionSystemEnum::Value > Ifc4x3_tc1::IfcDistributionPort::SystemType() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDistributionSystemEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcDistributionPort::setSystemType(boost::optional< ::Ifc4x3_tc1::IfcDistributionSystemEnum::Value > v) { if (v) {set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcDistributionSystemEnum::Class(), (size_t) *v));} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDistributionPort::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[325]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDistributionPort::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[325]); }
Ifc4x3_tc1::IfcDistributionPort::IfcDistributionPort(IfcEntityInstanceData&& e) : IfcPort(std::move(e)) { }
Ifc4x3_tc1::IfcDistributionPort::IfcDistributionPort(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< ::Ifc4x3_tc1::IfcFlowDirectionEnum::Value > v8_FlowDirection, boost::optional< ::Ifc4x3_tc1::IfcDistributionPortTypeEnum::Value > v9_PredefinedType, boost::optional< ::Ifc4x3_tc1::IfcDistributionSystemEnum::Value > v10_SystemType) : IfcPort(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_FlowDirection) {set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcFlowDirectionEnum::Class(),(size_t)*v8_FlowDirection))); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcDistributionPortTypeEnum::Class(),(size_t)*v9_PredefinedType))); } if (v10_SystemType) {set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcDistributionSystemEnum::Class(),(size_t)*v10_SystemType))); }; populate_derived(); }

// Function implementations for IfcDistributionSystem
boost::optional< std::string > Ifc4x3_tc1::IfcDistributionSystem::LongName() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcDistributionSystem::setLongName(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< ::Ifc4x3_tc1::IfcDistributionSystemEnum::Value > Ifc4x3_tc1::IfcDistributionSystem::PredefinedType() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDistributionSystemEnum::FromString(data_.get_attribute_value(6)); }
void Ifc4x3_tc1::IfcDistributionSystem::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcDistributionSystemEnum::Value > v) { if (v) {set_attribute_value(6, EnumerationReference(&::Ifc4x3_tc1::IfcDistributionSystemEnum::Class(), (size_t) *v));} else {unset_attribute_value(6);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDistributionSystem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[327]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDistributionSystem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[327]); }
Ifc4x3_tc1::IfcDistributionSystem::IfcDistributionSystem(IfcEntityInstanceData&& e) : IfcSystem(std::move(e)) { }
Ifc4x3_tc1::IfcDistributionSystem::IfcDistributionSystem(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< ::Ifc4x3_tc1::IfcDistributionSystemEnum::Value > v7_PredefinedType) : IfcSystem(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_LongName) {set_attribute_value(5, (*v6_LongName)); } if (v7_PredefinedType) {set_attribute_value(6, (EnumerationReference(&::Ifc4x3_tc1::IfcDistributionSystemEnum::Class(),(size_t)*v7_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcDocumentInformation
std::string Ifc4x3_tc1::IfcDocumentInformation::Identification() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcDocumentInformation::setIdentification(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
std::string Ifc4x3_tc1::IfcDocumentInformation::Name() const {  std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcDocumentInformation::setName(std::string v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< std::string > Ifc4x3_tc1::IfcDocumentInformation::Description() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcDocumentInformation::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< std::string > Ifc4x3_tc1::IfcDocumentInformation::Location() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcDocumentInformation::setLocation(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< std::string > Ifc4x3_tc1::IfcDocumentInformation::Purpose() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcDocumentInformation::setPurpose(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcDocumentInformation::IntendedUse() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcDocumentInformation::setIntendedUse(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcDocumentInformation::Scope() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcDocumentInformation::setScope(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< std::string > Ifc4x3_tc1::IfcDocumentInformation::Revision() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcDocumentInformation::setRevision(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
::Ifc4x3_tc1::IfcActorSelect* Ifc4x3_tc1::IfcDocumentInformation::DocumentOwner() const { if(data_.get_attribute_value(8).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(8)))->as<::Ifc4x3_tc1::IfcActorSelect>(true); }
void Ifc4x3_tc1::IfcDocumentInformation::setDocumentOwner(::Ifc4x3_tc1::IfcActorSelect* v) { set_attribute_value(8, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(8); }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcActorSelect >::ptr > Ifc4x3_tc1::IfcDocumentInformation::Editors() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(9); return es->as< ::Ifc4x3_tc1::IfcActorSelect >(); }
void Ifc4x3_tc1::IfcDocumentInformation::setEditors(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcActorSelect >::ptr > v) { if (v) {set_attribute_value(9, (*v)->generalize());} else {unset_attribute_value(9);} }
boost::optional< std::string > Ifc4x3_tc1::IfcDocumentInformation::CreationTime() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcDocumentInformation::setCreationTime(boost::optional< std::string > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< std::string > Ifc4x3_tc1::IfcDocumentInformation::LastRevisionTime() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcDocumentInformation::setLastRevisionTime(boost::optional< std::string > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< std::string > Ifc4x3_tc1::IfcDocumentInformation::ElectronicFormat() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcDocumentInformation::setElectronicFormat(boost::optional< std::string > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }
boost::optional< std::string > Ifc4x3_tc1::IfcDocumentInformation::ValidFrom() const { if(data_.get_attribute_value(13).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(13); return v; }
void Ifc4x3_tc1::IfcDocumentInformation::setValidFrom(boost::optional< std::string > v) { if (v) {set_attribute_value(13, *v);} else {unset_attribute_value(13);} }
boost::optional< std::string > Ifc4x3_tc1::IfcDocumentInformation::ValidUntil() const { if(data_.get_attribute_value(14).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(14); return v; }
void Ifc4x3_tc1::IfcDocumentInformation::setValidUntil(boost::optional< std::string > v) { if (v) {set_attribute_value(14, *v);} else {unset_attribute_value(14);} }
boost::optional< ::Ifc4x3_tc1::IfcDocumentConfidentialityEnum::Value > Ifc4x3_tc1::IfcDocumentInformation::Confidentiality() const { if(data_.get_attribute_value(15).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDocumentConfidentialityEnum::FromString(data_.get_attribute_value(15)); }
void Ifc4x3_tc1::IfcDocumentInformation::setConfidentiality(boost::optional< ::Ifc4x3_tc1::IfcDocumentConfidentialityEnum::Value > v) { if (v) {set_attribute_value(15, EnumerationReference(&::Ifc4x3_tc1::IfcDocumentConfidentialityEnum::Class(), (size_t) *v));} else {unset_attribute_value(15);} }
boost::optional< ::Ifc4x3_tc1::IfcDocumentStatusEnum::Value > Ifc4x3_tc1::IfcDocumentInformation::Status() const { if(data_.get_attribute_value(16).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDocumentStatusEnum::FromString(data_.get_attribute_value(16)); }
void Ifc4x3_tc1::IfcDocumentInformation::setStatus(boost::optional< ::Ifc4x3_tc1::IfcDocumentStatusEnum::Value > v) { if (v) {set_attribute_value(16, EnumerationReference(&::Ifc4x3_tc1::IfcDocumentStatusEnum::Class(), (size_t) *v));} else {unset_attribute_value(16);} }

::Ifc4x3_tc1::IfcRelAssociatesDocument::list::ptr Ifc4x3_tc1::IfcDocumentInformation::DocumentInfoForObjects() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[910], 5)->as<IfcRelAssociatesDocument>(); }
::Ifc4x3_tc1::IfcDocumentReference::list::ptr Ifc4x3_tc1::IfcDocumentInformation::HasDocumentReferences() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[332], 4)->as<IfcDocumentReference>(); }
::Ifc4x3_tc1::IfcDocumentInformationRelationship::list::ptr Ifc4x3_tc1::IfcDocumentInformation::IsPointedTo() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[331], 3)->as<IfcDocumentInformationRelationship>(); }
::Ifc4x3_tc1::IfcDocumentInformationRelationship::list::ptr Ifc4x3_tc1::IfcDocumentInformation::IsPointer() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[331], 2)->as<IfcDocumentInformationRelationship>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcDocumentInformation::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[330]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDocumentInformation::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[330]); }
Ifc4x3_tc1::IfcDocumentInformation::IfcDocumentInformation(IfcEntityInstanceData&& e) : IfcExternalInformation(std::move(e)) { }
Ifc4x3_tc1::IfcDocumentInformation::IfcDocumentInformation(std::string v1_Identification, std::string v2_Name, boost::optional< std::string > v3_Description, boost::optional< std::string > v4_Location, boost::optional< std::string > v5_Purpose, boost::optional< std::string > v6_IntendedUse, boost::optional< std::string > v7_Scope, boost::optional< std::string > v8_Revision, ::Ifc4x3_tc1::IfcActorSelect* v9_DocumentOwner, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcActorSelect >::ptr > v10_Editors, boost::optional< std::string > v11_CreationTime, boost::optional< std::string > v12_LastRevisionTime, boost::optional< std::string > v13_ElectronicFormat, boost::optional< std::string > v14_ValidFrom, boost::optional< std::string > v15_ValidUntil, boost::optional< ::Ifc4x3_tc1::IfcDocumentConfidentialityEnum::Value > v16_Confidentiality, boost::optional< ::Ifc4x3_tc1::IfcDocumentStatusEnum::Value > v17_Status) : IfcExternalInformation(IfcEntityInstanceData(storage_t(17))) { set_attribute_value(0, (v1_Identification));set_attribute_value(1, (v2_Name)); if (v3_Description) {set_attribute_value(2, (*v3_Description)); } if (v4_Location) {set_attribute_value(3, (*v4_Location)); } if (v5_Purpose) {set_attribute_value(4, (*v5_Purpose)); } if (v6_IntendedUse) {set_attribute_value(5, (*v6_IntendedUse)); } if (v7_Scope) {set_attribute_value(6, (*v7_Scope)); } if (v8_Revision) {set_attribute_value(7, (*v8_Revision)); }set_attribute_value(8, v9_DocumentOwner ? v9_DocumentOwner->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v10_Editors) {set_attribute_value(9, (*v10_Editors)->generalize()); } if (v11_CreationTime) {set_attribute_value(10, (*v11_CreationTime)); } if (v12_LastRevisionTime) {set_attribute_value(11, (*v12_LastRevisionTime)); } if (v13_ElectronicFormat) {set_attribute_value(12, (*v13_ElectronicFormat)); } if (v14_ValidFrom) {set_attribute_value(13, (*v14_ValidFrom)); } if (v15_ValidUntil) {set_attribute_value(14, (*v15_ValidUntil)); } if (v16_Confidentiality) {set_attribute_value(15, (EnumerationReference(&::Ifc4x3_tc1::IfcDocumentConfidentialityEnum::Class(),(size_t)*v16_Confidentiality))); } if (v17_Status) {set_attribute_value(16, (EnumerationReference(&::Ifc4x3_tc1::IfcDocumentStatusEnum::Class(),(size_t)*v17_Status))); }; populate_derived(); }

// Function implementations for IfcDocumentInformationRelationship
::Ifc4x3_tc1::IfcDocumentInformation* Ifc4x3_tc1::IfcDocumentInformationRelationship::RelatingDocument() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcDocumentInformation>(true); }
void Ifc4x3_tc1::IfcDocumentInformationRelationship::setRelatingDocument(::Ifc4x3_tc1::IfcDocumentInformation* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
aggregate_of< ::Ifc4x3_tc1::IfcDocumentInformation >::ptr Ifc4x3_tc1::IfcDocumentInformationRelationship::RelatedDocuments() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(3); return es->as< ::Ifc4x3_tc1::IfcDocumentInformation >(); }
void Ifc4x3_tc1::IfcDocumentInformationRelationship::setRelatedDocuments(aggregate_of< ::Ifc4x3_tc1::IfcDocumentInformation >::ptr v) { set_attribute_value(3, (v)->generalize());if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcDocumentInformationRelationship::RelationshipType() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcDocumentInformationRelationship::setRelationshipType(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDocumentInformationRelationship::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[331]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDocumentInformationRelationship::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[331]); }
Ifc4x3_tc1::IfcDocumentInformationRelationship::IfcDocumentInformationRelationship(IfcEntityInstanceData&& e) : IfcResourceLevelRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcDocumentInformationRelationship::IfcDocumentInformationRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcDocumentInformation* v3_RelatingDocument, aggregate_of< ::Ifc4x3_tc1::IfcDocumentInformation >::ptr v4_RelatedDocuments, boost::optional< std::string > v5_RelationshipType) : IfcResourceLevelRelationship(IfcEntityInstanceData(storage_t(5))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_RelatingDocument ? v3_RelatingDocument->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_RelatedDocuments)->generalize()); if (v5_RelationshipType) {set_attribute_value(4, (*v5_RelationshipType)); }; populate_derived(); }

// Function implementations for IfcDocumentReference
boost::optional< std::string > Ifc4x3_tc1::IfcDocumentReference::Description() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcDocumentReference::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
::Ifc4x3_tc1::IfcDocumentInformation* Ifc4x3_tc1::IfcDocumentReference::ReferencedDocument() const { if(data_.get_attribute_value(4).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcDocumentInformation>(true); }
void Ifc4x3_tc1::IfcDocumentReference::setReferencedDocument(::Ifc4x3_tc1::IfcDocumentInformation* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }

::Ifc4x3_tc1::IfcRelAssociatesDocument::list::ptr Ifc4x3_tc1::IfcDocumentReference::DocumentRefForObjects() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[910], 5)->as<IfcRelAssociatesDocument>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcDocumentReference::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[332]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDocumentReference::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[332]); }
Ifc4x3_tc1::IfcDocumentReference::IfcDocumentReference(IfcEntityInstanceData&& e) : IfcExternalReference(std::move(e)) { }
Ifc4x3_tc1::IfcDocumentReference::IfcDocumentReference(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcDocumentInformation* v5_ReferencedDocument) : IfcExternalReference(IfcEntityInstanceData(storage_t(5))) {  if (v1_Location) {set_attribute_value(0, (*v1_Location)); } if (v2_Identification) {set_attribute_value(1, (*v2_Identification)); } if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_ReferencedDocument ? v5_ReferencedDocument->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcDoor
boost::optional< double > Ifc4x3_tc1::IfcDoor::OverallHeight() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcDoor::setOverallHeight(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< double > Ifc4x3_tc1::IfcDoor::OverallWidth() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcDoor::setOverallWidth(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< ::Ifc4x3_tc1::IfcDoorTypeEnum::Value > Ifc4x3_tc1::IfcDoor::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDoorTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcDoor::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcDoorTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcDoorTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }
boost::optional< ::Ifc4x3_tc1::IfcDoorTypeOperationEnum::Value > Ifc4x3_tc1::IfcDoor::OperationType() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDoorTypeOperationEnum::FromString(data_.get_attribute_value(11)); }
void Ifc4x3_tc1::IfcDoor::setOperationType(boost::optional< ::Ifc4x3_tc1::IfcDoorTypeOperationEnum::Value > v) { if (v) {set_attribute_value(11, EnumerationReference(&::Ifc4x3_tc1::IfcDoorTypeOperationEnum::Class(), (size_t) *v));} else {unset_attribute_value(11);} }
boost::optional< std::string > Ifc4x3_tc1::IfcDoor::UserDefinedOperationType() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcDoor::setUserDefinedOperationType(boost::optional< std::string > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDoor::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[335]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDoor::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[335]); }
Ifc4x3_tc1::IfcDoor::IfcDoor(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcDoor::IfcDoor(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< double > v9_OverallHeight, boost::optional< double > v10_OverallWidth, boost::optional< ::Ifc4x3_tc1::IfcDoorTypeEnum::Value > v11_PredefinedType, boost::optional< ::Ifc4x3_tc1::IfcDoorTypeOperationEnum::Value > v12_OperationType, boost::optional< std::string > v13_UserDefinedOperationType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(13))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_OverallHeight) {set_attribute_value(8, (*v9_OverallHeight)); } if (v10_OverallWidth) {set_attribute_value(9, (*v10_OverallWidth)); } if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcDoorTypeEnum::Class(),(size_t)*v11_PredefinedType))); } if (v12_OperationType) {set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcDoorTypeOperationEnum::Class(),(size_t)*v12_OperationType))); } if (v13_UserDefinedOperationType) {set_attribute_value(12, (*v13_UserDefinedOperationType)); }; populate_derived(); }

// Function implementations for IfcDoorLiningProperties
boost::optional< double > Ifc4x3_tc1::IfcDoorLiningProperties::LiningDepth() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcDoorLiningProperties::setLiningDepth(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< double > Ifc4x3_tc1::IfcDoorLiningProperties::LiningThickness() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcDoorLiningProperties::setLiningThickness(boost::optional< double > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< double > Ifc4x3_tc1::IfcDoorLiningProperties::ThresholdDepth() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcDoorLiningProperties::setThresholdDepth(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< double > Ifc4x3_tc1::IfcDoorLiningProperties::ThresholdThickness() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcDoorLiningProperties::setThresholdThickness(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< double > Ifc4x3_tc1::IfcDoorLiningProperties::TransomThickness() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcDoorLiningProperties::setTransomThickness(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< double > Ifc4x3_tc1::IfcDoorLiningProperties::TransomOffset() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcDoorLiningProperties::setTransomOffset(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< double > Ifc4x3_tc1::IfcDoorLiningProperties::LiningOffset() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcDoorLiningProperties::setLiningOffset(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< double > Ifc4x3_tc1::IfcDoorLiningProperties::ThresholdOffset() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcDoorLiningProperties::setThresholdOffset(boost::optional< double > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< double > Ifc4x3_tc1::IfcDoorLiningProperties::CasingThickness() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } double v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcDoorLiningProperties::setCasingThickness(boost::optional< double > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }
boost::optional< double > Ifc4x3_tc1::IfcDoorLiningProperties::CasingDepth() const { if(data_.get_attribute_value(13).isNull()) { return boost::none; } double v = data_.get_attribute_value(13); return v; }
void Ifc4x3_tc1::IfcDoorLiningProperties::setCasingDepth(boost::optional< double > v) { if (v) {set_attribute_value(13, *v);} else {unset_attribute_value(13);} }
::Ifc4x3_tc1::IfcShapeAspect* Ifc4x3_tc1::IfcDoorLiningProperties::ShapeAspectStyle() const { if(data_.get_attribute_value(14).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(14)))->as<::Ifc4x3_tc1::IfcShapeAspect>(true); }
void Ifc4x3_tc1::IfcDoorLiningProperties::setShapeAspectStyle(::Ifc4x3_tc1::IfcShapeAspect* v) { set_attribute_value(14, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(14); }
boost::optional< double > Ifc4x3_tc1::IfcDoorLiningProperties::LiningToPanelOffsetX() const { if(data_.get_attribute_value(15).isNull()) { return boost::none; } double v = data_.get_attribute_value(15); return v; }
void Ifc4x3_tc1::IfcDoorLiningProperties::setLiningToPanelOffsetX(boost::optional< double > v) { if (v) {set_attribute_value(15, *v);} else {unset_attribute_value(15);} }
boost::optional< double > Ifc4x3_tc1::IfcDoorLiningProperties::LiningToPanelOffsetY() const { if(data_.get_attribute_value(16).isNull()) { return boost::none; } double v = data_.get_attribute_value(16); return v; }
void Ifc4x3_tc1::IfcDoorLiningProperties::setLiningToPanelOffsetY(boost::optional< double > v) { if (v) {set_attribute_value(16, *v);} else {unset_attribute_value(16);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDoorLiningProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[336]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDoorLiningProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[336]); }
Ifc4x3_tc1::IfcDoorLiningProperties::IfcDoorLiningProperties(IfcEntityInstanceData&& e) : IfcPreDefinedPropertySet(std::move(e)) { }
Ifc4x3_tc1::IfcDoorLiningProperties::IfcDoorLiningProperties(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< double > v5_LiningDepth, boost::optional< double > v6_LiningThickness, boost::optional< double > v7_ThresholdDepth, boost::optional< double > v8_ThresholdThickness, boost::optional< double > v9_TransomThickness, boost::optional< double > v10_TransomOffset, boost::optional< double > v11_LiningOffset, boost::optional< double > v12_ThresholdOffset, boost::optional< double > v13_CasingThickness, boost::optional< double > v14_CasingDepth, ::Ifc4x3_tc1::IfcShapeAspect* v15_ShapeAspectStyle, boost::optional< double > v16_LiningToPanelOffsetX, boost::optional< double > v17_LiningToPanelOffsetY) : IfcPreDefinedPropertySet(IfcEntityInstanceData(storage_t(17))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_LiningDepth) {set_attribute_value(4, (*v5_LiningDepth)); } if (v6_LiningThickness) {set_attribute_value(5, (*v6_LiningThickness)); } if (v7_ThresholdDepth) {set_attribute_value(6, (*v7_ThresholdDepth)); } if (v8_ThresholdThickness) {set_attribute_value(7, (*v8_ThresholdThickness)); } if (v9_TransomThickness) {set_attribute_value(8, (*v9_TransomThickness)); } if (v10_TransomOffset) {set_attribute_value(9, (*v10_TransomOffset)); } if (v11_LiningOffset) {set_attribute_value(10, (*v11_LiningOffset)); } if (v12_ThresholdOffset) {set_attribute_value(11, (*v12_ThresholdOffset)); } if (v13_CasingThickness) {set_attribute_value(12, (*v13_CasingThickness)); } if (v14_CasingDepth) {set_attribute_value(13, (*v14_CasingDepth)); }set_attribute_value(14, v15_ShapeAspectStyle ? v15_ShapeAspectStyle->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v16_LiningToPanelOffsetX) {set_attribute_value(15, (*v16_LiningToPanelOffsetX)); } if (v17_LiningToPanelOffsetY) {set_attribute_value(16, (*v17_LiningToPanelOffsetY)); }; populate_derived(); }

// Function implementations for IfcDoorPanelProperties
boost::optional< double > Ifc4x3_tc1::IfcDoorPanelProperties::PanelDepth() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcDoorPanelProperties::setPanelDepth(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
::Ifc4x3_tc1::IfcDoorPanelOperationEnum::Value Ifc4x3_tc1::IfcDoorPanelProperties::PanelOperation() const {  return ::Ifc4x3_tc1::IfcDoorPanelOperationEnum::FromString(data_.get_attribute_value(5)); }
void Ifc4x3_tc1::IfcDoorPanelProperties::setPanelOperation(::Ifc4x3_tc1::IfcDoorPanelOperationEnum::Value v) { set_attribute_value(5, EnumerationReference(&::Ifc4x3_tc1::IfcDoorPanelOperationEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(5); }
boost::optional< double > Ifc4x3_tc1::IfcDoorPanelProperties::PanelWidth() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcDoorPanelProperties::setPanelWidth(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
::Ifc4x3_tc1::IfcDoorPanelPositionEnum::Value Ifc4x3_tc1::IfcDoorPanelProperties::PanelPosition() const {  return ::Ifc4x3_tc1::IfcDoorPanelPositionEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcDoorPanelProperties::setPanelPosition(::Ifc4x3_tc1::IfcDoorPanelPositionEnum::Value v) { set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcDoorPanelPositionEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(7); }
::Ifc4x3_tc1::IfcShapeAspect* Ifc4x3_tc1::IfcDoorPanelProperties::ShapeAspectStyle() const { if(data_.get_attribute_value(8).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(8)))->as<::Ifc4x3_tc1::IfcShapeAspect>(true); }
void Ifc4x3_tc1::IfcDoorPanelProperties::setShapeAspectStyle(::Ifc4x3_tc1::IfcShapeAspect* v) { set_attribute_value(8, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcDoorPanelProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[339]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDoorPanelProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[339]); }
Ifc4x3_tc1::IfcDoorPanelProperties::IfcDoorPanelProperties(IfcEntityInstanceData&& e) : IfcPreDefinedPropertySet(std::move(e)) { }
Ifc4x3_tc1::IfcDoorPanelProperties::IfcDoorPanelProperties(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< double > v5_PanelDepth, ::Ifc4x3_tc1::IfcDoorPanelOperationEnum::Value v6_PanelOperation, boost::optional< double > v7_PanelWidth, ::Ifc4x3_tc1::IfcDoorPanelPositionEnum::Value v8_PanelPosition, ::Ifc4x3_tc1::IfcShapeAspect* v9_ShapeAspectStyle) : IfcPreDefinedPropertySet(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_PanelDepth) {set_attribute_value(4, (*v5_PanelDepth)); }set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcDoorPanelOperationEnum::Class(),(size_t)v6_PanelOperation))); if (v7_PanelWidth) {set_attribute_value(6, (*v7_PanelWidth)); }set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcDoorPanelPositionEnum::Class(),(size_t)v8_PanelPosition)));set_attribute_value(8, v9_ShapeAspectStyle ? v9_ShapeAspectStyle->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcDoorType
::Ifc4x3_tc1::IfcDoorTypeEnum::Value Ifc4x3_tc1::IfcDoorType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcDoorTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcDoorType::setPredefinedType(::Ifc4x3_tc1::IfcDoorTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcDoorTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }
::Ifc4x3_tc1::IfcDoorTypeOperationEnum::Value Ifc4x3_tc1::IfcDoorType::OperationType() const {  return ::Ifc4x3_tc1::IfcDoorTypeOperationEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcDoorType::setOperationType(::Ifc4x3_tc1::IfcDoorTypeOperationEnum::Value v) { set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcDoorTypeOperationEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(10); }
boost::optional< bool > Ifc4x3_tc1::IfcDoorType::ParameterTakesPrecedence() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } bool v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcDoorType::setParameterTakesPrecedence(boost::optional< bool > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< std::string > Ifc4x3_tc1::IfcDoorType::UserDefinedOperationType() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcDoorType::setUserDefinedOperationType(boost::optional< std::string > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDoorType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[340]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDoorType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[340]); }
Ifc4x3_tc1::IfcDoorType::IfcDoorType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcDoorType::IfcDoorType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcDoorTypeEnum::Value v10_PredefinedType, ::Ifc4x3_tc1::IfcDoorTypeOperationEnum::Value v11_OperationType, boost::optional< bool > v12_ParameterTakesPrecedence, boost::optional< std::string > v13_UserDefinedOperationType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(13))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcDoorTypeEnum::Class(),(size_t)v10_PredefinedType)));set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcDoorTypeOperationEnum::Class(),(size_t)v11_OperationType))); if (v12_ParameterTakesPrecedence) {set_attribute_value(11, (*v12_ParameterTakesPrecedence)); } if (v13_UserDefinedOperationType) {set_attribute_value(12, (*v13_UserDefinedOperationType)); }; populate_derived(); }

// Function implementations for IfcDraughtingPreDefinedColour


const IfcParse::entity& Ifc4x3_tc1::IfcDraughtingPreDefinedColour::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[344]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDraughtingPreDefinedColour::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[344]); }
Ifc4x3_tc1::IfcDraughtingPreDefinedColour::IfcDraughtingPreDefinedColour(IfcEntityInstanceData&& e) : IfcPreDefinedColour(std::move(e)) { }
Ifc4x3_tc1::IfcDraughtingPreDefinedColour::IfcDraughtingPreDefinedColour(std::string v1_Name) : IfcPreDefinedColour(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Name));; populate_derived(); }

// Function implementations for IfcDraughtingPreDefinedCurveFont


const IfcParse::entity& Ifc4x3_tc1::IfcDraughtingPreDefinedCurveFont::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[345]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDraughtingPreDefinedCurveFont::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[345]); }
Ifc4x3_tc1::IfcDraughtingPreDefinedCurveFont::IfcDraughtingPreDefinedCurveFont(IfcEntityInstanceData&& e) : IfcPreDefinedCurveFont(std::move(e)) { }
Ifc4x3_tc1::IfcDraughtingPreDefinedCurveFont::IfcDraughtingPreDefinedCurveFont(std::string v1_Name) : IfcPreDefinedCurveFont(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Name));; populate_derived(); }

// Function implementations for IfcDuctFitting
boost::optional< ::Ifc4x3_tc1::IfcDuctFittingTypeEnum::Value > Ifc4x3_tc1::IfcDuctFitting::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDuctFittingTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcDuctFitting::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcDuctFittingTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcDuctFittingTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDuctFitting::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[346]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDuctFitting::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[346]); }
Ifc4x3_tc1::IfcDuctFitting::IfcDuctFitting(IfcEntityInstanceData&& e) : IfcFlowFitting(std::move(e)) { }
Ifc4x3_tc1::IfcDuctFitting::IfcDuctFitting(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcDuctFittingTypeEnum::Value > v9_PredefinedType) : IfcFlowFitting(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcDuctFittingTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcDuctFittingType
::Ifc4x3_tc1::IfcDuctFittingTypeEnum::Value Ifc4x3_tc1::IfcDuctFittingType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcDuctFittingTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcDuctFittingType::setPredefinedType(::Ifc4x3_tc1::IfcDuctFittingTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcDuctFittingTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcDuctFittingType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[347]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDuctFittingType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[347]); }
Ifc4x3_tc1::IfcDuctFittingType::IfcDuctFittingType(IfcEntityInstanceData&& e) : IfcFlowFittingType(std::move(e)) { }
Ifc4x3_tc1::IfcDuctFittingType::IfcDuctFittingType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcDuctFittingTypeEnum::Value v10_PredefinedType) : IfcFlowFittingType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcDuctFittingTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcDuctSegment
boost::optional< ::Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Value > Ifc4x3_tc1::IfcDuctSegment::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDuctSegmentTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcDuctSegment::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDuctSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[349]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDuctSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[349]); }
Ifc4x3_tc1::IfcDuctSegment::IfcDuctSegment(IfcEntityInstanceData&& e) : IfcFlowSegment(std::move(e)) { }
Ifc4x3_tc1::IfcDuctSegment::IfcDuctSegment(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Value > v9_PredefinedType) : IfcFlowSegment(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcDuctSegmentType
::Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Value Ifc4x3_tc1::IfcDuctSegmentType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcDuctSegmentTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcDuctSegmentType::setPredefinedType(::Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcDuctSegmentType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[350]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDuctSegmentType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[350]); }
Ifc4x3_tc1::IfcDuctSegmentType::IfcDuctSegmentType(IfcEntityInstanceData&& e) : IfcFlowSegmentType(std::move(e)) { }
Ifc4x3_tc1::IfcDuctSegmentType::IfcDuctSegmentType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Value v10_PredefinedType) : IfcFlowSegmentType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcDuctSegmentTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcDuctSilencer
boost::optional< ::Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Value > Ifc4x3_tc1::IfcDuctSilencer::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDuctSilencerTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcDuctSilencer::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcDuctSilencer::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[352]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDuctSilencer::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[352]); }
Ifc4x3_tc1::IfcDuctSilencer::IfcDuctSilencer(IfcEntityInstanceData&& e) : IfcFlowTreatmentDevice(std::move(e)) { }
Ifc4x3_tc1::IfcDuctSilencer::IfcDuctSilencer(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Value > v9_PredefinedType) : IfcFlowTreatmentDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcDuctSilencerType
::Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Value Ifc4x3_tc1::IfcDuctSilencerType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcDuctSilencerTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcDuctSilencerType::setPredefinedType(::Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcDuctSilencerType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[353]); }
const IfcParse::entity& Ifc4x3_tc1::IfcDuctSilencerType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[353]); }
Ifc4x3_tc1::IfcDuctSilencerType::IfcDuctSilencerType(IfcEntityInstanceData&& e) : IfcFlowTreatmentDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcDuctSilencerType::IfcDuctSilencerType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Value v10_PredefinedType) : IfcFlowTreatmentDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcDuctSilencerTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcEarthworksCut
boost::optional< ::Ifc4x3_tc1::IfcEarthworksCutTypeEnum::Value > Ifc4x3_tc1::IfcEarthworksCut::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcEarthworksCutTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcEarthworksCut::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcEarthworksCutTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcEarthworksCutTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcEarthworksCut::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[357]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEarthworksCut::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[357]); }
Ifc4x3_tc1::IfcEarthworksCut::IfcEarthworksCut(IfcEntityInstanceData&& e) : IfcFeatureElementSubtraction(std::move(e)) { }
Ifc4x3_tc1::IfcEarthworksCut::IfcEarthworksCut(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcEarthworksCutTypeEnum::Value > v9_PredefinedType) : IfcFeatureElementSubtraction(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcEarthworksCutTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcEarthworksElement


const IfcParse::entity& Ifc4x3_tc1::IfcEarthworksElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[359]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEarthworksElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[359]); }
Ifc4x3_tc1::IfcEarthworksElement::IfcEarthworksElement(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcEarthworksElement::IfcEarthworksElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcBuiltElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcEarthworksFill
boost::optional< ::Ifc4x3_tc1::IfcEarthworksFillTypeEnum::Value > Ifc4x3_tc1::IfcEarthworksFill::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcEarthworksFillTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcEarthworksFill::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcEarthworksFillTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcEarthworksFillTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcEarthworksFill::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[360]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEarthworksFill::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[360]); }
Ifc4x3_tc1::IfcEarthworksFill::IfcEarthworksFill(IfcEntityInstanceData&& e) : IfcEarthworksElement(std::move(e)) { }
Ifc4x3_tc1::IfcEarthworksFill::IfcEarthworksFill(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcEarthworksFillTypeEnum::Value > v9_PredefinedType) : IfcEarthworksElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcEarthworksFillTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcEdge
::Ifc4x3_tc1::IfcVertex* Ifc4x3_tc1::IfcEdge::EdgeStart() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcVertex>(true); }
void Ifc4x3_tc1::IfcEdge::setEdgeStart(::Ifc4x3_tc1::IfcVertex* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcVertex* Ifc4x3_tc1::IfcEdge::EdgeEnd() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcVertex>(true); }
void Ifc4x3_tc1::IfcEdge::setEdgeEnd(::Ifc4x3_tc1::IfcVertex* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcEdge::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[362]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEdge::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[362]); }
Ifc4x3_tc1::IfcEdge::IfcEdge(IfcEntityInstanceData&& e) : IfcTopologicalRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcEdge::IfcEdge(::Ifc4x3_tc1::IfcVertex* v1_EdgeStart, ::Ifc4x3_tc1::IfcVertex* v2_EdgeEnd) : IfcTopologicalRepresentationItem(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_EdgeStart ? v1_EdgeStart->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_EdgeEnd ? v2_EdgeEnd->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcEdgeCurve
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcEdgeCurve::EdgeGeometry() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcEdgeCurve::setEdgeGeometry(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
bool Ifc4x3_tc1::IfcEdgeCurve::SameSense() const {  bool v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcEdgeCurve::setSameSense(bool v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcEdgeCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[363]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEdgeCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[363]); }
Ifc4x3_tc1::IfcEdgeCurve::IfcEdgeCurve(IfcEntityInstanceData&& e) : IfcEdge(std::move(e)) { }
Ifc4x3_tc1::IfcEdgeCurve::IfcEdgeCurve(::Ifc4x3_tc1::IfcVertex* v1_EdgeStart, ::Ifc4x3_tc1::IfcVertex* v2_EdgeEnd, ::Ifc4x3_tc1::IfcCurve* v3_EdgeGeometry, bool v4_SameSense) : IfcEdge(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_EdgeStart ? v1_EdgeStart->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_EdgeEnd ? v2_EdgeEnd->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_EdgeGeometry ? v3_EdgeGeometry->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_SameSense));; populate_derived(); }

// Function implementations for IfcEdgeLoop
aggregate_of< ::Ifc4x3_tc1::IfcOrientedEdge >::ptr Ifc4x3_tc1::IfcEdgeLoop::EdgeList() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcOrientedEdge >(); }
void Ifc4x3_tc1::IfcEdgeLoop::setEdgeList(aggregate_of< ::Ifc4x3_tc1::IfcOrientedEdge >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcEdgeLoop::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[364]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEdgeLoop::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[364]); }
Ifc4x3_tc1::IfcEdgeLoop::IfcEdgeLoop(IfcEntityInstanceData&& e) : IfcLoop(std::move(e)) { }
Ifc4x3_tc1::IfcEdgeLoop::IfcEdgeLoop(aggregate_of< ::Ifc4x3_tc1::IfcOrientedEdge >::ptr v1_EdgeList) : IfcLoop(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_EdgeList)->generalize());; populate_derived(); }

// Function implementations for IfcElectricAppliance
boost::optional< ::Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Value > Ifc4x3_tc1::IfcElectricAppliance::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcElectricApplianceTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcElectricAppliance::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricAppliance::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[365]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricAppliance::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[365]); }
Ifc4x3_tc1::IfcElectricAppliance::IfcElectricAppliance(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcElectricAppliance::IfcElectricAppliance(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcElectricApplianceType
::Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Value Ifc4x3_tc1::IfcElectricApplianceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcElectricApplianceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcElectricApplianceType::setPredefinedType(::Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricApplianceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[366]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricApplianceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[366]); }
Ifc4x3_tc1::IfcElectricApplianceType::IfcElectricApplianceType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcElectricApplianceType::IfcElectricApplianceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricApplianceTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcElectricDistributionBoard
boost::optional< ::Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Value > Ifc4x3_tc1::IfcElectricDistributionBoard::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcElectricDistributionBoard::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricDistributionBoard::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[372]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricDistributionBoard::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[372]); }
Ifc4x3_tc1::IfcElectricDistributionBoard::IfcElectricDistributionBoard(IfcEntityInstanceData&& e) : IfcFlowController(std::move(e)) { }
Ifc4x3_tc1::IfcElectricDistributionBoard::IfcElectricDistributionBoard(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Value > v9_PredefinedType) : IfcFlowController(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcElectricDistributionBoardType
::Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Value Ifc4x3_tc1::IfcElectricDistributionBoardType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcElectricDistributionBoardType::setPredefinedType(::Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricDistributionBoardType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[373]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricDistributionBoardType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[373]); }
Ifc4x3_tc1::IfcElectricDistributionBoardType::IfcElectricDistributionBoardType(IfcEntityInstanceData&& e) : IfcFlowControllerType(std::move(e)) { }
Ifc4x3_tc1::IfcElectricDistributionBoardType::IfcElectricDistributionBoardType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricDistributionBoardTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcElectricFlowStorageDevice
boost::optional< ::Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Value > Ifc4x3_tc1::IfcElectricFlowStorageDevice::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcElectricFlowStorageDevice::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricFlowStorageDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[375]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricFlowStorageDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[375]); }
Ifc4x3_tc1::IfcElectricFlowStorageDevice::IfcElectricFlowStorageDevice(IfcEntityInstanceData&& e) : IfcFlowStorageDevice(std::move(e)) { }
Ifc4x3_tc1::IfcElectricFlowStorageDevice::IfcElectricFlowStorageDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Value > v9_PredefinedType) : IfcFlowStorageDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcElectricFlowStorageDeviceType
::Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Value Ifc4x3_tc1::IfcElectricFlowStorageDeviceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcElectricFlowStorageDeviceType::setPredefinedType(::Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricFlowStorageDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[376]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricFlowStorageDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[376]); }
Ifc4x3_tc1::IfcElectricFlowStorageDeviceType::IfcElectricFlowStorageDeviceType(IfcEntityInstanceData&& e) : IfcFlowStorageDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcElectricFlowStorageDeviceType::IfcElectricFlowStorageDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Value v10_PredefinedType) : IfcFlowStorageDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricFlowStorageDeviceTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcElectricFlowTreatmentDevice
boost::optional< ::Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Value > Ifc4x3_tc1::IfcElectricFlowTreatmentDevice::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcElectricFlowTreatmentDevice::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricFlowTreatmentDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[378]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricFlowTreatmentDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[378]); }
Ifc4x3_tc1::IfcElectricFlowTreatmentDevice::IfcElectricFlowTreatmentDevice(IfcEntityInstanceData&& e) : IfcFlowTreatmentDevice(std::move(e)) { }
Ifc4x3_tc1::IfcElectricFlowTreatmentDevice::IfcElectricFlowTreatmentDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Value > v9_PredefinedType) : IfcFlowTreatmentDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcElectricFlowTreatmentDeviceType
::Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Value Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceType::setPredefinedType(::Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[379]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[379]); }
Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceType::IfcElectricFlowTreatmentDeviceType(IfcEntityInstanceData&& e) : IfcFlowTreatmentDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceType::IfcElectricFlowTreatmentDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Value v10_PredefinedType) : IfcFlowTreatmentDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricFlowTreatmentDeviceTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcElectricGenerator
boost::optional< ::Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Value > Ifc4x3_tc1::IfcElectricGenerator::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcElectricGenerator::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricGenerator::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[381]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricGenerator::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[381]); }
Ifc4x3_tc1::IfcElectricGenerator::IfcElectricGenerator(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcElectricGenerator::IfcElectricGenerator(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcElectricGeneratorType
::Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Value Ifc4x3_tc1::IfcElectricGeneratorType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcElectricGeneratorType::setPredefinedType(::Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricGeneratorType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[382]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricGeneratorType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[382]); }
Ifc4x3_tc1::IfcElectricGeneratorType::IfcElectricGeneratorType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcElectricGeneratorType::IfcElectricGeneratorType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricGeneratorTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcElectricMotor
boost::optional< ::Ifc4x3_tc1::IfcElectricMotorTypeEnum::Value > Ifc4x3_tc1::IfcElectricMotor::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcElectricMotorTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcElectricMotor::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcElectricMotorTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcElectricMotorTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricMotor::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[384]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricMotor::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[384]); }
Ifc4x3_tc1::IfcElectricMotor::IfcElectricMotor(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcElectricMotor::IfcElectricMotor(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcElectricMotorTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricMotorTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcElectricMotorType
::Ifc4x3_tc1::IfcElectricMotorTypeEnum::Value Ifc4x3_tc1::IfcElectricMotorType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcElectricMotorTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcElectricMotorType::setPredefinedType(::Ifc4x3_tc1::IfcElectricMotorTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcElectricMotorTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricMotorType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[385]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricMotorType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[385]); }
Ifc4x3_tc1::IfcElectricMotorType::IfcElectricMotorType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcElectricMotorType::IfcElectricMotorType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcElectricMotorTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricMotorTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcElectricTimeControl
boost::optional< ::Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Value > Ifc4x3_tc1::IfcElectricTimeControl::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcElectricTimeControl::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricTimeControl::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[388]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricTimeControl::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[388]); }
Ifc4x3_tc1::IfcElectricTimeControl::IfcElectricTimeControl(IfcEntityInstanceData&& e) : IfcFlowController(std::move(e)) { }
Ifc4x3_tc1::IfcElectricTimeControl::IfcElectricTimeControl(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Value > v9_PredefinedType) : IfcFlowController(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcElectricTimeControlType
::Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Value Ifc4x3_tc1::IfcElectricTimeControlType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcElectricTimeControlType::setPredefinedType(::Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcElectricTimeControlType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[389]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElectricTimeControlType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[389]); }
Ifc4x3_tc1::IfcElectricTimeControlType::IfcElectricTimeControlType(IfcEntityInstanceData&& e) : IfcFlowControllerType(std::move(e)) { }
Ifc4x3_tc1::IfcElectricTimeControlType::IfcElectricTimeControlType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcElectricTimeControlTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcElement
boost::optional< std::string > Ifc4x3_tc1::IfcElement::Tag() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcElement::setTag(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }

::Ifc4x3_tc1::IfcRelFillsElement::list::ptr Ifc4x3_tc1::IfcElement::FillsVoids() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[934], 5)->as<IfcRelFillsElement>(); }
::Ifc4x3_tc1::IfcRelConnectsElements::list::ptr Ifc4x3_tc1::IfcElement::ConnectedTo() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[916], 5)->as<IfcRelConnectsElements>(); }
::Ifc4x3_tc1::IfcRelInterferesElements::list::ptr Ifc4x3_tc1::IfcElement::IsInterferedByElements() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[936], 5)->as<IfcRelInterferesElements>(); }
::Ifc4x3_tc1::IfcRelInterferesElements::list::ptr Ifc4x3_tc1::IfcElement::InterferesElements() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[936], 4)->as<IfcRelInterferesElements>(); }
::Ifc4x3_tc1::IfcRelProjectsElement::list::ptr Ifc4x3_tc1::IfcElement::HasProjections() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[939], 4)->as<IfcRelProjectsElement>(); }
::Ifc4x3_tc1::IfcRelVoidsElement::list::ptr Ifc4x3_tc1::IfcElement::HasOpenings() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[946], 4)->as<IfcRelVoidsElement>(); }
::Ifc4x3_tc1::IfcRelConnectsWithRealizingElements::list::ptr Ifc4x3_tc1::IfcElement::IsConnectionRealization() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[923], 7)->as<IfcRelConnectsWithRealizingElements>(); }
::Ifc4x3_tc1::IfcRelSpaceBoundary::list::ptr Ifc4x3_tc1::IfcElement::ProvidesBoundaries() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[943], 5)->as<IfcRelSpaceBoundary>(); }
::Ifc4x3_tc1::IfcRelConnectsElements::list::ptr Ifc4x3_tc1::IfcElement::ConnectedFrom() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[916], 6)->as<IfcRelConnectsElements>(); }
::Ifc4x3_tc1::IfcRelContainedInSpatialStructure::list::ptr Ifc4x3_tc1::IfcElement::ContainedInStructure() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[924], 4)->as<IfcRelContainedInSpatialStructure>(); }
::Ifc4x3_tc1::IfcRelCoversBldgElements::list::ptr Ifc4x3_tc1::IfcElement::HasCoverings() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[925], 4)->as<IfcRelCoversBldgElements>(); }
::Ifc4x3_tc1::IfcRelAdheresToElement::list::ptr Ifc4x3_tc1::IfcElement::HasSurfaceFeatures() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[896], 4)->as<IfcRelAdheresToElement>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[392]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[392]); }
Ifc4x3_tc1::IfcElement::IfcElement(IfcEntityInstanceData&& e) : IfcProduct(std::move(e)) { }
Ifc4x3_tc1::IfcElement::IfcElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcProduct(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcElementAssembly
boost::optional< ::Ifc4x3_tc1::IfcAssemblyPlaceEnum::Value > Ifc4x3_tc1::IfcElementAssembly::AssemblyPlace() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcAssemblyPlaceEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcElementAssembly::setAssemblyPlace(boost::optional< ::Ifc4x3_tc1::IfcAssemblyPlaceEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcAssemblyPlaceEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }
boost::optional< ::Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Value > Ifc4x3_tc1::IfcElementAssembly::PredefinedType() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcElementAssemblyTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcElementAssembly::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Value > v) { if (v) {set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcElementAssembly::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[394]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElementAssembly::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[394]); }
Ifc4x3_tc1::IfcElementAssembly::IfcElementAssembly(IfcEntityInstanceData&& e) : IfcElement(std::move(e)) { }
Ifc4x3_tc1::IfcElementAssembly::IfcElementAssembly(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcAssemblyPlaceEnum::Value > v9_AssemblyPlace, boost::optional< ::Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Value > v10_PredefinedType) : IfcElement(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_AssemblyPlace) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcAssemblyPlaceEnum::Class(),(size_t)*v9_AssemblyPlace))); } if (v10_PredefinedType) {set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Class(),(size_t)*v10_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcElementAssemblyType
::Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Value Ifc4x3_tc1::IfcElementAssemblyType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcElementAssemblyTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcElementAssemblyType::setPredefinedType(::Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcElementAssemblyType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[395]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElementAssemblyType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[395]); }
Ifc4x3_tc1::IfcElementAssemblyType::IfcElementAssemblyType(IfcEntityInstanceData&& e) : IfcElementType(std::move(e)) { }
Ifc4x3_tc1::IfcElementAssemblyType::IfcElementAssemblyType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Value v10_PredefinedType) : IfcElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcElementAssemblyTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcElementComponent


const IfcParse::entity& Ifc4x3_tc1::IfcElementComponent::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[397]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElementComponent::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[397]); }
Ifc4x3_tc1::IfcElementComponent::IfcElementComponent(IfcEntityInstanceData&& e) : IfcElement(std::move(e)) { }
Ifc4x3_tc1::IfcElementComponent::IfcElementComponent(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcElementComponentType


const IfcParse::entity& Ifc4x3_tc1::IfcElementComponentType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[398]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElementComponentType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[398]); }
Ifc4x3_tc1::IfcElementComponentType::IfcElementComponentType(IfcEntityInstanceData&& e) : IfcElementType(std::move(e)) { }
Ifc4x3_tc1::IfcElementComponentType::IfcElementComponentType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcElementQuantity
boost::optional< std::string > Ifc4x3_tc1::IfcElementQuantity::MethodOfMeasurement() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcElementQuantity::setMethodOfMeasurement(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
aggregate_of< ::Ifc4x3_tc1::IfcPhysicalQuantity >::ptr Ifc4x3_tc1::IfcElementQuantity::Quantities() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(5); return es->as< ::Ifc4x3_tc1::IfcPhysicalQuantity >(); }
void Ifc4x3_tc1::IfcElementQuantity::setQuantities(aggregate_of< ::Ifc4x3_tc1::IfcPhysicalQuantity >::ptr v) { set_attribute_value(5, (v)->generalize());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcElementQuantity::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[400]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElementQuantity::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[400]); }
Ifc4x3_tc1::IfcElementQuantity::IfcElementQuantity(IfcEntityInstanceData&& e) : IfcQuantitySet(std::move(e)) { }
Ifc4x3_tc1::IfcElementQuantity::IfcElementQuantity(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_MethodOfMeasurement, aggregate_of< ::Ifc4x3_tc1::IfcPhysicalQuantity >::ptr v6_Quantities) : IfcQuantitySet(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_MethodOfMeasurement) {set_attribute_value(4, (*v5_MethodOfMeasurement)); }set_attribute_value(5, (v6_Quantities)->generalize());; populate_derived(); }

// Function implementations for IfcElementType
boost::optional< std::string > Ifc4x3_tc1::IfcElementType::ElementType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcElementType::setElementType(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[401]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[401]); }
Ifc4x3_tc1::IfcElementType::IfcElementType(IfcEntityInstanceData&& e) : IfcTypeProduct(std::move(e)) { }
Ifc4x3_tc1::IfcElementType::IfcElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcTypeProduct(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcElementarySurface
::Ifc4x3_tc1::IfcAxis2Placement3D* Ifc4x3_tc1::IfcElementarySurface::Position() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcAxis2Placement3D>(true); }
void Ifc4x3_tc1::IfcElementarySurface::setPosition(::Ifc4x3_tc1::IfcAxis2Placement3D* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcElementarySurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[393]); }
const IfcParse::entity& Ifc4x3_tc1::IfcElementarySurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[393]); }
Ifc4x3_tc1::IfcElementarySurface::IfcElementarySurface(IfcEntityInstanceData&& e) : IfcSurface(std::move(e)) { }
Ifc4x3_tc1::IfcElementarySurface::IfcElementarySurface(::Ifc4x3_tc1::IfcAxis2Placement3D* v1_Position) : IfcSurface(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcEllipse
double Ifc4x3_tc1::IfcEllipse::SemiAxis1() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcEllipse::setSemiAxis1(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
double Ifc4x3_tc1::IfcEllipse::SemiAxis2() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcEllipse::setSemiAxis2(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcEllipse::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[402]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEllipse::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[402]); }
Ifc4x3_tc1::IfcEllipse::IfcEllipse(IfcEntityInstanceData&& e) : IfcConic(std::move(e)) { }
Ifc4x3_tc1::IfcEllipse::IfcEllipse(::Ifc4x3_tc1::IfcAxis2Placement* v1_Position, double v2_SemiAxis1, double v3_SemiAxis2) : IfcConic(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_SemiAxis1));set_attribute_value(2, (v3_SemiAxis2));; populate_derived(); }

// Function implementations for IfcEllipseProfileDef
double Ifc4x3_tc1::IfcEllipseProfileDef::SemiAxis1() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcEllipseProfileDef::setSemiAxis1(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcEllipseProfileDef::SemiAxis2() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcEllipseProfileDef::setSemiAxis2(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcEllipseProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[403]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEllipseProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[403]); }
Ifc4x3_tc1::IfcEllipseProfileDef::IfcEllipseProfileDef(IfcEntityInstanceData&& e) : IfcParameterizedProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcEllipseProfileDef::IfcEllipseProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_SemiAxis1, double v5_SemiAxis2) : IfcParameterizedProfileDef(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_SemiAxis1));set_attribute_value(4, (v5_SemiAxis2));; populate_derived(); }

// Function implementations for IfcEnergyConversionDevice


const IfcParse::entity& Ifc4x3_tc1::IfcEnergyConversionDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[404]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEnergyConversionDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[404]); }
Ifc4x3_tc1::IfcEnergyConversionDevice::IfcEnergyConversionDevice(IfcEntityInstanceData&& e) : IfcDistributionFlowElement(std::move(e)) { }
Ifc4x3_tc1::IfcEnergyConversionDevice::IfcEnergyConversionDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcEnergyConversionDeviceType


const IfcParse::entity& Ifc4x3_tc1::IfcEnergyConversionDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[405]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEnergyConversionDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[405]); }
Ifc4x3_tc1::IfcEnergyConversionDeviceType::IfcEnergyConversionDeviceType(IfcEntityInstanceData&& e) : IfcDistributionFlowElementType(std::move(e)) { }
Ifc4x3_tc1::IfcEnergyConversionDeviceType::IfcEnergyConversionDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcEngine
boost::optional< ::Ifc4x3_tc1::IfcEngineTypeEnum::Value > Ifc4x3_tc1::IfcEngine::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcEngineTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcEngine::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcEngineTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcEngineTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcEngine::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[407]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEngine::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[407]); }
Ifc4x3_tc1::IfcEngine::IfcEngine(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcEngine::IfcEngine(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcEngineTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcEngineTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcEngineType
::Ifc4x3_tc1::IfcEngineTypeEnum::Value Ifc4x3_tc1::IfcEngineType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcEngineTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcEngineType::setPredefinedType(::Ifc4x3_tc1::IfcEngineTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcEngineTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcEngineType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[408]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEngineType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[408]); }
Ifc4x3_tc1::IfcEngineType::IfcEngineType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcEngineType::IfcEngineType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcEngineTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcEngineTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcEvaporativeCooler
boost::optional< ::Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Value > Ifc4x3_tc1::IfcEvaporativeCooler::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcEvaporativeCooler::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcEvaporativeCooler::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[410]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEvaporativeCooler::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[410]); }
Ifc4x3_tc1::IfcEvaporativeCooler::IfcEvaporativeCooler(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcEvaporativeCooler::IfcEvaporativeCooler(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcEvaporativeCoolerType
::Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Value Ifc4x3_tc1::IfcEvaporativeCoolerType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcEvaporativeCoolerType::setPredefinedType(::Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcEvaporativeCoolerType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[411]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEvaporativeCoolerType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[411]); }
Ifc4x3_tc1::IfcEvaporativeCoolerType::IfcEvaporativeCoolerType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcEvaporativeCoolerType::IfcEvaporativeCoolerType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcEvaporativeCoolerTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcEvaporator
boost::optional< ::Ifc4x3_tc1::IfcEvaporatorTypeEnum::Value > Ifc4x3_tc1::IfcEvaporator::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcEvaporatorTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcEvaporator::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcEvaporatorTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcEvaporatorTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcEvaporator::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[413]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEvaporator::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[413]); }
Ifc4x3_tc1::IfcEvaporator::IfcEvaporator(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcEvaporator::IfcEvaporator(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcEvaporatorTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcEvaporatorTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcEvaporatorType
::Ifc4x3_tc1::IfcEvaporatorTypeEnum::Value Ifc4x3_tc1::IfcEvaporatorType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcEvaporatorTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcEvaporatorType::setPredefinedType(::Ifc4x3_tc1::IfcEvaporatorTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcEvaporatorTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcEvaporatorType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[414]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEvaporatorType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[414]); }
Ifc4x3_tc1::IfcEvaporatorType::IfcEvaporatorType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcEvaporatorType::IfcEvaporatorType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcEvaporatorTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcEvaporatorTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcEvent
boost::optional< ::Ifc4x3_tc1::IfcEventTypeEnum::Value > Ifc4x3_tc1::IfcEvent::PredefinedType() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcEventTypeEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcEvent::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcEventTypeEnum::Value > v) { if (v) {set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcEventTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(7);} }
boost::optional< ::Ifc4x3_tc1::IfcEventTriggerTypeEnum::Value > Ifc4x3_tc1::IfcEvent::EventTriggerType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcEventTriggerTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcEvent::setEventTriggerType(boost::optional< ::Ifc4x3_tc1::IfcEventTriggerTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcEventTriggerTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }
boost::optional< std::string > Ifc4x3_tc1::IfcEvent::UserDefinedEventTriggerType() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcEvent::setUserDefinedEventTriggerType(boost::optional< std::string > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
::Ifc4x3_tc1::IfcEventTime* Ifc4x3_tc1::IfcEvent::EventOccurenceTime() const { if(data_.get_attribute_value(10).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(10)))->as<::Ifc4x3_tc1::IfcEventTime>(true); }
void Ifc4x3_tc1::IfcEvent::setEventOccurenceTime(::Ifc4x3_tc1::IfcEventTime* v) { set_attribute_value(10, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(10); }


const IfcParse::entity& Ifc4x3_tc1::IfcEvent::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[416]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEvent::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[416]); }
Ifc4x3_tc1::IfcEvent::IfcEvent(IfcEntityInstanceData&& e) : IfcProcess(std::move(e)) { }
Ifc4x3_tc1::IfcEvent::IfcEvent(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, boost::optional< ::Ifc4x3_tc1::IfcEventTypeEnum::Value > v8_PredefinedType, boost::optional< ::Ifc4x3_tc1::IfcEventTriggerTypeEnum::Value > v9_EventTriggerType, boost::optional< std::string > v10_UserDefinedEventTriggerType, ::Ifc4x3_tc1::IfcEventTime* v11_EventOccurenceTime) : IfcProcess(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_LongDescription) {set_attribute_value(6, (*v7_LongDescription)); } if (v8_PredefinedType) {set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcEventTypeEnum::Class(),(size_t)*v8_PredefinedType))); } if (v9_EventTriggerType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcEventTriggerTypeEnum::Class(),(size_t)*v9_EventTriggerType))); } if (v10_UserDefinedEventTriggerType) {set_attribute_value(9, (*v10_UserDefinedEventTriggerType)); }set_attribute_value(10, v11_EventOccurenceTime ? v11_EventOccurenceTime->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcEventTime
boost::optional< std::string > Ifc4x3_tc1::IfcEventTime::ActualDate() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcEventTime::setActualDate(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< std::string > Ifc4x3_tc1::IfcEventTime::EarlyDate() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcEventTime::setEarlyDate(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcEventTime::LateDate() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcEventTime::setLateDate(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcEventTime::ScheduleDate() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcEventTime::setScheduleDate(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }


const IfcParse::entity& Ifc4x3_tc1::IfcEventTime::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[417]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEventTime::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[417]); }
Ifc4x3_tc1::IfcEventTime::IfcEventTime(IfcEntityInstanceData&& e) : IfcSchedulingTime(std::move(e)) { }
Ifc4x3_tc1::IfcEventTime::IfcEventTime(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_tc1::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, boost::optional< std::string > v4_ActualDate, boost::optional< std::string > v5_EarlyDate, boost::optional< std::string > v6_LateDate, boost::optional< std::string > v7_ScheduleDate) : IfcSchedulingTime(IfcEntityInstanceData(storage_t(7))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_DataOrigin) {set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcDataOriginEnum::Class(),(size_t)*v2_DataOrigin))); } if (v3_UserDefinedDataOrigin) {set_attribute_value(2, (*v3_UserDefinedDataOrigin)); } if (v4_ActualDate) {set_attribute_value(3, (*v4_ActualDate)); } if (v5_EarlyDate) {set_attribute_value(4, (*v5_EarlyDate)); } if (v6_LateDate) {set_attribute_value(5, (*v6_LateDate)); } if (v7_ScheduleDate) {set_attribute_value(6, (*v7_ScheduleDate)); }; populate_derived(); }

// Function implementations for IfcEventType
::Ifc4x3_tc1::IfcEventTypeEnum::Value Ifc4x3_tc1::IfcEventType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcEventTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcEventType::setPredefinedType(::Ifc4x3_tc1::IfcEventTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcEventTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }
::Ifc4x3_tc1::IfcEventTriggerTypeEnum::Value Ifc4x3_tc1::IfcEventType::EventTriggerType() const {  return ::Ifc4x3_tc1::IfcEventTriggerTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcEventType::setEventTriggerType(::Ifc4x3_tc1::IfcEventTriggerTypeEnum::Value v) { set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcEventTriggerTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(10); }
boost::optional< std::string > Ifc4x3_tc1::IfcEventType::UserDefinedEventTriggerType() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcEventType::setUserDefinedEventTriggerType(boost::optional< std::string > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }


const IfcParse::entity& Ifc4x3_tc1::IfcEventType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[419]); }
const IfcParse::entity& Ifc4x3_tc1::IfcEventType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[419]); }
Ifc4x3_tc1::IfcEventType::IfcEventType(IfcEntityInstanceData&& e) : IfcTypeProcess(std::move(e)) { }
Ifc4x3_tc1::IfcEventType::IfcEventType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ProcessType, ::Ifc4x3_tc1::IfcEventTypeEnum::Value v10_PredefinedType, ::Ifc4x3_tc1::IfcEventTriggerTypeEnum::Value v11_EventTriggerType, boost::optional< std::string > v12_UserDefinedEventTriggerType) : IfcTypeProcess(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_Identification) {set_attribute_value(6, (*v7_Identification)); } if (v8_LongDescription) {set_attribute_value(7, (*v8_LongDescription)); } if (v9_ProcessType) {set_attribute_value(8, (*v9_ProcessType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcEventTypeEnum::Class(),(size_t)v10_PredefinedType)));set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcEventTriggerTypeEnum::Class(),(size_t)v11_EventTriggerType))); if (v12_UserDefinedEventTriggerType) {set_attribute_value(11, (*v12_UserDefinedEventTriggerType)); }; populate_derived(); }

// Function implementations for IfcExtendedProperties
boost::optional< std::string > Ifc4x3_tc1::IfcExtendedProperties::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcExtendedProperties::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcExtendedProperties::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcExtendedProperties::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
aggregate_of< ::Ifc4x3_tc1::IfcProperty >::ptr Ifc4x3_tc1::IfcExtendedProperties::Properties() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcProperty >(); }
void Ifc4x3_tc1::IfcExtendedProperties::setProperties(aggregate_of< ::Ifc4x3_tc1::IfcProperty >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcExtendedProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[421]); }
const IfcParse::entity& Ifc4x3_tc1::IfcExtendedProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[421]); }
Ifc4x3_tc1::IfcExtendedProperties::IfcExtendedProperties(IfcEntityInstanceData&& e) : IfcPropertyAbstraction(std::move(e)) { }
Ifc4x3_tc1::IfcExtendedProperties::IfcExtendedProperties(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_tc1::IfcProperty >::ptr v3_Properties) : IfcPropertyAbstraction(IfcEntityInstanceData(storage_t(3))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_Properties)->generalize());; populate_derived(); }

// Function implementations for IfcExternalInformation


const IfcParse::entity& Ifc4x3_tc1::IfcExternalInformation::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[422]); }
const IfcParse::entity& Ifc4x3_tc1::IfcExternalInformation::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[422]); }
Ifc4x3_tc1::IfcExternalInformation::IfcExternalInformation(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcExternalInformation::IfcExternalInformation() : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcExternalReference
boost::optional< std::string > Ifc4x3_tc1::IfcExternalReference::Location() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcExternalReference::setLocation(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcExternalReference::Identification() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcExternalReference::setIdentification(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcExternalReference::Name() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcExternalReference::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }

::Ifc4x3_tc1::IfcExternalReferenceRelationship::list::ptr Ifc4x3_tc1::IfcExternalReference::ExternalReferenceForResources() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[427], 2)->as<IfcExternalReferenceRelationship>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcExternalReference::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[426]); }
const IfcParse::entity& Ifc4x3_tc1::IfcExternalReference::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[426]); }
Ifc4x3_tc1::IfcExternalReference::IfcExternalReference(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcExternalReference::IfcExternalReference(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(3))) {  if (v1_Location) {set_attribute_value(0, (*v1_Location)); } if (v2_Identification) {set_attribute_value(1, (*v2_Identification)); } if (v3_Name) {set_attribute_value(2, (*v3_Name)); }; populate_derived(); }

// Function implementations for IfcExternalReferenceRelationship
::Ifc4x3_tc1::IfcExternalReference* Ifc4x3_tc1::IfcExternalReferenceRelationship::RelatingReference() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcExternalReference>(true); }
void Ifc4x3_tc1::IfcExternalReferenceRelationship::setRelatingReference(::Ifc4x3_tc1::IfcExternalReference* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
aggregate_of< ::Ifc4x3_tc1::IfcResourceObjectSelect >::ptr Ifc4x3_tc1::IfcExternalReferenceRelationship::RelatedResourceObjects() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(3); return es->as< ::Ifc4x3_tc1::IfcResourceObjectSelect >(); }
void Ifc4x3_tc1::IfcExternalReferenceRelationship::setRelatedResourceObjects(aggregate_of< ::Ifc4x3_tc1::IfcResourceObjectSelect >::ptr v) { set_attribute_value(3, (v)->generalize());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcExternalReferenceRelationship::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[427]); }
const IfcParse::entity& Ifc4x3_tc1::IfcExternalReferenceRelationship::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[427]); }
Ifc4x3_tc1::IfcExternalReferenceRelationship::IfcExternalReferenceRelationship(IfcEntityInstanceData&& e) : IfcResourceLevelRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcExternalReferenceRelationship::IfcExternalReferenceRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcExternalReference* v3_RelatingReference, aggregate_of< ::Ifc4x3_tc1::IfcResourceObjectSelect >::ptr v4_RelatedResourceObjects) : IfcResourceLevelRelationship(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_RelatingReference ? v3_RelatingReference->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_RelatedResourceObjects)->generalize());; populate_derived(); }

// Function implementations for IfcExternalSpatialElement
boost::optional< ::Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::Value > Ifc4x3_tc1::IfcExternalSpatialElement::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcExternalSpatialElement::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }

::Ifc4x3_tc1::IfcRelSpaceBoundary::list::ptr Ifc4x3_tc1::IfcExternalSpatialElement::BoundedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[943], 4)->as<IfcRelSpaceBoundary>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcExternalSpatialElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[428]); }
const IfcParse::entity& Ifc4x3_tc1::IfcExternalSpatialElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[428]); }
Ifc4x3_tc1::IfcExternalSpatialElement::IfcExternalSpatialElement(IfcEntityInstanceData&& e) : IfcExternalSpatialStructureElement(std::move(e)) { }
Ifc4x3_tc1::IfcExternalSpatialElement::IfcExternalSpatialElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::Value > v9_PredefinedType) : IfcExternalSpatialStructureElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcExternalSpatialElementTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcExternalSpatialStructureElement


const IfcParse::entity& Ifc4x3_tc1::IfcExternalSpatialStructureElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[430]); }
const IfcParse::entity& Ifc4x3_tc1::IfcExternalSpatialStructureElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[430]); }
Ifc4x3_tc1::IfcExternalSpatialStructureElement::IfcExternalSpatialStructureElement(IfcEntityInstanceData&& e) : IfcSpatialElement(std::move(e)) { }
Ifc4x3_tc1::IfcExternalSpatialStructureElement::IfcExternalSpatialStructureElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName) : IfcSpatialElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); }; populate_derived(); }

// Function implementations for IfcExternallyDefinedHatchStyle


const IfcParse::entity& Ifc4x3_tc1::IfcExternallyDefinedHatchStyle::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[423]); }
const IfcParse::entity& Ifc4x3_tc1::IfcExternallyDefinedHatchStyle::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[423]); }
Ifc4x3_tc1::IfcExternallyDefinedHatchStyle::IfcExternallyDefinedHatchStyle(IfcEntityInstanceData&& e) : IfcExternalReference(std::move(e)) { }
Ifc4x3_tc1::IfcExternallyDefinedHatchStyle::IfcExternallyDefinedHatchStyle(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name) : IfcExternalReference(IfcEntityInstanceData(storage_t(3))) {  if (v1_Location) {set_attribute_value(0, (*v1_Location)); } if (v2_Identification) {set_attribute_value(1, (*v2_Identification)); } if (v3_Name) {set_attribute_value(2, (*v3_Name)); }; populate_derived(); }

// Function implementations for IfcExternallyDefinedSurfaceStyle


const IfcParse::entity& Ifc4x3_tc1::IfcExternallyDefinedSurfaceStyle::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[424]); }
const IfcParse::entity& Ifc4x3_tc1::IfcExternallyDefinedSurfaceStyle::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[424]); }
Ifc4x3_tc1::IfcExternallyDefinedSurfaceStyle::IfcExternallyDefinedSurfaceStyle(IfcEntityInstanceData&& e) : IfcExternalReference(std::move(e)) { }
Ifc4x3_tc1::IfcExternallyDefinedSurfaceStyle::IfcExternallyDefinedSurfaceStyle(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name) : IfcExternalReference(IfcEntityInstanceData(storage_t(3))) {  if (v1_Location) {set_attribute_value(0, (*v1_Location)); } if (v2_Identification) {set_attribute_value(1, (*v2_Identification)); } if (v3_Name) {set_attribute_value(2, (*v3_Name)); }; populate_derived(); }

// Function implementations for IfcExternallyDefinedTextFont


const IfcParse::entity& Ifc4x3_tc1::IfcExternallyDefinedTextFont::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[425]); }
const IfcParse::entity& Ifc4x3_tc1::IfcExternallyDefinedTextFont::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[425]); }
Ifc4x3_tc1::IfcExternallyDefinedTextFont::IfcExternallyDefinedTextFont(IfcEntityInstanceData&& e) : IfcExternalReference(std::move(e)) { }
Ifc4x3_tc1::IfcExternallyDefinedTextFont::IfcExternallyDefinedTextFont(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name) : IfcExternalReference(IfcEntityInstanceData(storage_t(3))) {  if (v1_Location) {set_attribute_value(0, (*v1_Location)); } if (v2_Identification) {set_attribute_value(1, (*v2_Identification)); } if (v3_Name) {set_attribute_value(2, (*v3_Name)); }; populate_derived(); }

// Function implementations for IfcExtrudedAreaSolid
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcExtrudedAreaSolid::ExtrudedDirection() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcExtrudedAreaSolid::setExtrudedDirection(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
double Ifc4x3_tc1::IfcExtrudedAreaSolid::Depth() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcExtrudedAreaSolid::setDepth(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcExtrudedAreaSolid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[431]); }
const IfcParse::entity& Ifc4x3_tc1::IfcExtrudedAreaSolid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[431]); }
Ifc4x3_tc1::IfcExtrudedAreaSolid::IfcExtrudedAreaSolid(IfcEntityInstanceData&& e) : IfcSweptAreaSolid(std::move(e)) { }
Ifc4x3_tc1::IfcExtrudedAreaSolid::IfcExtrudedAreaSolid(::Ifc4x3_tc1::IfcProfileDef* v1_SweptArea, ::Ifc4x3_tc1::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_tc1::IfcDirection* v3_ExtrudedDirection, double v4_Depth) : IfcSweptAreaSolid(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_SweptArea ? v1_SweptArea->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Position ? v2_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_ExtrudedDirection ? v3_ExtrudedDirection->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Depth));; populate_derived(); }

// Function implementations for IfcExtrudedAreaSolidTapered
::Ifc4x3_tc1::IfcProfileDef* Ifc4x3_tc1::IfcExtrudedAreaSolidTapered::EndSweptArea() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcProfileDef>(true); }
void Ifc4x3_tc1::IfcExtrudedAreaSolidTapered::setEndSweptArea(::Ifc4x3_tc1::IfcProfileDef* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcExtrudedAreaSolidTapered::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[432]); }
const IfcParse::entity& Ifc4x3_tc1::IfcExtrudedAreaSolidTapered::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[432]); }
Ifc4x3_tc1::IfcExtrudedAreaSolidTapered::IfcExtrudedAreaSolidTapered(IfcEntityInstanceData&& e) : IfcExtrudedAreaSolid(std::move(e)) { }
Ifc4x3_tc1::IfcExtrudedAreaSolidTapered::IfcExtrudedAreaSolidTapered(::Ifc4x3_tc1::IfcProfileDef* v1_SweptArea, ::Ifc4x3_tc1::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_tc1::IfcDirection* v3_ExtrudedDirection, double v4_Depth, ::Ifc4x3_tc1::IfcProfileDef* v5_EndSweptArea) : IfcExtrudedAreaSolid(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_SweptArea ? v1_SweptArea->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Position ? v2_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_ExtrudedDirection ? v3_ExtrudedDirection->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Depth));set_attribute_value(4, v5_EndSweptArea ? v5_EndSweptArea->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcFace
aggregate_of< ::Ifc4x3_tc1::IfcFaceBound >::ptr Ifc4x3_tc1::IfcFace::Bounds() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcFaceBound >(); }
void Ifc4x3_tc1::IfcFace::setBounds(aggregate_of< ::Ifc4x3_tc1::IfcFaceBound >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }

::Ifc4x3_tc1::IfcTextureMap::list::ptr Ifc4x3_tc1::IfcFace::HasTextureMaps() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[1193], 2)->as<IfcTextureMap>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcFace::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[433]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFace::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[433]); }
Ifc4x3_tc1::IfcFace::IfcFace(IfcEntityInstanceData&& e) : IfcTopologicalRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcFace::IfcFace(aggregate_of< ::Ifc4x3_tc1::IfcFaceBound >::ptr v1_Bounds) : IfcTopologicalRepresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Bounds)->generalize());; populate_derived(); }

// Function implementations for IfcFaceBasedSurfaceModel
aggregate_of< ::Ifc4x3_tc1::IfcConnectedFaceSet >::ptr Ifc4x3_tc1::IfcFaceBasedSurfaceModel::FbsmFaces() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcConnectedFaceSet >(); }
void Ifc4x3_tc1::IfcFaceBasedSurfaceModel::setFbsmFaces(aggregate_of< ::Ifc4x3_tc1::IfcConnectedFaceSet >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcFaceBasedSurfaceModel::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[434]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFaceBasedSurfaceModel::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[434]); }
Ifc4x3_tc1::IfcFaceBasedSurfaceModel::IfcFaceBasedSurfaceModel(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcFaceBasedSurfaceModel::IfcFaceBasedSurfaceModel(aggregate_of< ::Ifc4x3_tc1::IfcConnectedFaceSet >::ptr v1_FbsmFaces) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_FbsmFaces)->generalize());; populate_derived(); }

// Function implementations for IfcFaceBound
::Ifc4x3_tc1::IfcLoop* Ifc4x3_tc1::IfcFaceBound::Bound() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcLoop>(true); }
void Ifc4x3_tc1::IfcFaceBound::setBound(::Ifc4x3_tc1::IfcLoop* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
bool Ifc4x3_tc1::IfcFaceBound::Orientation() const {  bool v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcFaceBound::setOrientation(bool v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcFaceBound::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[435]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFaceBound::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[435]); }
Ifc4x3_tc1::IfcFaceBound::IfcFaceBound(IfcEntityInstanceData&& e) : IfcTopologicalRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcFaceBound::IfcFaceBound(::Ifc4x3_tc1::IfcLoop* v1_Bound, bool v2_Orientation) : IfcTopologicalRepresentationItem(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Bound ? v1_Bound->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Orientation));; populate_derived(); }

// Function implementations for IfcFaceOuterBound


const IfcParse::entity& Ifc4x3_tc1::IfcFaceOuterBound::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[436]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFaceOuterBound::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[436]); }
Ifc4x3_tc1::IfcFaceOuterBound::IfcFaceOuterBound(IfcEntityInstanceData&& e) : IfcFaceBound(std::move(e)) { }
Ifc4x3_tc1::IfcFaceOuterBound::IfcFaceOuterBound(::Ifc4x3_tc1::IfcLoop* v1_Bound, bool v2_Orientation) : IfcFaceBound(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Bound ? v1_Bound->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Orientation));; populate_derived(); }

// Function implementations for IfcFaceSurface
::Ifc4x3_tc1::IfcSurface* Ifc4x3_tc1::IfcFaceSurface::FaceSurface() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcSurface>(true); }
void Ifc4x3_tc1::IfcFaceSurface::setFaceSurface(::Ifc4x3_tc1::IfcSurface* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
bool Ifc4x3_tc1::IfcFaceSurface::SameSense() const {  bool v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcFaceSurface::setSameSense(bool v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcFaceSurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[437]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFaceSurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[437]); }
Ifc4x3_tc1::IfcFaceSurface::IfcFaceSurface(IfcEntityInstanceData&& e) : IfcFace(std::move(e)) { }
Ifc4x3_tc1::IfcFaceSurface::IfcFaceSurface(aggregate_of< ::Ifc4x3_tc1::IfcFaceBound >::ptr v1_Bounds, ::Ifc4x3_tc1::IfcSurface* v2_FaceSurface, bool v3_SameSense) : IfcFace(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_Bounds)->generalize());set_attribute_value(1, v2_FaceSurface ? v2_FaceSurface->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, (v3_SameSense));; populate_derived(); }

// Function implementations for IfcFacetedBrep


const IfcParse::entity& Ifc4x3_tc1::IfcFacetedBrep::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[438]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFacetedBrep::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[438]); }
Ifc4x3_tc1::IfcFacetedBrep::IfcFacetedBrep(IfcEntityInstanceData&& e) : IfcManifoldSolidBrep(std::move(e)) { }
Ifc4x3_tc1::IfcFacetedBrep::IfcFacetedBrep(::Ifc4x3_tc1::IfcClosedShell* v1_Outer) : IfcManifoldSolidBrep(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_Outer ? v1_Outer->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcFacetedBrepWithVoids
aggregate_of< ::Ifc4x3_tc1::IfcClosedShell >::ptr Ifc4x3_tc1::IfcFacetedBrepWithVoids::Voids() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcClosedShell >(); }
void Ifc4x3_tc1::IfcFacetedBrepWithVoids::setVoids(aggregate_of< ::Ifc4x3_tc1::IfcClosedShell >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcFacetedBrepWithVoids::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[439]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFacetedBrepWithVoids::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[439]); }
Ifc4x3_tc1::IfcFacetedBrepWithVoids::IfcFacetedBrepWithVoids(IfcEntityInstanceData&& e) : IfcFacetedBrep(std::move(e)) { }
Ifc4x3_tc1::IfcFacetedBrepWithVoids::IfcFacetedBrepWithVoids(::Ifc4x3_tc1::IfcClosedShell* v1_Outer, aggregate_of< ::Ifc4x3_tc1::IfcClosedShell >::ptr v2_Voids) : IfcFacetedBrep(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Outer ? v1_Outer->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Voids)->generalize());; populate_derived(); }

// Function implementations for IfcFacility


const IfcParse::entity& Ifc4x3_tc1::IfcFacility::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[440]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFacility::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[440]); }
Ifc4x3_tc1::IfcFacility::IfcFacility(IfcEntityInstanceData&& e) : IfcSpatialStructureElement(std::move(e)) { }
Ifc4x3_tc1::IfcFacility::IfcFacility(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType) : IfcSpatialStructureElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); }; populate_derived(); }

// Function implementations for IfcFacilityPart
::Ifc4x3_tc1::IfcFacilityUsageEnum::Value Ifc4x3_tc1::IfcFacilityPart::UsageType() const {  return ::Ifc4x3_tc1::IfcFacilityUsageEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcFacilityPart::setUsageType(::Ifc4x3_tc1::IfcFacilityUsageEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcFacilityUsageEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcFacilityPart::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[441]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFacilityPart::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[441]); }
Ifc4x3_tc1::IfcFacilityPart::IfcFacilityPart(IfcEntityInstanceData&& e) : IfcSpatialStructureElement(std::move(e)) { }
Ifc4x3_tc1::IfcFacilityPart::IfcFacilityPart(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_tc1::IfcFacilityUsageEnum::Value v10_UsageType) : IfcSpatialStructureElement(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcFacilityUsageEnum::Class(),(size_t)v10_UsageType)));; populate_derived(); }

// Function implementations for IfcFacilityPartCommon
boost::optional< ::Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::Value > Ifc4x3_tc1::IfcFacilityPartCommon::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcFacilityPartCommon::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcFacilityPartCommon::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[442]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFacilityPartCommon::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[442]); }
Ifc4x3_tc1::IfcFacilityPartCommon::IfcFacilityPartCommon(IfcEntityInstanceData&& e) : IfcFacilityPart(std::move(e)) { }
Ifc4x3_tc1::IfcFacilityPartCommon::IfcFacilityPartCommon(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_tc1::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::Value > v11_PredefinedType) : IfcFacilityPart(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcFacilityUsageEnum::Class(),(size_t)v10_UsageType))); if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcFacilityPartCommonTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcFailureConnectionCondition
boost::optional< double > Ifc4x3_tc1::IfcFailureConnectionCondition::TensionFailureX() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcFailureConnectionCondition::setTensionFailureX(boost::optional< double > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< double > Ifc4x3_tc1::IfcFailureConnectionCondition::TensionFailureY() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcFailureConnectionCondition::setTensionFailureY(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcFailureConnectionCondition::TensionFailureZ() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcFailureConnectionCondition::setTensionFailureZ(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< double > Ifc4x3_tc1::IfcFailureConnectionCondition::CompressionFailureX() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcFailureConnectionCondition::setCompressionFailureX(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< double > Ifc4x3_tc1::IfcFailureConnectionCondition::CompressionFailureY() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcFailureConnectionCondition::setCompressionFailureY(boost::optional< double > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< double > Ifc4x3_tc1::IfcFailureConnectionCondition::CompressionFailureZ() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcFailureConnectionCondition::setCompressionFailureZ(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }


const IfcParse::entity& Ifc4x3_tc1::IfcFailureConnectionCondition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[445]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFailureConnectionCondition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[445]); }
Ifc4x3_tc1::IfcFailureConnectionCondition::IfcFailureConnectionCondition(IfcEntityInstanceData&& e) : IfcStructuralConnectionCondition(std::move(e)) { }
Ifc4x3_tc1::IfcFailureConnectionCondition::IfcFailureConnectionCondition(boost::optional< std::string > v1_Name, boost::optional< double > v2_TensionFailureX, boost::optional< double > v3_TensionFailureY, boost::optional< double > v4_TensionFailureZ, boost::optional< double > v5_CompressionFailureX, boost::optional< double > v6_CompressionFailureY, boost::optional< double > v7_CompressionFailureZ) : IfcStructuralConnectionCondition(IfcEntityInstanceData(storage_t(7))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_TensionFailureX) {set_attribute_value(1, (*v2_TensionFailureX)); } if (v3_TensionFailureY) {set_attribute_value(2, (*v3_TensionFailureY)); } if (v4_TensionFailureZ) {set_attribute_value(3, (*v4_TensionFailureZ)); } if (v5_CompressionFailureX) {set_attribute_value(4, (*v5_CompressionFailureX)); } if (v6_CompressionFailureY) {set_attribute_value(5, (*v6_CompressionFailureY)); } if (v7_CompressionFailureZ) {set_attribute_value(6, (*v7_CompressionFailureZ)); }; populate_derived(); }

// Function implementations for IfcFan
boost::optional< ::Ifc4x3_tc1::IfcFanTypeEnum::Value > Ifc4x3_tc1::IfcFan::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcFanTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcFan::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcFanTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcFanTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcFan::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[446]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFan::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[446]); }
Ifc4x3_tc1::IfcFan::IfcFan(IfcEntityInstanceData&& e) : IfcFlowMovingDevice(std::move(e)) { }
Ifc4x3_tc1::IfcFan::IfcFan(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcFanTypeEnum::Value > v9_PredefinedType) : IfcFlowMovingDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcFanTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcFanType
::Ifc4x3_tc1::IfcFanTypeEnum::Value Ifc4x3_tc1::IfcFanType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcFanTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcFanType::setPredefinedType(::Ifc4x3_tc1::IfcFanTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcFanTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcFanType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[447]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFanType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[447]); }
Ifc4x3_tc1::IfcFanType::IfcFanType(IfcEntityInstanceData&& e) : IfcFlowMovingDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcFanType::IfcFanType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcFanTypeEnum::Value v10_PredefinedType) : IfcFlowMovingDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcFanTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcFastener
boost::optional< ::Ifc4x3_tc1::IfcFastenerTypeEnum::Value > Ifc4x3_tc1::IfcFastener::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcFastenerTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcFastener::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcFastenerTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcFastenerTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcFastener::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[449]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFastener::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[449]); }
Ifc4x3_tc1::IfcFastener::IfcFastener(IfcEntityInstanceData&& e) : IfcElementComponent(std::move(e)) { }
Ifc4x3_tc1::IfcFastener::IfcFastener(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcFastenerTypeEnum::Value > v9_PredefinedType) : IfcElementComponent(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcFastenerTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcFastenerType
::Ifc4x3_tc1::IfcFastenerTypeEnum::Value Ifc4x3_tc1::IfcFastenerType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcFastenerTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcFastenerType::setPredefinedType(::Ifc4x3_tc1::IfcFastenerTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcFastenerTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcFastenerType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[450]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFastenerType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[450]); }
Ifc4x3_tc1::IfcFastenerType::IfcFastenerType(IfcEntityInstanceData&& e) : IfcElementComponentType(std::move(e)) { }
Ifc4x3_tc1::IfcFastenerType::IfcFastenerType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcFastenerTypeEnum::Value v10_PredefinedType) : IfcElementComponentType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcFastenerTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcFeatureElement


const IfcParse::entity& Ifc4x3_tc1::IfcFeatureElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[452]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFeatureElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[452]); }
Ifc4x3_tc1::IfcFeatureElement::IfcFeatureElement(IfcEntityInstanceData&& e) : IfcElement(std::move(e)) { }
Ifc4x3_tc1::IfcFeatureElement::IfcFeatureElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcFeatureElementAddition

::Ifc4x3_tc1::IfcRelProjectsElement::list::ptr Ifc4x3_tc1::IfcFeatureElementAddition::ProjectsElements() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[939], 5)->as<IfcRelProjectsElement>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcFeatureElementAddition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[453]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFeatureElementAddition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[453]); }
Ifc4x3_tc1::IfcFeatureElementAddition::IfcFeatureElementAddition(IfcEntityInstanceData&& e) : IfcFeatureElement(std::move(e)) { }
Ifc4x3_tc1::IfcFeatureElementAddition::IfcFeatureElementAddition(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcFeatureElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcFeatureElementSubtraction

::Ifc4x3_tc1::IfcRelVoidsElement::list::ptr Ifc4x3_tc1::IfcFeatureElementSubtraction::VoidsElements() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[946], 5)->as<IfcRelVoidsElement>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcFeatureElementSubtraction::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[454]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFeatureElementSubtraction::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[454]); }
Ifc4x3_tc1::IfcFeatureElementSubtraction::IfcFeatureElementSubtraction(IfcEntityInstanceData&& e) : IfcFeatureElement(std::move(e)) { }
Ifc4x3_tc1::IfcFeatureElementSubtraction::IfcFeatureElementSubtraction(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcFeatureElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcFillAreaStyle
aggregate_of< ::Ifc4x3_tc1::IfcFillStyleSelect >::ptr Ifc4x3_tc1::IfcFillAreaStyle::FillStyles() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcFillStyleSelect >(); }
void Ifc4x3_tc1::IfcFillAreaStyle::setFillStyles(aggregate_of< ::Ifc4x3_tc1::IfcFillStyleSelect >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }
boost::optional< bool > Ifc4x3_tc1::IfcFillAreaStyle::ModelOrDraughting() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } bool v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcFillAreaStyle::setModelOrDraughting(boost::optional< bool > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }


const IfcParse::entity& Ifc4x3_tc1::IfcFillAreaStyle::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[455]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFillAreaStyle::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[455]); }
Ifc4x3_tc1::IfcFillAreaStyle::IfcFillAreaStyle(IfcEntityInstanceData&& e) : IfcPresentationStyle(std::move(e)) { }
Ifc4x3_tc1::IfcFillAreaStyle::IfcFillAreaStyle(boost::optional< std::string > v1_Name, aggregate_of< ::Ifc4x3_tc1::IfcFillStyleSelect >::ptr v2_FillStyles, boost::optional< bool > v3_ModelOrDraughting) : IfcPresentationStyle(IfcEntityInstanceData(storage_t(3))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, (v2_FillStyles)->generalize()); if (v3_ModelOrDraughting) {set_attribute_value(2, (*v3_ModelOrDraughting)); }; populate_derived(); }

// Function implementations for IfcFillAreaStyleHatching
::Ifc4x3_tc1::IfcCurveStyle* Ifc4x3_tc1::IfcFillAreaStyleHatching::HatchLineAppearance() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCurveStyle>(true); }
void Ifc4x3_tc1::IfcFillAreaStyleHatching::setHatchLineAppearance(::Ifc4x3_tc1::IfcCurveStyle* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcHatchLineDistanceSelect* Ifc4x3_tc1::IfcFillAreaStyleHatching::StartOfNextHatchLine() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcHatchLineDistanceSelect>(true); }
void Ifc4x3_tc1::IfcFillAreaStyleHatching::setStartOfNextHatchLine(::Ifc4x3_tc1::IfcHatchLineDistanceSelect* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcCartesianPoint* Ifc4x3_tc1::IfcFillAreaStyleHatching::PointOfReferenceHatchLine() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcCartesianPoint>(true); }
void Ifc4x3_tc1::IfcFillAreaStyleHatching::setPointOfReferenceHatchLine(::Ifc4x3_tc1::IfcCartesianPoint* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcCartesianPoint* Ifc4x3_tc1::IfcFillAreaStyleHatching::PatternStart() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcCartesianPoint>(true); }
void Ifc4x3_tc1::IfcFillAreaStyleHatching::setPatternStart(::Ifc4x3_tc1::IfcCartesianPoint* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcFillAreaStyleHatching::HatchLineAngle() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcFillAreaStyleHatching::setHatchLineAngle(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcFillAreaStyleHatching::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[456]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFillAreaStyleHatching::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[456]); }
Ifc4x3_tc1::IfcFillAreaStyleHatching::IfcFillAreaStyleHatching(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcFillAreaStyleHatching::IfcFillAreaStyleHatching(::Ifc4x3_tc1::IfcCurveStyle* v1_HatchLineAppearance, ::Ifc4x3_tc1::IfcHatchLineDistanceSelect* v2_StartOfNextHatchLine, ::Ifc4x3_tc1::IfcCartesianPoint* v3_PointOfReferenceHatchLine, ::Ifc4x3_tc1::IfcCartesianPoint* v4_PatternStart, double v5_HatchLineAngle) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_HatchLineAppearance ? v1_HatchLineAppearance->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_StartOfNextHatchLine ? v2_StartOfNextHatchLine->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_PointOfReferenceHatchLine ? v3_PointOfReferenceHatchLine->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_PatternStart ? v4_PatternStart->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, (v5_HatchLineAngle));; populate_derived(); }

// Function implementations for IfcFillAreaStyleTiles
aggregate_of< ::Ifc4x3_tc1::IfcVector >::ptr Ifc4x3_tc1::IfcFillAreaStyleTiles::TilingPattern() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcVector >(); }
void Ifc4x3_tc1::IfcFillAreaStyleTiles::setTilingPattern(aggregate_of< ::Ifc4x3_tc1::IfcVector >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }
aggregate_of< ::Ifc4x3_tc1::IfcStyledItem >::ptr Ifc4x3_tc1::IfcFillAreaStyleTiles::Tiles() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcStyledItem >(); }
void Ifc4x3_tc1::IfcFillAreaStyleTiles::setTiles(aggregate_of< ::Ifc4x3_tc1::IfcStyledItem >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }
double Ifc4x3_tc1::IfcFillAreaStyleTiles::TilingScale() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcFillAreaStyleTiles::setTilingScale(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcFillAreaStyleTiles::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[457]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFillAreaStyleTiles::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[457]); }
Ifc4x3_tc1::IfcFillAreaStyleTiles::IfcFillAreaStyleTiles(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcFillAreaStyleTiles::IfcFillAreaStyleTiles(aggregate_of< ::Ifc4x3_tc1::IfcVector >::ptr v1_TilingPattern, aggregate_of< ::Ifc4x3_tc1::IfcStyledItem >::ptr v2_Tiles, double v3_TilingScale) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_TilingPattern)->generalize());set_attribute_value(1, (v2_Tiles)->generalize());set_attribute_value(2, (v3_TilingScale));; populate_derived(); }

// Function implementations for IfcFilter
boost::optional< ::Ifc4x3_tc1::IfcFilterTypeEnum::Value > Ifc4x3_tc1::IfcFilter::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcFilterTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcFilter::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcFilterTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcFilterTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcFilter::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[459]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFilter::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[459]); }
Ifc4x3_tc1::IfcFilter::IfcFilter(IfcEntityInstanceData&& e) : IfcFlowTreatmentDevice(std::move(e)) { }
Ifc4x3_tc1::IfcFilter::IfcFilter(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcFilterTypeEnum::Value > v9_PredefinedType) : IfcFlowTreatmentDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcFilterTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcFilterType
::Ifc4x3_tc1::IfcFilterTypeEnum::Value Ifc4x3_tc1::IfcFilterType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcFilterTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcFilterType::setPredefinedType(::Ifc4x3_tc1::IfcFilterTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcFilterTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcFilterType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[460]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFilterType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[460]); }
Ifc4x3_tc1::IfcFilterType::IfcFilterType(IfcEntityInstanceData&& e) : IfcFlowTreatmentDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcFilterType::IfcFilterType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcFilterTypeEnum::Value v10_PredefinedType) : IfcFlowTreatmentDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcFilterTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcFireSuppressionTerminal
boost::optional< ::Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Value > Ifc4x3_tc1::IfcFireSuppressionTerminal::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcFireSuppressionTerminal::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcFireSuppressionTerminal::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[462]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFireSuppressionTerminal::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[462]); }
Ifc4x3_tc1::IfcFireSuppressionTerminal::IfcFireSuppressionTerminal(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcFireSuppressionTerminal::IfcFireSuppressionTerminal(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcFireSuppressionTerminalType
::Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Value Ifc4x3_tc1::IfcFireSuppressionTerminalType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcFireSuppressionTerminalType::setPredefinedType(::Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcFireSuppressionTerminalType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[463]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFireSuppressionTerminalType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[463]); }
Ifc4x3_tc1::IfcFireSuppressionTerminalType::IfcFireSuppressionTerminalType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcFireSuppressionTerminalType::IfcFireSuppressionTerminalType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcFireSuppressionTerminalTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcFixedReferenceSweptAreaSolid
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcFixedReferenceSweptAreaSolid::FixedReference() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcFixedReferenceSweptAreaSolid::setFixedReference(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcFixedReferenceSweptAreaSolid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[465]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFixedReferenceSweptAreaSolid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[465]); }
Ifc4x3_tc1::IfcFixedReferenceSweptAreaSolid::IfcFixedReferenceSweptAreaSolid(IfcEntityInstanceData&& e) : IfcDirectrixCurveSweptAreaSolid(std::move(e)) { }
Ifc4x3_tc1::IfcFixedReferenceSweptAreaSolid::IfcFixedReferenceSweptAreaSolid(::Ifc4x3_tc1::IfcProfileDef* v1_SweptArea, ::Ifc4x3_tc1::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_tc1::IfcCurve* v3_Directrix, ::Ifc4x3_tc1::IfcCurveMeasureSelect* v4_StartParam, ::Ifc4x3_tc1::IfcCurveMeasureSelect* v5_EndParam, ::Ifc4x3_tc1::IfcDirection* v6_FixedReference) : IfcDirectrixCurveSweptAreaSolid(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, v1_SweptArea ? v1_SweptArea->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Position ? v2_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_Directrix ? v3_Directrix->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_StartParam ? v4_StartParam->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, v5_EndParam ? v5_EndParam->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_FixedReference ? v6_FixedReference->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcFlowController


const IfcParse::entity& Ifc4x3_tc1::IfcFlowController::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[466]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowController::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[466]); }
Ifc4x3_tc1::IfcFlowController::IfcFlowController(IfcEntityInstanceData&& e) : IfcDistributionFlowElement(std::move(e)) { }
Ifc4x3_tc1::IfcFlowController::IfcFlowController(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcFlowControllerType


const IfcParse::entity& Ifc4x3_tc1::IfcFlowControllerType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[467]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowControllerType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[467]); }
Ifc4x3_tc1::IfcFlowControllerType::IfcFlowControllerType(IfcEntityInstanceData&& e) : IfcDistributionFlowElementType(std::move(e)) { }
Ifc4x3_tc1::IfcFlowControllerType::IfcFlowControllerType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcFlowFitting


const IfcParse::entity& Ifc4x3_tc1::IfcFlowFitting::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[469]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowFitting::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[469]); }
Ifc4x3_tc1::IfcFlowFitting::IfcFlowFitting(IfcEntityInstanceData&& e) : IfcDistributionFlowElement(std::move(e)) { }
Ifc4x3_tc1::IfcFlowFitting::IfcFlowFitting(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcFlowFittingType


const IfcParse::entity& Ifc4x3_tc1::IfcFlowFittingType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[470]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowFittingType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[470]); }
Ifc4x3_tc1::IfcFlowFittingType::IfcFlowFittingType(IfcEntityInstanceData&& e) : IfcDistributionFlowElementType(std::move(e)) { }
Ifc4x3_tc1::IfcFlowFittingType::IfcFlowFittingType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcFlowInstrument
boost::optional< ::Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Value > Ifc4x3_tc1::IfcFlowInstrument::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcFlowInstrument::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcFlowInstrument::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[471]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowInstrument::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[471]); }
Ifc4x3_tc1::IfcFlowInstrument::IfcFlowInstrument(IfcEntityInstanceData&& e) : IfcDistributionControlElement(std::move(e)) { }
Ifc4x3_tc1::IfcFlowInstrument::IfcFlowInstrument(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcFlowInstrumentType
::Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Value Ifc4x3_tc1::IfcFlowInstrumentType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcFlowInstrumentType::setPredefinedType(::Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcFlowInstrumentType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[472]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowInstrumentType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[472]); }
Ifc4x3_tc1::IfcFlowInstrumentType::IfcFlowInstrumentType(IfcEntityInstanceData&& e) : IfcDistributionControlElementType(std::move(e)) { }
Ifc4x3_tc1::IfcFlowInstrumentType::IfcFlowInstrumentType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcFlowInstrumentTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcFlowMeter
boost::optional< ::Ifc4x3_tc1::IfcFlowMeterTypeEnum::Value > Ifc4x3_tc1::IfcFlowMeter::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcFlowMeterTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcFlowMeter::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcFlowMeterTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcFlowMeterTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcFlowMeter::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[474]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowMeter::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[474]); }
Ifc4x3_tc1::IfcFlowMeter::IfcFlowMeter(IfcEntityInstanceData&& e) : IfcFlowController(std::move(e)) { }
Ifc4x3_tc1::IfcFlowMeter::IfcFlowMeter(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcFlowMeterTypeEnum::Value > v9_PredefinedType) : IfcFlowController(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcFlowMeterTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcFlowMeterType
::Ifc4x3_tc1::IfcFlowMeterTypeEnum::Value Ifc4x3_tc1::IfcFlowMeterType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcFlowMeterTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcFlowMeterType::setPredefinedType(::Ifc4x3_tc1::IfcFlowMeterTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcFlowMeterTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcFlowMeterType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[475]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowMeterType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[475]); }
Ifc4x3_tc1::IfcFlowMeterType::IfcFlowMeterType(IfcEntityInstanceData&& e) : IfcFlowControllerType(std::move(e)) { }
Ifc4x3_tc1::IfcFlowMeterType::IfcFlowMeterType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcFlowMeterTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcFlowMeterTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcFlowMovingDevice


const IfcParse::entity& Ifc4x3_tc1::IfcFlowMovingDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[477]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowMovingDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[477]); }
Ifc4x3_tc1::IfcFlowMovingDevice::IfcFlowMovingDevice(IfcEntityInstanceData&& e) : IfcDistributionFlowElement(std::move(e)) { }
Ifc4x3_tc1::IfcFlowMovingDevice::IfcFlowMovingDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcFlowMovingDeviceType


const IfcParse::entity& Ifc4x3_tc1::IfcFlowMovingDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[478]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowMovingDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[478]); }
Ifc4x3_tc1::IfcFlowMovingDeviceType::IfcFlowMovingDeviceType(IfcEntityInstanceData&& e) : IfcDistributionFlowElementType(std::move(e)) { }
Ifc4x3_tc1::IfcFlowMovingDeviceType::IfcFlowMovingDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcFlowSegment


const IfcParse::entity& Ifc4x3_tc1::IfcFlowSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[479]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[479]); }
Ifc4x3_tc1::IfcFlowSegment::IfcFlowSegment(IfcEntityInstanceData&& e) : IfcDistributionFlowElement(std::move(e)) { }
Ifc4x3_tc1::IfcFlowSegment::IfcFlowSegment(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcFlowSegmentType


const IfcParse::entity& Ifc4x3_tc1::IfcFlowSegmentType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[480]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowSegmentType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[480]); }
Ifc4x3_tc1::IfcFlowSegmentType::IfcFlowSegmentType(IfcEntityInstanceData&& e) : IfcDistributionFlowElementType(std::move(e)) { }
Ifc4x3_tc1::IfcFlowSegmentType::IfcFlowSegmentType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcFlowStorageDevice


const IfcParse::entity& Ifc4x3_tc1::IfcFlowStorageDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[481]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowStorageDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[481]); }
Ifc4x3_tc1::IfcFlowStorageDevice::IfcFlowStorageDevice(IfcEntityInstanceData&& e) : IfcDistributionFlowElement(std::move(e)) { }
Ifc4x3_tc1::IfcFlowStorageDevice::IfcFlowStorageDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcFlowStorageDeviceType


const IfcParse::entity& Ifc4x3_tc1::IfcFlowStorageDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[482]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowStorageDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[482]); }
Ifc4x3_tc1::IfcFlowStorageDeviceType::IfcFlowStorageDeviceType(IfcEntityInstanceData&& e) : IfcDistributionFlowElementType(std::move(e)) { }
Ifc4x3_tc1::IfcFlowStorageDeviceType::IfcFlowStorageDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcFlowTerminal


const IfcParse::entity& Ifc4x3_tc1::IfcFlowTerminal::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[483]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowTerminal::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[483]); }
Ifc4x3_tc1::IfcFlowTerminal::IfcFlowTerminal(IfcEntityInstanceData&& e) : IfcDistributionFlowElement(std::move(e)) { }
Ifc4x3_tc1::IfcFlowTerminal::IfcFlowTerminal(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcFlowTerminalType


const IfcParse::entity& Ifc4x3_tc1::IfcFlowTerminalType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[484]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowTerminalType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[484]); }
Ifc4x3_tc1::IfcFlowTerminalType::IfcFlowTerminalType(IfcEntityInstanceData&& e) : IfcDistributionFlowElementType(std::move(e)) { }
Ifc4x3_tc1::IfcFlowTerminalType::IfcFlowTerminalType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcFlowTreatmentDevice


const IfcParse::entity& Ifc4x3_tc1::IfcFlowTreatmentDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[485]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowTreatmentDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[485]); }
Ifc4x3_tc1::IfcFlowTreatmentDevice::IfcFlowTreatmentDevice(IfcEntityInstanceData&& e) : IfcDistributionFlowElement(std::move(e)) { }
Ifc4x3_tc1::IfcFlowTreatmentDevice::IfcFlowTreatmentDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcFlowTreatmentDeviceType


const IfcParse::entity& Ifc4x3_tc1::IfcFlowTreatmentDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[486]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFlowTreatmentDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[486]); }
Ifc4x3_tc1::IfcFlowTreatmentDeviceType::IfcFlowTreatmentDeviceType(IfcEntityInstanceData&& e) : IfcDistributionFlowElementType(std::move(e)) { }
Ifc4x3_tc1::IfcFlowTreatmentDeviceType::IfcFlowTreatmentDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcFooting
boost::optional< ::Ifc4x3_tc1::IfcFootingTypeEnum::Value > Ifc4x3_tc1::IfcFooting::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcFootingTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcFooting::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcFootingTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcFootingTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcFooting::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[490]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFooting::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[490]); }
Ifc4x3_tc1::IfcFooting::IfcFooting(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcFooting::IfcFooting(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcFootingTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcFootingTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcFootingType
::Ifc4x3_tc1::IfcFootingTypeEnum::Value Ifc4x3_tc1::IfcFootingType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcFootingTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcFootingType::setPredefinedType(::Ifc4x3_tc1::IfcFootingTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcFootingTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcFootingType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[491]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFootingType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[491]); }
Ifc4x3_tc1::IfcFootingType::IfcFootingType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcFootingType::IfcFootingType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcFootingTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcFootingTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcFurnishingElement


const IfcParse::entity& Ifc4x3_tc1::IfcFurnishingElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[495]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFurnishingElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[495]); }
Ifc4x3_tc1::IfcFurnishingElement::IfcFurnishingElement(IfcEntityInstanceData&& e) : IfcElement(std::move(e)) { }
Ifc4x3_tc1::IfcFurnishingElement::IfcFurnishingElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcFurnishingElementType


const IfcParse::entity& Ifc4x3_tc1::IfcFurnishingElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[496]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFurnishingElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[496]); }
Ifc4x3_tc1::IfcFurnishingElementType::IfcFurnishingElementType(IfcEntityInstanceData&& e) : IfcElementType(std::move(e)) { }
Ifc4x3_tc1::IfcFurnishingElementType::IfcFurnishingElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcFurniture
boost::optional< ::Ifc4x3_tc1::IfcFurnitureTypeEnum::Value > Ifc4x3_tc1::IfcFurniture::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcFurnitureTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcFurniture::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcFurnitureTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcFurnitureTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcFurniture::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[497]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFurniture::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[497]); }
Ifc4x3_tc1::IfcFurniture::IfcFurniture(IfcEntityInstanceData&& e) : IfcFurnishingElement(std::move(e)) { }
Ifc4x3_tc1::IfcFurniture::IfcFurniture(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcFurnitureTypeEnum::Value > v9_PredefinedType) : IfcFurnishingElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcFurnitureTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcFurnitureType
::Ifc4x3_tc1::IfcAssemblyPlaceEnum::Value Ifc4x3_tc1::IfcFurnitureType::AssemblyPlace() const {  return ::Ifc4x3_tc1::IfcAssemblyPlaceEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcFurnitureType::setAssemblyPlace(::Ifc4x3_tc1::IfcAssemblyPlaceEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcAssemblyPlaceEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }
boost::optional< ::Ifc4x3_tc1::IfcFurnitureTypeEnum::Value > Ifc4x3_tc1::IfcFurnitureType::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcFurnitureTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcFurnitureType::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcFurnitureTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcFurnitureTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcFurnitureType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[498]); }
const IfcParse::entity& Ifc4x3_tc1::IfcFurnitureType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[498]); }
Ifc4x3_tc1::IfcFurnitureType::IfcFurnitureType(IfcEntityInstanceData&& e) : IfcFurnishingElementType(std::move(e)) { }
Ifc4x3_tc1::IfcFurnitureType::IfcFurnitureType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcAssemblyPlaceEnum::Value v10_AssemblyPlace, boost::optional< ::Ifc4x3_tc1::IfcFurnitureTypeEnum::Value > v11_PredefinedType) : IfcFurnishingElementType(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcAssemblyPlaceEnum::Class(),(size_t)v10_AssemblyPlace))); if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcFurnitureTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcGeographicElement
boost::optional< ::Ifc4x3_tc1::IfcGeographicElementTypeEnum::Value > Ifc4x3_tc1::IfcGeographicElement::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcGeographicElementTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcGeographicElement::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcGeographicElementTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcGeographicElementTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcGeographicElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[500]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGeographicElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[500]); }
Ifc4x3_tc1::IfcGeographicElement::IfcGeographicElement(IfcEntityInstanceData&& e) : IfcElement(std::move(e)) { }
Ifc4x3_tc1::IfcGeographicElement::IfcGeographicElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcGeographicElementTypeEnum::Value > v9_PredefinedType) : IfcElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGeographicElementTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcGeographicElementType
::Ifc4x3_tc1::IfcGeographicElementTypeEnum::Value Ifc4x3_tc1::IfcGeographicElementType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcGeographicElementTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcGeographicElementType::setPredefinedType(::Ifc4x3_tc1::IfcGeographicElementTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcGeographicElementTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcGeographicElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[501]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGeographicElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[501]); }
Ifc4x3_tc1::IfcGeographicElementType::IfcGeographicElementType(IfcEntityInstanceData&& e) : IfcElementType(std::move(e)) { }
Ifc4x3_tc1::IfcGeographicElementType::IfcGeographicElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcGeographicElementTypeEnum::Value v10_PredefinedType) : IfcElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcGeographicElementTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcGeometricCurveSet


const IfcParse::entity& Ifc4x3_tc1::IfcGeometricCurveSet::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[503]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGeometricCurveSet::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[503]); }
Ifc4x3_tc1::IfcGeometricCurveSet::IfcGeometricCurveSet(IfcEntityInstanceData&& e) : IfcGeometricSet(std::move(e)) { }
Ifc4x3_tc1::IfcGeometricCurveSet::IfcGeometricCurveSet(aggregate_of< ::Ifc4x3_tc1::IfcGeometricSetSelect >::ptr v1_Elements) : IfcGeometricSet(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Elements)->generalize());; populate_derived(); }

// Function implementations for IfcGeometricRepresentationContext
int Ifc4x3_tc1::IfcGeometricRepresentationContext::CoordinateSpaceDimension() const {  int v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcGeometricRepresentationContext::setCoordinateSpaceDimension(int v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
boost::optional< double > Ifc4x3_tc1::IfcGeometricRepresentationContext::Precision() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcGeometricRepresentationContext::setPrecision(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
::Ifc4x3_tc1::IfcAxis2Placement* Ifc4x3_tc1::IfcGeometricRepresentationContext::WorldCoordinateSystem() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcAxis2Placement>(true); }
void Ifc4x3_tc1::IfcGeometricRepresentationContext::setWorldCoordinateSystem(::Ifc4x3_tc1::IfcAxis2Placement* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcGeometricRepresentationContext::TrueNorth() const { if(data_.get_attribute_value(5).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcGeometricRepresentationContext::setTrueNorth(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }

::Ifc4x3_tc1::IfcGeometricRepresentationSubContext::list::ptr Ifc4x3_tc1::IfcGeometricRepresentationContext::HasSubContexts() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[507], 6)->as<IfcGeometricRepresentationSubContext>(); }
::Ifc4x3_tc1::IfcCoordinateOperation::list::ptr Ifc4x3_tc1::IfcGeometricRepresentationContext::HasCoordinateOperation() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[243], 0)->as<IfcCoordinateOperation>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcGeometricRepresentationContext::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[505]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGeometricRepresentationContext::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[505]); }
Ifc4x3_tc1::IfcGeometricRepresentationContext::IfcGeometricRepresentationContext(IfcEntityInstanceData&& e) : IfcRepresentationContext(std::move(e)) { }
Ifc4x3_tc1::IfcGeometricRepresentationContext::IfcGeometricRepresentationContext(boost::optional< std::string > v1_ContextIdentifier, boost::optional< std::string > v2_ContextType, int v3_CoordinateSpaceDimension, boost::optional< double > v4_Precision, ::Ifc4x3_tc1::IfcAxis2Placement* v5_WorldCoordinateSystem, ::Ifc4x3_tc1::IfcDirection* v6_TrueNorth) : IfcRepresentationContext(IfcEntityInstanceData(storage_t(6))) {  if (v1_ContextIdentifier) {set_attribute_value(0, (*v1_ContextIdentifier)); } if (v2_ContextType) {set_attribute_value(1, (*v2_ContextType)); }set_attribute_value(2, (v3_CoordinateSpaceDimension)); if (v4_Precision) {set_attribute_value(3, (*v4_Precision)); }set_attribute_value(4, v5_WorldCoordinateSystem ? v5_WorldCoordinateSystem->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_TrueNorth ? v6_TrueNorth->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcGeometricRepresentationItem


const IfcParse::entity& Ifc4x3_tc1::IfcGeometricRepresentationItem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[506]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGeometricRepresentationItem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[506]); }
Ifc4x3_tc1::IfcGeometricRepresentationItem::IfcGeometricRepresentationItem(IfcEntityInstanceData&& e) : IfcRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcGeometricRepresentationItem::IfcGeometricRepresentationItem() : IfcRepresentationItem(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcGeometricRepresentationSubContext
::Ifc4x3_tc1::IfcGeometricRepresentationContext* Ifc4x3_tc1::IfcGeometricRepresentationSubContext::ParentContext() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcGeometricRepresentationContext>(true); }
void Ifc4x3_tc1::IfcGeometricRepresentationSubContext::setParentContext(::Ifc4x3_tc1::IfcGeometricRepresentationContext* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
boost::optional< double > Ifc4x3_tc1::IfcGeometricRepresentationSubContext::TargetScale() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcGeometricRepresentationSubContext::setTargetScale(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
::Ifc4x3_tc1::IfcGeometricProjectionEnum::Value Ifc4x3_tc1::IfcGeometricRepresentationSubContext::TargetView() const {  return ::Ifc4x3_tc1::IfcGeometricProjectionEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcGeometricRepresentationSubContext::setTargetView(::Ifc4x3_tc1::IfcGeometricProjectionEnum::Value v) { set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcGeometricProjectionEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(8); }
boost::optional< std::string > Ifc4x3_tc1::IfcGeometricRepresentationSubContext::UserDefinedTargetView() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcGeometricRepresentationSubContext::setUserDefinedTargetView(boost::optional< std::string > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcGeometricRepresentationSubContext::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[507]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGeometricRepresentationSubContext::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[507]); }
Ifc4x3_tc1::IfcGeometricRepresentationSubContext::IfcGeometricRepresentationSubContext(IfcEntityInstanceData&& e) : IfcGeometricRepresentationContext(std::move(e)) { }
Ifc4x3_tc1::IfcGeometricRepresentationSubContext::IfcGeometricRepresentationSubContext(boost::optional< std::string > v1_ContextIdentifier, boost::optional< std::string > v2_ContextType, ::Ifc4x3_tc1::IfcGeometricRepresentationContext* v7_ParentContext, boost::optional< double > v8_TargetScale, ::Ifc4x3_tc1::IfcGeometricProjectionEnum::Value v9_TargetView, boost::optional< std::string > v10_UserDefinedTargetView) : IfcGeometricRepresentationContext(IfcEntityInstanceData(storage_t(10))) {  if (v1_ContextIdentifier) {set_attribute_value(0, (*v1_ContextIdentifier)); } if (v2_ContextType) {set_attribute_value(1, (*v2_ContextType)); }set_attribute_value(6, v7_ParentContext ? v7_ParentContext->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_TargetScale) {set_attribute_value(7, (*v8_TargetScale)); }set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGeometricProjectionEnum::Class(),(size_t)v9_TargetView))); if (v10_UserDefinedTargetView) {set_attribute_value(9, (*v10_UserDefinedTargetView)); }; populate_derived(); }

// Function implementations for IfcGeometricSet
aggregate_of< ::Ifc4x3_tc1::IfcGeometricSetSelect >::ptr Ifc4x3_tc1::IfcGeometricSet::Elements() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcGeometricSetSelect >(); }
void Ifc4x3_tc1::IfcGeometricSet::setElements(aggregate_of< ::Ifc4x3_tc1::IfcGeometricSetSelect >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcGeometricSet::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[508]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGeometricSet::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[508]); }
Ifc4x3_tc1::IfcGeometricSet::IfcGeometricSet(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcGeometricSet::IfcGeometricSet(aggregate_of< ::Ifc4x3_tc1::IfcGeometricSetSelect >::ptr v1_Elements) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Elements)->generalize());; populate_derived(); }

// Function implementations for IfcGeomodel


const IfcParse::entity& Ifc4x3_tc1::IfcGeomodel::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[510]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGeomodel::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[510]); }
Ifc4x3_tc1::IfcGeomodel::IfcGeomodel(IfcEntityInstanceData&& e) : IfcGeotechnicalAssembly(std::move(e)) { }
Ifc4x3_tc1::IfcGeomodel::IfcGeomodel(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcGeotechnicalAssembly(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcGeoslice


const IfcParse::entity& Ifc4x3_tc1::IfcGeoslice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[511]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGeoslice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[511]); }
Ifc4x3_tc1::IfcGeoslice::IfcGeoslice(IfcEntityInstanceData&& e) : IfcGeotechnicalAssembly(std::move(e)) { }
Ifc4x3_tc1::IfcGeoslice::IfcGeoslice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcGeotechnicalAssembly(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcGeotechnicalAssembly


const IfcParse::entity& Ifc4x3_tc1::IfcGeotechnicalAssembly::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[512]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGeotechnicalAssembly::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[512]); }
Ifc4x3_tc1::IfcGeotechnicalAssembly::IfcGeotechnicalAssembly(IfcEntityInstanceData&& e) : IfcGeotechnicalElement(std::move(e)) { }
Ifc4x3_tc1::IfcGeotechnicalAssembly::IfcGeotechnicalAssembly(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcGeotechnicalElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcGeotechnicalElement


const IfcParse::entity& Ifc4x3_tc1::IfcGeotechnicalElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[513]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGeotechnicalElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[513]); }
Ifc4x3_tc1::IfcGeotechnicalElement::IfcGeotechnicalElement(IfcEntityInstanceData&& e) : IfcElement(std::move(e)) { }
Ifc4x3_tc1::IfcGeotechnicalElement::IfcGeotechnicalElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcGeotechnicalStratum
boost::optional< ::Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::Value > Ifc4x3_tc1::IfcGeotechnicalStratum::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcGeotechnicalStratum::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcGeotechnicalStratum::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[514]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGeotechnicalStratum::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[514]); }
Ifc4x3_tc1::IfcGeotechnicalStratum::IfcGeotechnicalStratum(IfcEntityInstanceData&& e) : IfcGeotechnicalElement(std::move(e)) { }
Ifc4x3_tc1::IfcGeotechnicalStratum::IfcGeotechnicalStratum(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::Value > v9_PredefinedType) : IfcGeotechnicalElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGeotechnicalStratumTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcGradientCurve
::Ifc4x3_tc1::IfcBoundedCurve* Ifc4x3_tc1::IfcGradientCurve::BaseCurve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcBoundedCurve>(true); }
void Ifc4x3_tc1::IfcGradientCurve::setBaseCurve(::Ifc4x3_tc1::IfcBoundedCurve* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcPlacement* Ifc4x3_tc1::IfcGradientCurve::EndPoint() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcPlacement>(true); }
void Ifc4x3_tc1::IfcGradientCurve::setEndPoint(::Ifc4x3_tc1::IfcPlacement* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcGradientCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[518]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGradientCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[518]); }
Ifc4x3_tc1::IfcGradientCurve::IfcGradientCurve(IfcEntityInstanceData&& e) : IfcCompositeCurve(std::move(e)) { }
Ifc4x3_tc1::IfcGradientCurve::IfcGradientCurve(aggregate_of< ::Ifc4x3_tc1::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect, ::Ifc4x3_tc1::IfcBoundedCurve* v3_BaseCurve, ::Ifc4x3_tc1::IfcPlacement* v4_EndPoint) : IfcCompositeCurve(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_Segments)->generalize());set_attribute_value(1, (v2_SelfIntersect));set_attribute_value(2, v3_BaseCurve ? v3_BaseCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_EndPoint ? v4_EndPoint->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcGrid
aggregate_of< ::Ifc4x3_tc1::IfcGridAxis >::ptr Ifc4x3_tc1::IfcGrid::UAxes() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(7); return es->as< ::Ifc4x3_tc1::IfcGridAxis >(); }
void Ifc4x3_tc1::IfcGrid::setUAxes(aggregate_of< ::Ifc4x3_tc1::IfcGridAxis >::ptr v) { set_attribute_value(7, (v)->generalize());if constexpr (false)unset_attribute_value(7); }
aggregate_of< ::Ifc4x3_tc1::IfcGridAxis >::ptr Ifc4x3_tc1::IfcGrid::VAxes() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(8); return es->as< ::Ifc4x3_tc1::IfcGridAxis >(); }
void Ifc4x3_tc1::IfcGrid::setVAxes(aggregate_of< ::Ifc4x3_tc1::IfcGridAxis >::ptr v) { set_attribute_value(8, (v)->generalize());if constexpr (false)unset_attribute_value(8); }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcGridAxis >::ptr > Ifc4x3_tc1::IfcGrid::WAxes() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(9); return es->as< ::Ifc4x3_tc1::IfcGridAxis >(); }
void Ifc4x3_tc1::IfcGrid::setWAxes(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcGridAxis >::ptr > v) { if (v) {set_attribute_value(9, (*v)->generalize());} else {unset_attribute_value(9);} }
boost::optional< ::Ifc4x3_tc1::IfcGridTypeEnum::Value > Ifc4x3_tc1::IfcGrid::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcGridTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcGrid::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcGridTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcGridTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcGrid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[519]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGrid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[519]); }
Ifc4x3_tc1::IfcGrid::IfcGrid(IfcEntityInstanceData&& e) : IfcPositioningElement(std::move(e)) { }
Ifc4x3_tc1::IfcGrid::IfcGrid(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, aggregate_of< ::Ifc4x3_tc1::IfcGridAxis >::ptr v8_UAxes, aggregate_of< ::Ifc4x3_tc1::IfcGridAxis >::ptr v9_VAxes, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcGridAxis >::ptr > v10_WAxes, boost::optional< ::Ifc4x3_tc1::IfcGridTypeEnum::Value > v11_PredefinedType) : IfcPositioningElement(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (v8_UAxes)->generalize());set_attribute_value(8, (v9_VAxes)->generalize()); if (v10_WAxes) {set_attribute_value(9, (*v10_WAxes)->generalize()); } if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcGridTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcGridAxis
boost::optional< std::string > Ifc4x3_tc1::IfcGridAxis::AxisTag() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcGridAxis::setAxisTag(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcGridAxis::AxisCurve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcGridAxis::setAxisCurve(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
bool Ifc4x3_tc1::IfcGridAxis::SameSense() const {  bool v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcGridAxis::setSameSense(bool v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }

::Ifc4x3_tc1::IfcGrid::list::ptr Ifc4x3_tc1::IfcGridAxis::PartOfW() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[519], 9)->as<IfcGrid>(); }
::Ifc4x3_tc1::IfcGrid::list::ptr Ifc4x3_tc1::IfcGridAxis::PartOfV() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[519], 8)->as<IfcGrid>(); }
::Ifc4x3_tc1::IfcGrid::list::ptr Ifc4x3_tc1::IfcGridAxis::PartOfU() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[519], 7)->as<IfcGrid>(); }
::Ifc4x3_tc1::IfcVirtualGridIntersection::list::ptr Ifc4x3_tc1::IfcGridAxis::HasIntersections() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[1274], 0)->as<IfcVirtualGridIntersection>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcGridAxis::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[520]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGridAxis::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[520]); }
Ifc4x3_tc1::IfcGridAxis::IfcGridAxis(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcGridAxis::IfcGridAxis(boost::optional< std::string > v1_AxisTag, ::Ifc4x3_tc1::IfcCurve* v2_AxisCurve, bool v3_SameSense) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(3))) {  if (v1_AxisTag) {set_attribute_value(0, (*v1_AxisTag)); }set_attribute_value(1, v2_AxisCurve ? v2_AxisCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, (v3_SameSense));; populate_derived(); }

// Function implementations for IfcGridPlacement
::Ifc4x3_tc1::IfcVirtualGridIntersection* Ifc4x3_tc1::IfcGridPlacement::PlacementLocation() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcVirtualGridIntersection>(true); }
void Ifc4x3_tc1::IfcGridPlacement::setPlacementLocation(::Ifc4x3_tc1::IfcVirtualGridIntersection* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcGridPlacementDirectionSelect* Ifc4x3_tc1::IfcGridPlacement::PlacementRefDirection() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcGridPlacementDirectionSelect>(true); }
void Ifc4x3_tc1::IfcGridPlacement::setPlacementRefDirection(::Ifc4x3_tc1::IfcGridPlacementDirectionSelect* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcGridPlacement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[521]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGridPlacement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[521]); }
Ifc4x3_tc1::IfcGridPlacement::IfcGridPlacement(IfcEntityInstanceData&& e) : IfcObjectPlacement(std::move(e)) { }
Ifc4x3_tc1::IfcGridPlacement::IfcGridPlacement(::Ifc4x3_tc1::IfcObjectPlacement* v1_PlacementRelTo, ::Ifc4x3_tc1::IfcVirtualGridIntersection* v2_PlacementLocation, ::Ifc4x3_tc1::IfcGridPlacementDirectionSelect* v3_PlacementRefDirection) : IfcObjectPlacement(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_PlacementRelTo ? v1_PlacementRelTo->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_PlacementLocation ? v2_PlacementLocation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_PlacementRefDirection ? v3_PlacementRefDirection->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcGroup

::Ifc4x3_tc1::IfcRelAssignsToGroup::list::ptr Ifc4x3_tc1::IfcGroup::IsGroupedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[901], 6)->as<IfcRelAssignsToGroup>(); }
::Ifc4x3_tc1::IfcRelReferencedInSpatialStructure::list::ptr Ifc4x3_tc1::IfcGroup::ReferencedInStructures() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[940], 4)->as<IfcRelReferencedInSpatialStructure>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcGroup::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[524]); }
const IfcParse::entity& Ifc4x3_tc1::IfcGroup::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[524]); }
Ifc4x3_tc1::IfcGroup::IfcGroup(IfcEntityInstanceData&& e) : IfcObject(std::move(e)) { }
Ifc4x3_tc1::IfcGroup::IfcGroup(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType) : IfcObject(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }; populate_derived(); }

// Function implementations for IfcHalfSpaceSolid
::Ifc4x3_tc1::IfcSurface* Ifc4x3_tc1::IfcHalfSpaceSolid::BaseSurface() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcSurface>(true); }
void Ifc4x3_tc1::IfcHalfSpaceSolid::setBaseSurface(::Ifc4x3_tc1::IfcSurface* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
bool Ifc4x3_tc1::IfcHalfSpaceSolid::AgreementFlag() const {  bool v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcHalfSpaceSolid::setAgreementFlag(bool v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcHalfSpaceSolid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[525]); }
const IfcParse::entity& Ifc4x3_tc1::IfcHalfSpaceSolid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[525]); }
Ifc4x3_tc1::IfcHalfSpaceSolid::IfcHalfSpaceSolid(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcHalfSpaceSolid::IfcHalfSpaceSolid(::Ifc4x3_tc1::IfcSurface* v1_BaseSurface, bool v2_AgreementFlag) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_BaseSurface ? v1_BaseSurface->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_AgreementFlag));; populate_derived(); }

// Function implementations for IfcHeatExchanger
boost::optional< ::Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Value > Ifc4x3_tc1::IfcHeatExchanger::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcHeatExchangerTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcHeatExchanger::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcHeatExchanger::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[527]); }
const IfcParse::entity& Ifc4x3_tc1::IfcHeatExchanger::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[527]); }
Ifc4x3_tc1::IfcHeatExchanger::IfcHeatExchanger(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcHeatExchanger::IfcHeatExchanger(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcHeatExchangerType
::Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Value Ifc4x3_tc1::IfcHeatExchangerType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcHeatExchangerTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcHeatExchangerType::setPredefinedType(::Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcHeatExchangerType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[528]); }
const IfcParse::entity& Ifc4x3_tc1::IfcHeatExchangerType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[528]); }
Ifc4x3_tc1::IfcHeatExchangerType::IfcHeatExchangerType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcHeatExchangerType::IfcHeatExchangerType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcHeatExchangerTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcHumidifier
boost::optional< ::Ifc4x3_tc1::IfcHumidifierTypeEnum::Value > Ifc4x3_tc1::IfcHumidifier::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcHumidifierTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcHumidifier::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcHumidifierTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcHumidifierTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcHumidifier::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[532]); }
const IfcParse::entity& Ifc4x3_tc1::IfcHumidifier::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[532]); }
Ifc4x3_tc1::IfcHumidifier::IfcHumidifier(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcHumidifier::IfcHumidifier(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcHumidifierTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcHumidifierTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcHumidifierType
::Ifc4x3_tc1::IfcHumidifierTypeEnum::Value Ifc4x3_tc1::IfcHumidifierType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcHumidifierTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcHumidifierType::setPredefinedType(::Ifc4x3_tc1::IfcHumidifierTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcHumidifierTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcHumidifierType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[533]); }
const IfcParse::entity& Ifc4x3_tc1::IfcHumidifierType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[533]); }
Ifc4x3_tc1::IfcHumidifierType::IfcHumidifierType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcHumidifierType::IfcHumidifierType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcHumidifierTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcHumidifierTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcIShapeProfileDef
double Ifc4x3_tc1::IfcIShapeProfileDef::OverallWidth() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcIShapeProfileDef::setOverallWidth(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcIShapeProfileDef::OverallDepth() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcIShapeProfileDef::setOverallDepth(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
double Ifc4x3_tc1::IfcIShapeProfileDef::WebThickness() const {  double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcIShapeProfileDef::setWebThickness(double v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
double Ifc4x3_tc1::IfcIShapeProfileDef::FlangeThickness() const {  double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcIShapeProfileDef::setFlangeThickness(double v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
boost::optional< double > Ifc4x3_tc1::IfcIShapeProfileDef::FilletRadius() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcIShapeProfileDef::setFilletRadius(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< double > Ifc4x3_tc1::IfcIShapeProfileDef::FlangeEdgeRadius() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcIShapeProfileDef::setFlangeEdgeRadius(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< double > Ifc4x3_tc1::IfcIShapeProfileDef::FlangeSlope() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcIShapeProfileDef::setFlangeSlope(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcIShapeProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[562]); }
const IfcParse::entity& Ifc4x3_tc1::IfcIShapeProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[562]); }
Ifc4x3_tc1::IfcIShapeProfileDef::IfcIShapeProfileDef(IfcEntityInstanceData&& e) : IfcParameterizedProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcIShapeProfileDef::IfcIShapeProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_OverallWidth, double v5_OverallDepth, double v6_WebThickness, double v7_FlangeThickness, boost::optional< double > v8_FilletRadius, boost::optional< double > v9_FlangeEdgeRadius, boost::optional< double > v10_FlangeSlope) : IfcParameterizedProfileDef(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_OverallWidth));set_attribute_value(4, (v5_OverallDepth));set_attribute_value(5, (v6_WebThickness));set_attribute_value(6, (v7_FlangeThickness)); if (v8_FilletRadius) {set_attribute_value(7, (*v8_FilletRadius)); } if (v9_FlangeEdgeRadius) {set_attribute_value(8, (*v9_FlangeEdgeRadius)); } if (v10_FlangeSlope) {set_attribute_value(9, (*v10_FlangeSlope)); }; populate_derived(); }

// Function implementations for IfcImageTexture
std::string Ifc4x3_tc1::IfcImageTexture::URLReference() const {  std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcImageTexture::setURLReference(std::string v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcImageTexture::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[537]); }
const IfcParse::entity& Ifc4x3_tc1::IfcImageTexture::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[537]); }
Ifc4x3_tc1::IfcImageTexture::IfcImageTexture(IfcEntityInstanceData&& e) : IfcSurfaceTexture(std::move(e)) { }
Ifc4x3_tc1::IfcImageTexture::IfcImageTexture(bool v1_RepeatS, bool v2_RepeatT, boost::optional< std::string > v3_Mode, ::Ifc4x3_tc1::IfcCartesianTransformationOperator2D* v4_TextureTransform, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_Parameter, std::string v6_URLReference) : IfcSurfaceTexture(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_RepeatS));set_attribute_value(1, (v2_RepeatT)); if (v3_Mode) {set_attribute_value(2, (*v3_Mode)); }set_attribute_value(3, v4_TextureTransform ? v4_TextureTransform->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_Parameter) {set_attribute_value(4, (*v5_Parameter)); }set_attribute_value(5, (v6_URLReference));; populate_derived(); }

// Function implementations for IfcImpactProtectionDevice
boost::optional< ::Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Value > Ifc4x3_tc1::IfcImpactProtectionDevice::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcImpactProtectionDevice::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcImpactProtectionDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[538]); }
const IfcParse::entity& Ifc4x3_tc1::IfcImpactProtectionDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[538]); }
Ifc4x3_tc1::IfcImpactProtectionDevice::IfcImpactProtectionDevice(IfcEntityInstanceData&& e) : IfcElementComponent(std::move(e)) { }
Ifc4x3_tc1::IfcImpactProtectionDevice::IfcImpactProtectionDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Value > v9_PredefinedType) : IfcElementComponent(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcImpactProtectionDeviceType
::Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Value Ifc4x3_tc1::IfcImpactProtectionDeviceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcImpactProtectionDeviceType::setPredefinedType(::Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcImpactProtectionDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[539]); }
const IfcParse::entity& Ifc4x3_tc1::IfcImpactProtectionDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[539]); }
Ifc4x3_tc1::IfcImpactProtectionDeviceType::IfcImpactProtectionDeviceType(IfcEntityInstanceData&& e) : IfcElementComponentType(std::move(e)) { }
Ifc4x3_tc1::IfcImpactProtectionDeviceType::IfcImpactProtectionDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Value v10_PredefinedType) : IfcElementComponentType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcImpactProtectionDeviceTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcIndexedColourMap
::Ifc4x3_tc1::IfcTessellatedFaceSet* Ifc4x3_tc1::IfcIndexedColourMap::MappedTo() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcTessellatedFaceSet>(true); }
void Ifc4x3_tc1::IfcIndexedColourMap::setMappedTo(::Ifc4x3_tc1::IfcTessellatedFaceSet* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
boost::optional< double > Ifc4x3_tc1::IfcIndexedColourMap::Opacity() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcIndexedColourMap::setOpacity(boost::optional< double > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
::Ifc4x3_tc1::IfcColourRgbList* Ifc4x3_tc1::IfcIndexedColourMap::Colours() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcColourRgbList>(true); }
void Ifc4x3_tc1::IfcIndexedColourMap::setColours(::Ifc4x3_tc1::IfcColourRgbList* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
std::vector< int > /*[1:?]*/ Ifc4x3_tc1::IfcIndexedColourMap::ColourIndex() const {  std::vector< int > /*[1:?]*/ v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcIndexedColourMap::setColourIndex(std::vector< int > /*[1:?]*/ v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcIndexedColourMap::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[541]); }
const IfcParse::entity& Ifc4x3_tc1::IfcIndexedColourMap::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[541]); }
Ifc4x3_tc1::IfcIndexedColourMap::IfcIndexedColourMap(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcIndexedColourMap::IfcIndexedColourMap(::Ifc4x3_tc1::IfcTessellatedFaceSet* v1_MappedTo, boost::optional< double > v2_Opacity, ::Ifc4x3_tc1::IfcColourRgbList* v3_Colours, std::vector< int > /*[1:?]*/ v4_ColourIndex) : IfcPresentationItem(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_MappedTo ? v1_MappedTo->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_Opacity) {set_attribute_value(1, (*v2_Opacity)); }set_attribute_value(2, v3_Colours ? v3_Colours->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_ColourIndex));; populate_derived(); }

// Function implementations for IfcIndexedPolyCurve
::Ifc4x3_tc1::IfcCartesianPointList* Ifc4x3_tc1::IfcIndexedPolyCurve::Points() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCartesianPointList>(true); }
void Ifc4x3_tc1::IfcIndexedPolyCurve::setPoints(::Ifc4x3_tc1::IfcCartesianPointList* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcSegmentIndexSelect >::ptr > Ifc4x3_tc1::IfcIndexedPolyCurve::Segments() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcSegmentIndexSelect >(); }
void Ifc4x3_tc1::IfcIndexedPolyCurve::setSegments(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcSegmentIndexSelect >::ptr > v) { if (v) {set_attribute_value(1, (*v)->generalize());} else {unset_attribute_value(1);} }
boost::optional< bool > Ifc4x3_tc1::IfcIndexedPolyCurve::SelfIntersect() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } bool v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcIndexedPolyCurve::setSelfIntersect(boost::optional< bool > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }


const IfcParse::entity& Ifc4x3_tc1::IfcIndexedPolyCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[542]); }
const IfcParse::entity& Ifc4x3_tc1::IfcIndexedPolyCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[542]); }
Ifc4x3_tc1::IfcIndexedPolyCurve::IfcIndexedPolyCurve(IfcEntityInstanceData&& e) : IfcBoundedCurve(std::move(e)) { }
Ifc4x3_tc1::IfcIndexedPolyCurve::IfcIndexedPolyCurve(::Ifc4x3_tc1::IfcCartesianPointList* v1_Points, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcSegmentIndexSelect >::ptr > v2_Segments, boost::optional< bool > v3_SelfIntersect) : IfcBoundedCurve(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Points ? v1_Points->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_Segments) {set_attribute_value(1, (*v2_Segments)->generalize()); } if (v3_SelfIntersect) {set_attribute_value(2, (*v3_SelfIntersect)); }; populate_derived(); }

// Function implementations for IfcIndexedPolygonalFace
std::vector< int > /*[3:?]*/ Ifc4x3_tc1::IfcIndexedPolygonalFace::CoordIndex() const {  std::vector< int > /*[3:?]*/ v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcIndexedPolygonalFace::setCoordIndex(std::vector< int > /*[3:?]*/ v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }

::Ifc4x3_tc1::IfcPolygonalFaceSet::list::ptr Ifc4x3_tc1::IfcIndexedPolygonalFace::ToFaceSet() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[768], 2)->as<IfcPolygonalFaceSet>(); }
::Ifc4x3_tc1::IfcTextureCoordinateIndices::list::ptr Ifc4x3_tc1::IfcIndexedPolygonalFace::HasTexCoords() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[1191], 1)->as<IfcTextureCoordinateIndices>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcIndexedPolygonalFace::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[543]); }
const IfcParse::entity& Ifc4x3_tc1::IfcIndexedPolygonalFace::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[543]); }
Ifc4x3_tc1::IfcIndexedPolygonalFace::IfcIndexedPolygonalFace(IfcEntityInstanceData&& e) : IfcTessellatedItem(std::move(e)) { }
Ifc4x3_tc1::IfcIndexedPolygonalFace::IfcIndexedPolygonalFace(std::vector< int > /*[3:?]*/ v1_CoordIndex) : IfcTessellatedItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_CoordIndex));; populate_derived(); }

// Function implementations for IfcIndexedPolygonalFaceWithVoids
std::vector< std::vector< int > > Ifc4x3_tc1::IfcIndexedPolygonalFaceWithVoids::InnerCoordIndices() const {  std::vector< std::vector< int > > v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcIndexedPolygonalFaceWithVoids::setInnerCoordIndices(std::vector< std::vector< int > > v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcIndexedPolygonalFaceWithVoids::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[544]); }
const IfcParse::entity& Ifc4x3_tc1::IfcIndexedPolygonalFaceWithVoids::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[544]); }
Ifc4x3_tc1::IfcIndexedPolygonalFaceWithVoids::IfcIndexedPolygonalFaceWithVoids(IfcEntityInstanceData&& e) : IfcIndexedPolygonalFace(std::move(e)) { }
Ifc4x3_tc1::IfcIndexedPolygonalFaceWithVoids::IfcIndexedPolygonalFaceWithVoids(std::vector< int > /*[3:?]*/ v1_CoordIndex, std::vector< std::vector< int > > v2_InnerCoordIndices) : IfcIndexedPolygonalFace(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_CoordIndex));set_attribute_value(1, (v2_InnerCoordIndices));; populate_derived(); }

// Function implementations for IfcIndexedPolygonalTextureMap
aggregate_of< ::Ifc4x3_tc1::IfcTextureCoordinateIndices >::ptr Ifc4x3_tc1::IfcIndexedPolygonalTextureMap::TexCoordIndices() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(3); return es->as< ::Ifc4x3_tc1::IfcTextureCoordinateIndices >(); }
void Ifc4x3_tc1::IfcIndexedPolygonalTextureMap::setTexCoordIndices(aggregate_of< ::Ifc4x3_tc1::IfcTextureCoordinateIndices >::ptr v) { set_attribute_value(3, (v)->generalize());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcIndexedPolygonalTextureMap::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[545]); }
const IfcParse::entity& Ifc4x3_tc1::IfcIndexedPolygonalTextureMap::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[545]); }
Ifc4x3_tc1::IfcIndexedPolygonalTextureMap::IfcIndexedPolygonalTextureMap(IfcEntityInstanceData&& e) : IfcIndexedTextureMap(std::move(e)) { }
Ifc4x3_tc1::IfcIndexedPolygonalTextureMap::IfcIndexedPolygonalTextureMap(aggregate_of< ::Ifc4x3_tc1::IfcSurfaceTexture >::ptr v1_Maps, ::Ifc4x3_tc1::IfcTessellatedFaceSet* v2_MappedTo, ::Ifc4x3_tc1::IfcTextureVertexList* v3_TexCoords, aggregate_of< ::Ifc4x3_tc1::IfcTextureCoordinateIndices >::ptr v4_TexCoordIndices) : IfcIndexedTextureMap(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_Maps)->generalize());set_attribute_value(1, v2_MappedTo ? v2_MappedTo->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_TexCoords ? v3_TexCoords->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_TexCoordIndices)->generalize());; populate_derived(); }

// Function implementations for IfcIndexedTextureMap
::Ifc4x3_tc1::IfcTessellatedFaceSet* Ifc4x3_tc1::IfcIndexedTextureMap::MappedTo() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcTessellatedFaceSet>(true); }
void Ifc4x3_tc1::IfcIndexedTextureMap::setMappedTo(::Ifc4x3_tc1::IfcTessellatedFaceSet* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcTextureVertexList* Ifc4x3_tc1::IfcIndexedTextureMap::TexCoords() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcTextureVertexList>(true); }
void Ifc4x3_tc1::IfcIndexedTextureMap::setTexCoords(::Ifc4x3_tc1::IfcTextureVertexList* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcIndexedTextureMap::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[546]); }
const IfcParse::entity& Ifc4x3_tc1::IfcIndexedTextureMap::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[546]); }
Ifc4x3_tc1::IfcIndexedTextureMap::IfcIndexedTextureMap(IfcEntityInstanceData&& e) : IfcTextureCoordinate(std::move(e)) { }
Ifc4x3_tc1::IfcIndexedTextureMap::IfcIndexedTextureMap(aggregate_of< ::Ifc4x3_tc1::IfcSurfaceTexture >::ptr v1_Maps, ::Ifc4x3_tc1::IfcTessellatedFaceSet* v2_MappedTo, ::Ifc4x3_tc1::IfcTextureVertexList* v3_TexCoords) : IfcTextureCoordinate(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_Maps)->generalize());set_attribute_value(1, v2_MappedTo ? v2_MappedTo->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_TexCoords ? v3_TexCoords->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcIndexedTriangleTextureMap
boost::optional< std::vector< std::vector< int > > > Ifc4x3_tc1::IfcIndexedTriangleTextureMap::TexCoordIndex() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::vector< std::vector< int > > v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcIndexedTriangleTextureMap::setTexCoordIndex(boost::optional< std::vector< std::vector< int > > > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcIndexedTriangleTextureMap::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[547]); }
const IfcParse::entity& Ifc4x3_tc1::IfcIndexedTriangleTextureMap::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[547]); }
Ifc4x3_tc1::IfcIndexedTriangleTextureMap::IfcIndexedTriangleTextureMap(IfcEntityInstanceData&& e) : IfcIndexedTextureMap(std::move(e)) { }
Ifc4x3_tc1::IfcIndexedTriangleTextureMap::IfcIndexedTriangleTextureMap(aggregate_of< ::Ifc4x3_tc1::IfcSurfaceTexture >::ptr v1_Maps, ::Ifc4x3_tc1::IfcTessellatedFaceSet* v2_MappedTo, ::Ifc4x3_tc1::IfcTextureVertexList* v3_TexCoords, boost::optional< std::vector< std::vector< int > > > v4_TexCoordIndex) : IfcIndexedTextureMap(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_Maps)->generalize());set_attribute_value(1, v2_MappedTo ? v2_MappedTo->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_TexCoords ? v3_TexCoords->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v4_TexCoordIndex) {set_attribute_value(3, (*v4_TexCoordIndex)); }; populate_derived(); }

// Function implementations for IfcInterceptor
boost::optional< ::Ifc4x3_tc1::IfcInterceptorTypeEnum::Value > Ifc4x3_tc1::IfcInterceptor::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcInterceptorTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcInterceptor::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcInterceptorTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcInterceptorTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcInterceptor::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[551]); }
const IfcParse::entity& Ifc4x3_tc1::IfcInterceptor::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[551]); }
Ifc4x3_tc1::IfcInterceptor::IfcInterceptor(IfcEntityInstanceData&& e) : IfcFlowTreatmentDevice(std::move(e)) { }
Ifc4x3_tc1::IfcInterceptor::IfcInterceptor(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcInterceptorTypeEnum::Value > v9_PredefinedType) : IfcFlowTreatmentDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcInterceptorTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcInterceptorType
::Ifc4x3_tc1::IfcInterceptorTypeEnum::Value Ifc4x3_tc1::IfcInterceptorType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcInterceptorTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcInterceptorType::setPredefinedType(::Ifc4x3_tc1::IfcInterceptorTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcInterceptorTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcInterceptorType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[552]); }
const IfcParse::entity& Ifc4x3_tc1::IfcInterceptorType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[552]); }
Ifc4x3_tc1::IfcInterceptorType::IfcInterceptorType(IfcEntityInstanceData&& e) : IfcFlowTreatmentDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcInterceptorType::IfcInterceptorType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcInterceptorTypeEnum::Value v10_PredefinedType) : IfcFlowTreatmentDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcInterceptorTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcIntersectionCurve


const IfcParse::entity& Ifc4x3_tc1::IfcIntersectionCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[556]); }
const IfcParse::entity& Ifc4x3_tc1::IfcIntersectionCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[556]); }
Ifc4x3_tc1::IfcIntersectionCurve::IfcIntersectionCurve(IfcEntityInstanceData&& e) : IfcSurfaceCurve(std::move(e)) { }
Ifc4x3_tc1::IfcIntersectionCurve::IfcIntersectionCurve(::Ifc4x3_tc1::IfcCurve* v1_Curve3D, aggregate_of< ::Ifc4x3_tc1::IfcPcurve >::ptr v2_AssociatedGeometry, ::Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Value v3_MasterRepresentation) : IfcSurfaceCurve(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Curve3D ? v1_Curve3D->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_AssociatedGeometry)->generalize());set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Class(),(size_t)v3_MasterRepresentation)));; populate_derived(); }

// Function implementations for IfcInventory
boost::optional< ::Ifc4x3_tc1::IfcInventoryTypeEnum::Value > Ifc4x3_tc1::IfcInventory::PredefinedType() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcInventoryTypeEnum::FromString(data_.get_attribute_value(5)); }
void Ifc4x3_tc1::IfcInventory::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcInventoryTypeEnum::Value > v) { if (v) {set_attribute_value(5, EnumerationReference(&::Ifc4x3_tc1::IfcInventoryTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(5);} }
::Ifc4x3_tc1::IfcActorSelect* Ifc4x3_tc1::IfcInventory::Jurisdiction() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcActorSelect>(true); }
void Ifc4x3_tc1::IfcInventory::setJurisdiction(::Ifc4x3_tc1::IfcActorSelect* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPerson >::ptr > Ifc4x3_tc1::IfcInventory::ResponsiblePersons() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(7); return es->as< ::Ifc4x3_tc1::IfcPerson >(); }
void Ifc4x3_tc1::IfcInventory::setResponsiblePersons(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPerson >::ptr > v) { if (v) {set_attribute_value(7, (*v)->generalize());} else {unset_attribute_value(7);} }
boost::optional< std::string > Ifc4x3_tc1::IfcInventory::LastUpdateDate() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcInventory::setLastUpdateDate(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
::Ifc4x3_tc1::IfcCostValue* Ifc4x3_tc1::IfcInventory::CurrentValue() const { if(data_.get_attribute_value(9).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(9)))->as<::Ifc4x3_tc1::IfcCostValue>(true); }
void Ifc4x3_tc1::IfcInventory::setCurrentValue(::Ifc4x3_tc1::IfcCostValue* v) { set_attribute_value(9, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(9); }
::Ifc4x3_tc1::IfcCostValue* Ifc4x3_tc1::IfcInventory::OriginalValue() const { if(data_.get_attribute_value(10).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(10)))->as<::Ifc4x3_tc1::IfcCostValue>(true); }
void Ifc4x3_tc1::IfcInventory::setOriginalValue(::Ifc4x3_tc1::IfcCostValue* v) { set_attribute_value(10, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(10); }


const IfcParse::entity& Ifc4x3_tc1::IfcInventory::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[557]); }
const IfcParse::entity& Ifc4x3_tc1::IfcInventory::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[557]); }
Ifc4x3_tc1::IfcInventory::IfcInventory(IfcEntityInstanceData&& e) : IfcGroup(std::move(e)) { }
Ifc4x3_tc1::IfcInventory::IfcInventory(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< ::Ifc4x3_tc1::IfcInventoryTypeEnum::Value > v6_PredefinedType, ::Ifc4x3_tc1::IfcActorSelect* v7_Jurisdiction, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPerson >::ptr > v8_ResponsiblePersons, boost::optional< std::string > v9_LastUpdateDate, ::Ifc4x3_tc1::IfcCostValue* v10_CurrentValue, ::Ifc4x3_tc1::IfcCostValue* v11_OriginalValue) : IfcGroup(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_PredefinedType) {set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcInventoryTypeEnum::Class(),(size_t)*v6_PredefinedType))); }set_attribute_value(6, v7_Jurisdiction ? v7_Jurisdiction->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_ResponsiblePersons) {set_attribute_value(7, (*v8_ResponsiblePersons)->generalize()); } if (v9_LastUpdateDate) {set_attribute_value(8, (*v9_LastUpdateDate)); }set_attribute_value(9, v10_CurrentValue ? v10_CurrentValue->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(10, v11_OriginalValue ? v11_OriginalValue->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcIrregularTimeSeries
aggregate_of< ::Ifc4x3_tc1::IfcIrregularTimeSeriesValue >::ptr Ifc4x3_tc1::IfcIrregularTimeSeries::Values() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(8); return es->as< ::Ifc4x3_tc1::IfcIrregularTimeSeriesValue >(); }
void Ifc4x3_tc1::IfcIrregularTimeSeries::setValues(aggregate_of< ::Ifc4x3_tc1::IfcIrregularTimeSeriesValue >::ptr v) { set_attribute_value(8, (v)->generalize());if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcIrregularTimeSeries::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[560]); }
const IfcParse::entity& Ifc4x3_tc1::IfcIrregularTimeSeries::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[560]); }
Ifc4x3_tc1::IfcIrregularTimeSeries::IfcIrregularTimeSeries(IfcEntityInstanceData&& e) : IfcTimeSeries(std::move(e)) { }
Ifc4x3_tc1::IfcIrregularTimeSeries::IfcIrregularTimeSeries(std::string v1_Name, boost::optional< std::string > v2_Description, std::string v3_StartTime, std::string v4_EndTime, ::Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Value v5_TimeSeriesDataType, ::Ifc4x3_tc1::IfcDataOriginEnum::Value v6_DataOrigin, boost::optional< std::string > v7_UserDefinedDataOrigin, ::Ifc4x3_tc1::IfcUnit* v8_Unit, aggregate_of< ::Ifc4x3_tc1::IfcIrregularTimeSeriesValue >::ptr v9_Values) : IfcTimeSeries(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_StartTime));set_attribute_value(3, (v4_EndTime));set_attribute_value(4, (EnumerationReference(&::Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Class(),(size_t)v5_TimeSeriesDataType)));set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcDataOriginEnum::Class(),(size_t)v6_DataOrigin))); if (v7_UserDefinedDataOrigin) {set_attribute_value(6, (*v7_UserDefinedDataOrigin)); }set_attribute_value(7, v8_Unit ? v8_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (v9_Values)->generalize());; populate_derived(); }

// Function implementations for IfcIrregularTimeSeriesValue
std::string Ifc4x3_tc1::IfcIrregularTimeSeriesValue::TimeStamp() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcIrregularTimeSeriesValue::setTimeStamp(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr Ifc4x3_tc1::IfcIrregularTimeSeriesValue::ListValues() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcValue >(); }
void Ifc4x3_tc1::IfcIrregularTimeSeriesValue::setListValues(aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcIrregularTimeSeriesValue::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[561]); }
const IfcParse::entity& Ifc4x3_tc1::IfcIrregularTimeSeriesValue::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[561]); }
Ifc4x3_tc1::IfcIrregularTimeSeriesValue::IfcIrregularTimeSeriesValue(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcIrregularTimeSeriesValue::IfcIrregularTimeSeriesValue(std::string v1_TimeStamp, aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr v2_ListValues) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_TimeStamp));set_attribute_value(1, (v2_ListValues)->generalize());; populate_derived(); }

// Function implementations for IfcJunctionBox
boost::optional< ::Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Value > Ifc4x3_tc1::IfcJunctionBox::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcJunctionBoxTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcJunctionBox::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcJunctionBox::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[564]); }
const IfcParse::entity& Ifc4x3_tc1::IfcJunctionBox::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[564]); }
Ifc4x3_tc1::IfcJunctionBox::IfcJunctionBox(IfcEntityInstanceData&& e) : IfcFlowFitting(std::move(e)) { }
Ifc4x3_tc1::IfcJunctionBox::IfcJunctionBox(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Value > v9_PredefinedType) : IfcFlowFitting(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcJunctionBoxType
::Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Value Ifc4x3_tc1::IfcJunctionBoxType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcJunctionBoxTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcJunctionBoxType::setPredefinedType(::Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcJunctionBoxType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[565]); }
const IfcParse::entity& Ifc4x3_tc1::IfcJunctionBoxType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[565]); }
Ifc4x3_tc1::IfcJunctionBoxType::IfcJunctionBoxType(IfcEntityInstanceData&& e) : IfcFlowFittingType(std::move(e)) { }
Ifc4x3_tc1::IfcJunctionBoxType::IfcJunctionBoxType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Value v10_PredefinedType) : IfcFlowFittingType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcJunctionBoxTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcKerb
boost::optional< ::Ifc4x3_tc1::IfcKerbTypeEnum::Value > Ifc4x3_tc1::IfcKerb::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcKerbTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcKerb::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcKerbTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcKerbTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcKerb::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[567]); }
const IfcParse::entity& Ifc4x3_tc1::IfcKerb::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[567]); }
Ifc4x3_tc1::IfcKerb::IfcKerb(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcKerb::IfcKerb(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcKerbTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcKerbTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcKerbType
::Ifc4x3_tc1::IfcKerbTypeEnum::Value Ifc4x3_tc1::IfcKerbType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcKerbTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcKerbType::setPredefinedType(::Ifc4x3_tc1::IfcKerbTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcKerbTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcKerbType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[568]); }
const IfcParse::entity& Ifc4x3_tc1::IfcKerbType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[568]); }
Ifc4x3_tc1::IfcKerbType::IfcKerbType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcKerbType::IfcKerbType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcKerbTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcKerbTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcLShapeProfileDef
double Ifc4x3_tc1::IfcLShapeProfileDef::Depth() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcLShapeProfileDef::setDepth(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
boost::optional< double > Ifc4x3_tc1::IfcLShapeProfileDef::Width() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcLShapeProfileDef::setWidth(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
double Ifc4x3_tc1::IfcLShapeProfileDef::Thickness() const {  double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcLShapeProfileDef::setThickness(double v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
boost::optional< double > Ifc4x3_tc1::IfcLShapeProfileDef::FilletRadius() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcLShapeProfileDef::setFilletRadius(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< double > Ifc4x3_tc1::IfcLShapeProfileDef::EdgeRadius() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcLShapeProfileDef::setEdgeRadius(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< double > Ifc4x3_tc1::IfcLShapeProfileDef::LegSlope() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcLShapeProfileDef::setLegSlope(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcLShapeProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[618]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLShapeProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[618]); }
Ifc4x3_tc1::IfcLShapeProfileDef::IfcLShapeProfileDef(IfcEntityInstanceData&& e) : IfcParameterizedProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcLShapeProfileDef::IfcLShapeProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_Depth, boost::optional< double > v5_Width, double v6_Thickness, boost::optional< double > v7_FilletRadius, boost::optional< double > v8_EdgeRadius, boost::optional< double > v9_LegSlope) : IfcParameterizedProfileDef(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Depth)); if (v5_Width) {set_attribute_value(4, (*v5_Width)); }set_attribute_value(5, (v6_Thickness)); if (v7_FilletRadius) {set_attribute_value(6, (*v7_FilletRadius)); } if (v8_EdgeRadius) {set_attribute_value(7, (*v8_EdgeRadius)); } if (v9_LegSlope) {set_attribute_value(8, (*v9_LegSlope)); }; populate_derived(); }

// Function implementations for IfcLaborResource
boost::optional< ::Ifc4x3_tc1::IfcLaborResourceTypeEnum::Value > Ifc4x3_tc1::IfcLaborResource::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcLaborResourceTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcLaborResource::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcLaborResourceTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcLaborResourceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcLaborResource::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[573]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLaborResource::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[573]); }
Ifc4x3_tc1::IfcLaborResource::IfcLaborResource(IfcEntityInstanceData&& e) : IfcConstructionResource(std::move(e)) { }
Ifc4x3_tc1::IfcLaborResource::IfcLaborResource(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_tc1::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_tc1::IfcLaborResourceTypeEnum::Value > v11_PredefinedType) : IfcConstructionResource(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_LongDescription) {set_attribute_value(6, (*v7_LongDescription)); }set_attribute_value(7, v8_Usage ? v8_Usage->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v9_BaseCosts) {set_attribute_value(8, (*v9_BaseCosts)->generalize()); }set_attribute_value(9, v10_BaseQuantity ? v10_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcLaborResourceTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcLaborResourceType
::Ifc4x3_tc1::IfcLaborResourceTypeEnum::Value Ifc4x3_tc1::IfcLaborResourceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcLaborResourceTypeEnum::FromString(data_.get_attribute_value(11)); }
void Ifc4x3_tc1::IfcLaborResourceType::setPredefinedType(::Ifc4x3_tc1::IfcLaborResourceTypeEnum::Value v) { set_attribute_value(11, EnumerationReference(&::Ifc4x3_tc1::IfcLaborResourceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(11); }


const IfcParse::entity& Ifc4x3_tc1::IfcLaborResourceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[574]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLaborResourceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[574]); }
Ifc4x3_tc1::IfcLaborResourceType::IfcLaborResourceType(IfcEntityInstanceData&& e) : IfcConstructionResourceType(std::move(e)) { }
Ifc4x3_tc1::IfcLaborResourceType::IfcLaborResourceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_tc1::IfcLaborResourceTypeEnum::Value v12_PredefinedType) : IfcConstructionResourceType(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_Identification) {set_attribute_value(6, (*v7_Identification)); } if (v8_LongDescription) {set_attribute_value(7, (*v8_LongDescription)); } if (v9_ResourceType) {set_attribute_value(8, (*v9_ResourceType)); } if (v10_BaseCosts) {set_attribute_value(9, (*v10_BaseCosts)->generalize()); }set_attribute_value(10, v11_BaseQuantity ? v11_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcLaborResourceTypeEnum::Class(),(size_t)v12_PredefinedType)));; populate_derived(); }

// Function implementations for IfcLagTime
::Ifc4x3_tc1::IfcTimeOrRatioSelect* Ifc4x3_tc1::IfcLagTime::LagValue() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcTimeOrRatioSelect>(true); }
void Ifc4x3_tc1::IfcLagTime::setLagValue(::Ifc4x3_tc1::IfcTimeOrRatioSelect* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
::Ifc4x3_tc1::IfcTaskDurationEnum::Value Ifc4x3_tc1::IfcLagTime::DurationType() const {  return ::Ifc4x3_tc1::IfcTaskDurationEnum::FromString(data_.get_attribute_value(4)); }
void Ifc4x3_tc1::IfcLagTime::setDurationType(::Ifc4x3_tc1::IfcTaskDurationEnum::Value v) { set_attribute_value(4, EnumerationReference(&::Ifc4x3_tc1::IfcTaskDurationEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcLagTime::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[576]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLagTime::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[576]); }
Ifc4x3_tc1::IfcLagTime::IfcLagTime(IfcEntityInstanceData&& e) : IfcSchedulingTime(std::move(e)) { }
Ifc4x3_tc1::IfcLagTime::IfcLagTime(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_tc1::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, ::Ifc4x3_tc1::IfcTimeOrRatioSelect* v4_LagValue, ::Ifc4x3_tc1::IfcTaskDurationEnum::Value v5_DurationType) : IfcSchedulingTime(IfcEntityInstanceData(storage_t(5))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_DataOrigin) {set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcDataOriginEnum::Class(),(size_t)*v2_DataOrigin))); } if (v3_UserDefinedDataOrigin) {set_attribute_value(2, (*v3_UserDefinedDataOrigin)); }set_attribute_value(3, v4_LagValue ? v4_LagValue->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, (EnumerationReference(&::Ifc4x3_tc1::IfcTaskDurationEnum::Class(),(size_t)v5_DurationType)));; populate_derived(); }

// Function implementations for IfcLamp
boost::optional< ::Ifc4x3_tc1::IfcLampTypeEnum::Value > Ifc4x3_tc1::IfcLamp::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcLampTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcLamp::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcLampTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcLampTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcLamp::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[577]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLamp::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[577]); }
Ifc4x3_tc1::IfcLamp::IfcLamp(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcLamp::IfcLamp(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcLampTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcLampTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcLampType
::Ifc4x3_tc1::IfcLampTypeEnum::Value Ifc4x3_tc1::IfcLampType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcLampTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcLampType::setPredefinedType(::Ifc4x3_tc1::IfcLampTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcLampTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcLampType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[578]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLampType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[578]); }
Ifc4x3_tc1::IfcLampType::IfcLampType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcLampType::IfcLampType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcLampTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcLampTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcLibraryInformation
std::string Ifc4x3_tc1::IfcLibraryInformation::Name() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcLibraryInformation::setName(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcLibraryInformation::Version() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcLibraryInformation::setVersion(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
::Ifc4x3_tc1::IfcActorSelect* Ifc4x3_tc1::IfcLibraryInformation::Publisher() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcActorSelect>(true); }
void Ifc4x3_tc1::IfcLibraryInformation::setPublisher(::Ifc4x3_tc1::IfcActorSelect* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
boost::optional< std::string > Ifc4x3_tc1::IfcLibraryInformation::VersionDate() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcLibraryInformation::setVersionDate(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< std::string > Ifc4x3_tc1::IfcLibraryInformation::Location() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcLibraryInformation::setLocation(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcLibraryInformation::Description() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcLibraryInformation::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }

::Ifc4x3_tc1::IfcRelAssociatesLibrary::list::ptr Ifc4x3_tc1::IfcLibraryInformation::LibraryInfoForObjects() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[911], 5)->as<IfcRelAssociatesLibrary>(); }
::Ifc4x3_tc1::IfcLibraryReference::list::ptr Ifc4x3_tc1::IfcLibraryInformation::HasLibraryReferences() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[585], 5)->as<IfcLibraryReference>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcLibraryInformation::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[584]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLibraryInformation::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[584]); }
Ifc4x3_tc1::IfcLibraryInformation::IfcLibraryInformation(IfcEntityInstanceData&& e) : IfcExternalInformation(std::move(e)) { }
Ifc4x3_tc1::IfcLibraryInformation::IfcLibraryInformation(std::string v1_Name, boost::optional< std::string > v2_Version, ::Ifc4x3_tc1::IfcActorSelect* v3_Publisher, boost::optional< std::string > v4_VersionDate, boost::optional< std::string > v5_Location, boost::optional< std::string > v6_Description) : IfcExternalInformation(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_Name)); if (v2_Version) {set_attribute_value(1, (*v2_Version)); }set_attribute_value(2, v3_Publisher ? v3_Publisher->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v4_VersionDate) {set_attribute_value(3, (*v4_VersionDate)); } if (v5_Location) {set_attribute_value(4, (*v5_Location)); } if (v6_Description) {set_attribute_value(5, (*v6_Description)); }; populate_derived(); }

// Function implementations for IfcLibraryReference
boost::optional< std::string > Ifc4x3_tc1::IfcLibraryReference::Description() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcLibraryReference::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< std::string > Ifc4x3_tc1::IfcLibraryReference::Language() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcLibraryReference::setLanguage(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
::Ifc4x3_tc1::IfcLibraryInformation* Ifc4x3_tc1::IfcLibraryReference::ReferencedLibrary() const { if(data_.get_attribute_value(5).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcLibraryInformation>(true); }
void Ifc4x3_tc1::IfcLibraryReference::setReferencedLibrary(::Ifc4x3_tc1::IfcLibraryInformation* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }

::Ifc4x3_tc1::IfcRelAssociatesLibrary::list::ptr Ifc4x3_tc1::IfcLibraryReference::LibraryRefForObjects() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[911], 5)->as<IfcRelAssociatesLibrary>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcLibraryReference::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[585]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLibraryReference::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[585]); }
Ifc4x3_tc1::IfcLibraryReference::IfcLibraryReference(IfcEntityInstanceData&& e) : IfcExternalReference(std::move(e)) { }
Ifc4x3_tc1::IfcLibraryReference::IfcLibraryReference(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_Language, ::Ifc4x3_tc1::IfcLibraryInformation* v6_ReferencedLibrary) : IfcExternalReference(IfcEntityInstanceData(storage_t(6))) {  if (v1_Location) {set_attribute_value(0, (*v1_Location)); } if (v2_Identification) {set_attribute_value(1, (*v2_Identification)); } if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_Language) {set_attribute_value(4, (*v5_Language)); }set_attribute_value(5, v6_ReferencedLibrary ? v6_ReferencedLibrary->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcLightDistributionData
double Ifc4x3_tc1::IfcLightDistributionData::MainPlaneAngle() const {  double v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcLightDistributionData::setMainPlaneAngle(double v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
std::vector< double > /*[1:?]*/ Ifc4x3_tc1::IfcLightDistributionData::SecondaryPlaneAngle() const {  std::vector< double > /*[1:?]*/ v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcLightDistributionData::setSecondaryPlaneAngle(std::vector< double > /*[1:?]*/ v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
std::vector< double > /*[1:?]*/ Ifc4x3_tc1::IfcLightDistributionData::LuminousIntensity() const {  std::vector< double > /*[1:?]*/ v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcLightDistributionData::setLuminousIntensity(std::vector< double > /*[1:?]*/ v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcLightDistributionData::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[588]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLightDistributionData::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[588]); }
Ifc4x3_tc1::IfcLightDistributionData::IfcLightDistributionData(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcLightDistributionData::IfcLightDistributionData(double v1_MainPlaneAngle, std::vector< double > /*[1:?]*/ v2_SecondaryPlaneAngle, std::vector< double > /*[1:?]*/ v3_LuminousIntensity) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_MainPlaneAngle));set_attribute_value(1, (v2_SecondaryPlaneAngle));set_attribute_value(2, (v3_LuminousIntensity));; populate_derived(); }

// Function implementations for IfcLightFixture
boost::optional< ::Ifc4x3_tc1::IfcLightFixtureTypeEnum::Value > Ifc4x3_tc1::IfcLightFixture::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcLightFixtureTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcLightFixture::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcLightFixtureTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcLightFixtureTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcLightFixture::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[591]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLightFixture::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[591]); }
Ifc4x3_tc1::IfcLightFixture::IfcLightFixture(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcLightFixture::IfcLightFixture(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcLightFixtureTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcLightFixtureTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcLightFixtureType
::Ifc4x3_tc1::IfcLightFixtureTypeEnum::Value Ifc4x3_tc1::IfcLightFixtureType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcLightFixtureTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcLightFixtureType::setPredefinedType(::Ifc4x3_tc1::IfcLightFixtureTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcLightFixtureTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcLightFixtureType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[592]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLightFixtureType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[592]); }
Ifc4x3_tc1::IfcLightFixtureType::IfcLightFixtureType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcLightFixtureType::IfcLightFixtureType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcLightFixtureTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcLightFixtureTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcLightIntensityDistribution
::Ifc4x3_tc1::IfcLightDistributionCurveEnum::Value Ifc4x3_tc1::IfcLightIntensityDistribution::LightDistributionCurve() const {  return ::Ifc4x3_tc1::IfcLightDistributionCurveEnum::FromString(data_.get_attribute_value(0)); }
void Ifc4x3_tc1::IfcLightIntensityDistribution::setLightDistributionCurve(::Ifc4x3_tc1::IfcLightDistributionCurveEnum::Value v) { set_attribute_value(0, EnumerationReference(&::Ifc4x3_tc1::IfcLightDistributionCurveEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(0); }
aggregate_of< ::Ifc4x3_tc1::IfcLightDistributionData >::ptr Ifc4x3_tc1::IfcLightIntensityDistribution::DistributionData() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcLightDistributionData >(); }
void Ifc4x3_tc1::IfcLightIntensityDistribution::setDistributionData(aggregate_of< ::Ifc4x3_tc1::IfcLightDistributionData >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcLightIntensityDistribution::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[594]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLightIntensityDistribution::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[594]); }
Ifc4x3_tc1::IfcLightIntensityDistribution::IfcLightIntensityDistribution(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcLightIntensityDistribution::IfcLightIntensityDistribution(::Ifc4x3_tc1::IfcLightDistributionCurveEnum::Value v1_LightDistributionCurve, aggregate_of< ::Ifc4x3_tc1::IfcLightDistributionData >::ptr v2_DistributionData) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcLightDistributionCurveEnum::Class(),(size_t)v1_LightDistributionCurve)));set_attribute_value(1, (v2_DistributionData)->generalize());; populate_derived(); }

// Function implementations for IfcLightSource
boost::optional< std::string > Ifc4x3_tc1::IfcLightSource::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcLightSource::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
::Ifc4x3_tc1::IfcColourRgb* Ifc4x3_tc1::IfcLightSource::LightColour() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcColourRgb>(true); }
void Ifc4x3_tc1::IfcLightSource::setLightColour(::Ifc4x3_tc1::IfcColourRgb* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
boost::optional< double > Ifc4x3_tc1::IfcLightSource::AmbientIntensity() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcLightSource::setAmbientIntensity(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcLightSource::Intensity() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcLightSource::setIntensity(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcLightSource::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[595]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLightSource::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[595]); }
Ifc4x3_tc1::IfcLightSource::IfcLightSource(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcLightSource::IfcLightSource(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, v2_LightColour ? v2_LightColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_AmbientIntensity) {set_attribute_value(2, (*v3_AmbientIntensity)); } if (v4_Intensity) {set_attribute_value(3, (*v4_Intensity)); }; populate_derived(); }

// Function implementations for IfcLightSourceAmbient


const IfcParse::entity& Ifc4x3_tc1::IfcLightSourceAmbient::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[596]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLightSourceAmbient::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[596]); }
Ifc4x3_tc1::IfcLightSourceAmbient::IfcLightSourceAmbient(IfcEntityInstanceData&& e) : IfcLightSource(std::move(e)) { }
Ifc4x3_tc1::IfcLightSourceAmbient::IfcLightSourceAmbient(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity) : IfcLightSource(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, v2_LightColour ? v2_LightColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_AmbientIntensity) {set_attribute_value(2, (*v3_AmbientIntensity)); } if (v4_Intensity) {set_attribute_value(3, (*v4_Intensity)); }; populate_derived(); }

// Function implementations for IfcLightSourceDirectional
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcLightSourceDirectional::Orientation() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcLightSourceDirectional::setOrientation(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcLightSourceDirectional::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[597]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLightSourceDirectional::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[597]); }
Ifc4x3_tc1::IfcLightSourceDirectional::IfcLightSourceDirectional(IfcEntityInstanceData&& e) : IfcLightSource(std::move(e)) { }
Ifc4x3_tc1::IfcLightSourceDirectional::IfcLightSourceDirectional(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity, ::Ifc4x3_tc1::IfcDirection* v5_Orientation) : IfcLightSource(IfcEntityInstanceData(storage_t(5))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, v2_LightColour ? v2_LightColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_AmbientIntensity) {set_attribute_value(2, (*v3_AmbientIntensity)); } if (v4_Intensity) {set_attribute_value(3, (*v4_Intensity)); }set_attribute_value(4, v5_Orientation ? v5_Orientation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcLightSourceGoniometric
::Ifc4x3_tc1::IfcAxis2Placement3D* Ifc4x3_tc1::IfcLightSourceGoniometric::Position() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcAxis2Placement3D>(true); }
void Ifc4x3_tc1::IfcLightSourceGoniometric::setPosition(::Ifc4x3_tc1::IfcAxis2Placement3D* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcColourRgb* Ifc4x3_tc1::IfcLightSourceGoniometric::ColourAppearance() const { if(data_.get_attribute_value(5).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcColourRgb>(true); }
void Ifc4x3_tc1::IfcLightSourceGoniometric::setColourAppearance(::Ifc4x3_tc1::IfcColourRgb* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }
double Ifc4x3_tc1::IfcLightSourceGoniometric::ColourTemperature() const {  double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcLightSourceGoniometric::setColourTemperature(double v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
double Ifc4x3_tc1::IfcLightSourceGoniometric::LuminousFlux() const {  double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcLightSourceGoniometric::setLuminousFlux(double v) { set_attribute_value(7, v);if constexpr (false)unset_attribute_value(7); }
::Ifc4x3_tc1::IfcLightEmissionSourceEnum::Value Ifc4x3_tc1::IfcLightSourceGoniometric::LightEmissionSource() const {  return ::Ifc4x3_tc1::IfcLightEmissionSourceEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcLightSourceGoniometric::setLightEmissionSource(::Ifc4x3_tc1::IfcLightEmissionSourceEnum::Value v) { set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcLightEmissionSourceEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(8); }
::Ifc4x3_tc1::IfcLightDistributionDataSourceSelect* Ifc4x3_tc1::IfcLightSourceGoniometric::LightDistributionDataSource() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(9)))->as<::Ifc4x3_tc1::IfcLightDistributionDataSourceSelect>(true); }
void Ifc4x3_tc1::IfcLightSourceGoniometric::setLightDistributionDataSource(::Ifc4x3_tc1::IfcLightDistributionDataSourceSelect* v) { set_attribute_value(9, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcLightSourceGoniometric::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[598]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLightSourceGoniometric::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[598]); }
Ifc4x3_tc1::IfcLightSourceGoniometric::IfcLightSourceGoniometric(IfcEntityInstanceData&& e) : IfcLightSource(std::move(e)) { }
Ifc4x3_tc1::IfcLightSourceGoniometric::IfcLightSourceGoniometric(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity, ::Ifc4x3_tc1::IfcAxis2Placement3D* v5_Position, ::Ifc4x3_tc1::IfcColourRgb* v6_ColourAppearance, double v7_ColourTemperature, double v8_LuminousFlux, ::Ifc4x3_tc1::IfcLightEmissionSourceEnum::Value v9_LightEmissionSource, ::Ifc4x3_tc1::IfcLightDistributionDataSourceSelect* v10_LightDistributionDataSource) : IfcLightSource(IfcEntityInstanceData(storage_t(10))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, v2_LightColour ? v2_LightColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_AmbientIntensity) {set_attribute_value(2, (*v3_AmbientIntensity)); } if (v4_Intensity) {set_attribute_value(3, (*v4_Intensity)); }set_attribute_value(4, v5_Position ? v5_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_ColourAppearance ? v6_ColourAppearance->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, (v7_ColourTemperature));set_attribute_value(7, (v8_LuminousFlux));set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcLightEmissionSourceEnum::Class(),(size_t)v9_LightEmissionSource)));set_attribute_value(9, v10_LightDistributionDataSource ? v10_LightDistributionDataSource->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcLightSourcePositional
::Ifc4x3_tc1::IfcCartesianPoint* Ifc4x3_tc1::IfcLightSourcePositional::Position() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcCartesianPoint>(true); }
void Ifc4x3_tc1::IfcLightSourcePositional::setPosition(::Ifc4x3_tc1::IfcCartesianPoint* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
double Ifc4x3_tc1::IfcLightSourcePositional::Radius() const {  double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcLightSourcePositional::setRadius(double v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
double Ifc4x3_tc1::IfcLightSourcePositional::ConstantAttenuation() const {  double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcLightSourcePositional::setConstantAttenuation(double v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
double Ifc4x3_tc1::IfcLightSourcePositional::DistanceAttenuation() const {  double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcLightSourcePositional::setDistanceAttenuation(double v) { set_attribute_value(7, v);if constexpr (false)unset_attribute_value(7); }
double Ifc4x3_tc1::IfcLightSourcePositional::QuadricAttenuation() const {  double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcLightSourcePositional::setQuadricAttenuation(double v) { set_attribute_value(8, v);if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcLightSourcePositional::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[599]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLightSourcePositional::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[599]); }
Ifc4x3_tc1::IfcLightSourcePositional::IfcLightSourcePositional(IfcEntityInstanceData&& e) : IfcLightSource(std::move(e)) { }
Ifc4x3_tc1::IfcLightSourcePositional::IfcLightSourcePositional(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity, ::Ifc4x3_tc1::IfcCartesianPoint* v5_Position, double v6_Radius, double v7_ConstantAttenuation, double v8_DistanceAttenuation, double v9_QuadricAttenuation) : IfcLightSource(IfcEntityInstanceData(storage_t(9))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, v2_LightColour ? v2_LightColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_AmbientIntensity) {set_attribute_value(2, (*v3_AmbientIntensity)); } if (v4_Intensity) {set_attribute_value(3, (*v4_Intensity)); }set_attribute_value(4, v5_Position ? v5_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, (v6_Radius));set_attribute_value(6, (v7_ConstantAttenuation));set_attribute_value(7, (v8_DistanceAttenuation));set_attribute_value(8, (v9_QuadricAttenuation));; populate_derived(); }

// Function implementations for IfcLightSourceSpot
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcLightSourceSpot::Orientation() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(9)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcLightSourceSpot::setOrientation(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(9, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(9); }
boost::optional< double > Ifc4x3_tc1::IfcLightSourceSpot::ConcentrationExponent() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcLightSourceSpot::setConcentrationExponent(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
double Ifc4x3_tc1::IfcLightSourceSpot::SpreadAngle() const {  double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcLightSourceSpot::setSpreadAngle(double v) { set_attribute_value(11, v);if constexpr (false)unset_attribute_value(11); }
double Ifc4x3_tc1::IfcLightSourceSpot::BeamWidthAngle() const {  double v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcLightSourceSpot::setBeamWidthAngle(double v) { set_attribute_value(12, v);if constexpr (false)unset_attribute_value(12); }


const IfcParse::entity& Ifc4x3_tc1::IfcLightSourceSpot::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[600]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLightSourceSpot::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[600]); }
Ifc4x3_tc1::IfcLightSourceSpot::IfcLightSourceSpot(IfcEntityInstanceData&& e) : IfcLightSourcePositional(std::move(e)) { }
Ifc4x3_tc1::IfcLightSourceSpot::IfcLightSourceSpot(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity, ::Ifc4x3_tc1::IfcCartesianPoint* v5_Position, double v6_Radius, double v7_ConstantAttenuation, double v8_DistanceAttenuation, double v9_QuadricAttenuation, ::Ifc4x3_tc1::IfcDirection* v10_Orientation, boost::optional< double > v11_ConcentrationExponent, double v12_SpreadAngle, double v13_BeamWidthAngle) : IfcLightSourcePositional(IfcEntityInstanceData(storage_t(13))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, v2_LightColour ? v2_LightColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_AmbientIntensity) {set_attribute_value(2, (*v3_AmbientIntensity)); } if (v4_Intensity) {set_attribute_value(3, (*v4_Intensity)); }set_attribute_value(4, v5_Position ? v5_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, (v6_Radius));set_attribute_value(6, (v7_ConstantAttenuation));set_attribute_value(7, (v8_DistanceAttenuation));set_attribute_value(8, (v9_QuadricAttenuation));set_attribute_value(9, v10_Orientation ? v10_Orientation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v11_ConcentrationExponent) {set_attribute_value(10, (*v11_ConcentrationExponent)); }set_attribute_value(11, (v12_SpreadAngle));set_attribute_value(12, (v13_BeamWidthAngle));; populate_derived(); }

// Function implementations for IfcLine
::Ifc4x3_tc1::IfcCartesianPoint* Ifc4x3_tc1::IfcLine::Pnt() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCartesianPoint>(true); }
void Ifc4x3_tc1::IfcLine::setPnt(::Ifc4x3_tc1::IfcCartesianPoint* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcVector* Ifc4x3_tc1::IfcLine::Dir() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcVector>(true); }
void Ifc4x3_tc1::IfcLine::setDir(::Ifc4x3_tc1::IfcVector* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcLine::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[601]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLine::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[601]); }
Ifc4x3_tc1::IfcLine::IfcLine(IfcEntityInstanceData&& e) : IfcCurve(std::move(e)) { }
Ifc4x3_tc1::IfcLine::IfcLine(::Ifc4x3_tc1::IfcCartesianPoint* v1_Pnt, ::Ifc4x3_tc1::IfcVector* v2_Dir) : IfcCurve(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Pnt ? v1_Pnt->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Dir ? v2_Dir->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcLinearElement


const IfcParse::entity& Ifc4x3_tc1::IfcLinearElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[602]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLinearElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[602]); }
Ifc4x3_tc1::IfcLinearElement::IfcLinearElement(IfcEntityInstanceData&& e) : IfcProduct(std::move(e)) { }
Ifc4x3_tc1::IfcLinearElement::IfcLinearElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation) : IfcProduct(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcLinearPlacement
::Ifc4x3_tc1::IfcAxis2PlacementLinear* Ifc4x3_tc1::IfcLinearPlacement::RelativePlacement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcAxis2PlacementLinear>(true); }
void Ifc4x3_tc1::IfcLinearPlacement::setRelativePlacement(::Ifc4x3_tc1::IfcAxis2PlacementLinear* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcAxis2Placement3D* Ifc4x3_tc1::IfcLinearPlacement::CartesianPosition() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcAxis2Placement3D>(true); }
void Ifc4x3_tc1::IfcLinearPlacement::setCartesianPosition(::Ifc4x3_tc1::IfcAxis2Placement3D* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcLinearPlacement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[605]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLinearPlacement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[605]); }
Ifc4x3_tc1::IfcLinearPlacement::IfcLinearPlacement(IfcEntityInstanceData&& e) : IfcObjectPlacement(std::move(e)) { }
Ifc4x3_tc1::IfcLinearPlacement::IfcLinearPlacement(::Ifc4x3_tc1::IfcObjectPlacement* v1_PlacementRelTo, ::Ifc4x3_tc1::IfcAxis2PlacementLinear* v2_RelativePlacement, ::Ifc4x3_tc1::IfcAxis2Placement3D* v3_CartesianPosition) : IfcObjectPlacement(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_PlacementRelTo ? v1_PlacementRelTo->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_RelativePlacement ? v2_RelativePlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_CartesianPosition ? v3_CartesianPosition->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcLinearPositioningElement


const IfcParse::entity& Ifc4x3_tc1::IfcLinearPositioningElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[606]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLinearPositioningElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[606]); }
Ifc4x3_tc1::IfcLinearPositioningElement::IfcLinearPositioningElement(IfcEntityInstanceData&& e) : IfcPositioningElement(std::move(e)) { }
Ifc4x3_tc1::IfcLinearPositioningElement::IfcLinearPositioningElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation) : IfcPositioningElement(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcLiquidTerminal
boost::optional< ::Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Value > Ifc4x3_tc1::IfcLiquidTerminal::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcLiquidTerminal::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcLiquidTerminal::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[610]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLiquidTerminal::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[610]); }
Ifc4x3_tc1::IfcLiquidTerminal::IfcLiquidTerminal(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcLiquidTerminal::IfcLiquidTerminal(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcLiquidTerminalType
::Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Value Ifc4x3_tc1::IfcLiquidTerminalType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcLiquidTerminalType::setPredefinedType(::Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcLiquidTerminalType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[611]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLiquidTerminalType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[611]); }
Ifc4x3_tc1::IfcLiquidTerminalType::IfcLiquidTerminalType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcLiquidTerminalType::IfcLiquidTerminalType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcLiquidTerminalTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcLocalPlacement
::Ifc4x3_tc1::IfcAxis2Placement* Ifc4x3_tc1::IfcLocalPlacement::RelativePlacement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcAxis2Placement>(true); }
void Ifc4x3_tc1::IfcLocalPlacement::setRelativePlacement(::Ifc4x3_tc1::IfcAxis2Placement* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcLocalPlacement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[614]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLocalPlacement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[614]); }
Ifc4x3_tc1::IfcLocalPlacement::IfcLocalPlacement(IfcEntityInstanceData&& e) : IfcObjectPlacement(std::move(e)) { }
Ifc4x3_tc1::IfcLocalPlacement::IfcLocalPlacement(::Ifc4x3_tc1::IfcObjectPlacement* v1_PlacementRelTo, ::Ifc4x3_tc1::IfcAxis2Placement* v2_RelativePlacement) : IfcObjectPlacement(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_PlacementRelTo ? v1_PlacementRelTo->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_RelativePlacement ? v2_RelativePlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcLoop


const IfcParse::entity& Ifc4x3_tc1::IfcLoop::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[617]); }
const IfcParse::entity& Ifc4x3_tc1::IfcLoop::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[617]); }
Ifc4x3_tc1::IfcLoop::IfcLoop(IfcEntityInstanceData&& e) : IfcTopologicalRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcLoop::IfcLoop() : IfcTopologicalRepresentationItem(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcManifoldSolidBrep
::Ifc4x3_tc1::IfcClosedShell* Ifc4x3_tc1::IfcManifoldSolidBrep::Outer() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcClosedShell>(true); }
void Ifc4x3_tc1::IfcManifoldSolidBrep::setOuter(::Ifc4x3_tc1::IfcClosedShell* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcManifoldSolidBrep::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[624]); }
const IfcParse::entity& Ifc4x3_tc1::IfcManifoldSolidBrep::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[624]); }
Ifc4x3_tc1::IfcManifoldSolidBrep::IfcManifoldSolidBrep(IfcEntityInstanceData&& e) : IfcSolidModel(std::move(e)) { }
Ifc4x3_tc1::IfcManifoldSolidBrep::IfcManifoldSolidBrep(::Ifc4x3_tc1::IfcClosedShell* v1_Outer) : IfcSolidModel(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_Outer ? v1_Outer->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcMapConversion
double Ifc4x3_tc1::IfcMapConversion::Eastings() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcMapConversion::setEastings(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
double Ifc4x3_tc1::IfcMapConversion::Northings() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcMapConversion::setNorthings(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcMapConversion::OrthogonalHeight() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcMapConversion::setOrthogonalHeight(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
boost::optional< double > Ifc4x3_tc1::IfcMapConversion::XAxisAbscissa() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcMapConversion::setXAxisAbscissa(boost::optional< double > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< double > Ifc4x3_tc1::IfcMapConversion::XAxisOrdinate() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcMapConversion::setXAxisOrdinate(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< double > Ifc4x3_tc1::IfcMapConversion::Scale() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcMapConversion::setScale(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< double > Ifc4x3_tc1::IfcMapConversion::ScaleY() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcMapConversion::setScaleY(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< double > Ifc4x3_tc1::IfcMapConversion::ScaleZ() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcMapConversion::setScaleZ(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMapConversion::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[625]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMapConversion::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[625]); }
Ifc4x3_tc1::IfcMapConversion::IfcMapConversion(IfcEntityInstanceData&& e) : IfcCoordinateOperation(std::move(e)) { }
Ifc4x3_tc1::IfcMapConversion::IfcMapConversion(::Ifc4x3_tc1::IfcCoordinateReferenceSystemSelect* v1_SourceCRS, ::Ifc4x3_tc1::IfcCoordinateReferenceSystem* v2_TargetCRS, double v3_Eastings, double v4_Northings, double v5_OrthogonalHeight, boost::optional< double > v6_XAxisAbscissa, boost::optional< double > v7_XAxisOrdinate, boost::optional< double > v8_Scale, boost::optional< double > v9_ScaleY, boost::optional< double > v10_ScaleZ) : IfcCoordinateOperation(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, v1_SourceCRS ? v1_SourceCRS->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_TargetCRS ? v2_TargetCRS->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, (v3_Eastings));set_attribute_value(3, (v4_Northings));set_attribute_value(4, (v5_OrthogonalHeight)); if (v6_XAxisAbscissa) {set_attribute_value(5, (*v6_XAxisAbscissa)); } if (v7_XAxisOrdinate) {set_attribute_value(6, (*v7_XAxisOrdinate)); } if (v8_Scale) {set_attribute_value(7, (*v8_Scale)); } if (v9_ScaleY) {set_attribute_value(8, (*v9_ScaleY)); } if (v10_ScaleZ) {set_attribute_value(9, (*v10_ScaleZ)); }; populate_derived(); }

// Function implementations for IfcMappedItem
::Ifc4x3_tc1::IfcRepresentationMap* Ifc4x3_tc1::IfcMappedItem::MappingSource() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcRepresentationMap>(true); }
void Ifc4x3_tc1::IfcMappedItem::setMappingSource(::Ifc4x3_tc1::IfcRepresentationMap* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcCartesianTransformationOperator* Ifc4x3_tc1::IfcMappedItem::MappingTarget() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcCartesianTransformationOperator>(true); }
void Ifc4x3_tc1::IfcMappedItem::setMappingTarget(::Ifc4x3_tc1::IfcCartesianTransformationOperator* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcMappedItem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[626]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMappedItem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[626]); }
Ifc4x3_tc1::IfcMappedItem::IfcMappedItem(IfcEntityInstanceData&& e) : IfcRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcMappedItem::IfcMappedItem(::Ifc4x3_tc1::IfcRepresentationMap* v1_MappingSource, ::Ifc4x3_tc1::IfcCartesianTransformationOperator* v2_MappingTarget) : IfcRepresentationItem(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_MappingSource ? v1_MappingSource->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_MappingTarget ? v2_MappingTarget->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcMarineFacility
boost::optional< ::Ifc4x3_tc1::IfcMarineFacilityTypeEnum::Value > Ifc4x3_tc1::IfcMarineFacility::PredefinedType() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcMarineFacilityTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcMarineFacility::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcMarineFacilityTypeEnum::Value > v) { if (v) {set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcMarineFacilityTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMarineFacility::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[627]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMarineFacility::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[627]); }
Ifc4x3_tc1::IfcMarineFacility::IfcMarineFacility(IfcEntityInstanceData&& e) : IfcFacility(std::move(e)) { }
Ifc4x3_tc1::IfcMarineFacility::IfcMarineFacility(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_tc1::IfcMarineFacilityTypeEnum::Value > v10_PredefinedType) : IfcFacility(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); } if (v10_PredefinedType) {set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcMarineFacilityTypeEnum::Class(),(size_t)*v10_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcMarinePart
boost::optional< ::Ifc4x3_tc1::IfcMarinePartTypeEnum::Value > Ifc4x3_tc1::IfcMarinePart::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcMarinePartTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcMarinePart::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcMarinePartTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcMarinePartTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMarinePart::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[629]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMarinePart::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[629]); }
Ifc4x3_tc1::IfcMarinePart::IfcMarinePart(IfcEntityInstanceData&& e) : IfcFacilityPart(std::move(e)) { }
Ifc4x3_tc1::IfcMarinePart::IfcMarinePart(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_tc1::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_tc1::IfcMarinePartTypeEnum::Value > v11_PredefinedType) : IfcFacilityPart(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcFacilityUsageEnum::Class(),(size_t)v10_UsageType))); if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcMarinePartTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcMaterial
std::string Ifc4x3_tc1::IfcMaterial::Name() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcMaterial::setName(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterial::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcMaterial::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterial::Category() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcMaterial::setCategory(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }

::Ifc4x3_tc1::IfcMaterialDefinitionRepresentation::list::ptr Ifc4x3_tc1::IfcMaterial::HasRepresentation() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[640], 3)->as<IfcMaterialDefinitionRepresentation>(); }
::Ifc4x3_tc1::IfcMaterialRelationship::list::ptr Ifc4x3_tc1::IfcMaterial::IsRelatedWith() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[652], 3)->as<IfcMaterialRelationship>(); }
::Ifc4x3_tc1::IfcMaterialRelationship::list::ptr Ifc4x3_tc1::IfcMaterial::RelatesTo() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[652], 2)->as<IfcMaterialRelationship>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcMaterial::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[635]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterial::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[635]); }
Ifc4x3_tc1::IfcMaterial::IfcMaterial(IfcEntityInstanceData&& e) : IfcMaterialDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcMaterial::IfcMaterial(std::string v1_Name, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_Category) : IfcMaterialDefinition(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); } if (v3_Category) {set_attribute_value(2, (*v3_Category)); }; populate_derived(); }

// Function implementations for IfcMaterialClassificationRelationship
aggregate_of< ::Ifc4x3_tc1::IfcClassificationSelect >::ptr Ifc4x3_tc1::IfcMaterialClassificationRelationship::MaterialClassifications() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcClassificationSelect >(); }
void Ifc4x3_tc1::IfcMaterialClassificationRelationship::setMaterialClassifications(aggregate_of< ::Ifc4x3_tc1::IfcClassificationSelect >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcMaterial* Ifc4x3_tc1::IfcMaterialClassificationRelationship::ClassifiedMaterial() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcMaterial>(true); }
void Ifc4x3_tc1::IfcMaterialClassificationRelationship::setClassifiedMaterial(::Ifc4x3_tc1::IfcMaterial* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcMaterialClassificationRelationship::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[636]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialClassificationRelationship::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[636]); }
Ifc4x3_tc1::IfcMaterialClassificationRelationship::IfcMaterialClassificationRelationship(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialClassificationRelationship::IfcMaterialClassificationRelationship(aggregate_of< ::Ifc4x3_tc1::IfcClassificationSelect >::ptr v1_MaterialClassifications, ::Ifc4x3_tc1::IfcMaterial* v2_ClassifiedMaterial) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_MaterialClassifications)->generalize());set_attribute_value(1, v2_ClassifiedMaterial ? v2_ClassifiedMaterial->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcMaterialConstituent
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialConstituent::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcMaterialConstituent::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialConstituent::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcMaterialConstituent::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
::Ifc4x3_tc1::IfcMaterial* Ifc4x3_tc1::IfcMaterialConstituent::Material() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcMaterial>(true); }
void Ifc4x3_tc1::IfcMaterialConstituent::setMaterial(::Ifc4x3_tc1::IfcMaterial* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
boost::optional< double > Ifc4x3_tc1::IfcMaterialConstituent::Fraction() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcMaterialConstituent::setFraction(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialConstituent::Category() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcMaterialConstituent::setCategory(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }

::Ifc4x3_tc1::IfcMaterialConstituentSet::list::ptr Ifc4x3_tc1::IfcMaterialConstituent::ToMaterialConstituentSet() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[638], 2)->as<IfcMaterialConstituentSet>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcMaterialConstituent::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[637]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialConstituent::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[637]); }
Ifc4x3_tc1::IfcMaterialConstituent::IfcMaterialConstituent(IfcEntityInstanceData&& e) : IfcMaterialDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialConstituent::IfcMaterialConstituent(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcMaterial* v3_Material, boost::optional< double > v4_Fraction, boost::optional< std::string > v5_Category) : IfcMaterialDefinition(IfcEntityInstanceData(storage_t(5))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_Material ? v3_Material->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v4_Fraction) {set_attribute_value(3, (*v4_Fraction)); } if (v5_Category) {set_attribute_value(4, (*v5_Category)); }; populate_derived(); }

// Function implementations for IfcMaterialConstituentSet
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialConstituentSet::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcMaterialConstituentSet::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialConstituentSet::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcMaterialConstituentSet::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcMaterialConstituent >::ptr > Ifc4x3_tc1::IfcMaterialConstituentSet::MaterialConstituents() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcMaterialConstituent >(); }
void Ifc4x3_tc1::IfcMaterialConstituentSet::setMaterialConstituents(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcMaterialConstituent >::ptr > v) { if (v) {set_attribute_value(2, (*v)->generalize());} else {unset_attribute_value(2);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMaterialConstituentSet::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[638]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialConstituentSet::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[638]); }
Ifc4x3_tc1::IfcMaterialConstituentSet::IfcMaterialConstituentSet(IfcEntityInstanceData&& e) : IfcMaterialDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialConstituentSet::IfcMaterialConstituentSet(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcMaterialConstituent >::ptr > v3_MaterialConstituents) : IfcMaterialDefinition(IfcEntityInstanceData(storage_t(3))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); } if (v3_MaterialConstituents) {set_attribute_value(2, (*v3_MaterialConstituents)->generalize()); }; populate_derived(); }

// Function implementations for IfcMaterialDefinition

::Ifc4x3_tc1::IfcRelAssociatesMaterial::list::ptr Ifc4x3_tc1::IfcMaterialDefinition::AssociatedTo() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[912], 5)->as<IfcRelAssociatesMaterial>(); }
::Ifc4x3_tc1::IfcExternalReferenceRelationship::list::ptr Ifc4x3_tc1::IfcMaterialDefinition::HasExternalReferences() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[427], 3)->as<IfcExternalReferenceRelationship>(); }
::Ifc4x3_tc1::IfcMaterialProperties::list::ptr Ifc4x3_tc1::IfcMaterialDefinition::HasProperties() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[651], 3)->as<IfcMaterialProperties>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcMaterialDefinition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[639]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialDefinition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[639]); }
Ifc4x3_tc1::IfcMaterialDefinition::IfcMaterialDefinition(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialDefinition::IfcMaterialDefinition() : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcMaterialDefinitionRepresentation
::Ifc4x3_tc1::IfcMaterial* Ifc4x3_tc1::IfcMaterialDefinitionRepresentation::RepresentedMaterial() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcMaterial>(true); }
void Ifc4x3_tc1::IfcMaterialDefinitionRepresentation::setRepresentedMaterial(::Ifc4x3_tc1::IfcMaterial* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcMaterialDefinitionRepresentation::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[640]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialDefinitionRepresentation::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[640]); }
Ifc4x3_tc1::IfcMaterialDefinitionRepresentation::IfcMaterialDefinitionRepresentation(IfcEntityInstanceData&& e) : IfcProductRepresentation(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialDefinitionRepresentation::IfcMaterialDefinitionRepresentation(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_tc1::IfcRepresentation >::ptr v3_Representations, ::Ifc4x3_tc1::IfcMaterial* v4_RepresentedMaterial) : IfcProductRepresentation(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_Representations)->generalize());set_attribute_value(3, v4_RepresentedMaterial ? v4_RepresentedMaterial->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcMaterialLayer
::Ifc4x3_tc1::IfcMaterial* Ifc4x3_tc1::IfcMaterialLayer::Material() const { if(data_.get_attribute_value(0).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcMaterial>(true); }
void Ifc4x3_tc1::IfcMaterialLayer::setMaterial(::Ifc4x3_tc1::IfcMaterial* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
double Ifc4x3_tc1::IfcMaterialLayer::LayerThickness() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcMaterialLayer::setLayerThickness(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< boost::logic::tribool > Ifc4x3_tc1::IfcMaterialLayer::IsVentilated() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } boost::logic::tribool v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcMaterialLayer::setIsVentilated(boost::optional< boost::logic::tribool > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialLayer::Name() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcMaterialLayer::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialLayer::Description() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcMaterialLayer::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialLayer::Category() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcMaterialLayer::setCategory(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< int > Ifc4x3_tc1::IfcMaterialLayer::Priority() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } int v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcMaterialLayer::setPriority(boost::optional< int > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }

::Ifc4x3_tc1::IfcMaterialLayerSet::list::ptr Ifc4x3_tc1::IfcMaterialLayer::ToMaterialLayerSet() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[642], 0)->as<IfcMaterialLayerSet>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcMaterialLayer::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[641]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialLayer::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[641]); }
Ifc4x3_tc1::IfcMaterialLayer::IfcMaterialLayer(IfcEntityInstanceData&& e) : IfcMaterialDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialLayer::IfcMaterialLayer(::Ifc4x3_tc1::IfcMaterial* v1_Material, double v2_LayerThickness, boost::optional< boost::logic::tribool > v3_IsVentilated, boost::optional< std::string > v4_Name, boost::optional< std::string > v5_Description, boost::optional< std::string > v6_Category, boost::optional< int > v7_Priority) : IfcMaterialDefinition(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, v1_Material ? v1_Material->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_LayerThickness)); if (v3_IsVentilated) {set_attribute_value(2, (*v3_IsVentilated)); } if (v4_Name) {set_attribute_value(3, (*v4_Name)); } if (v5_Description) {set_attribute_value(4, (*v5_Description)); } if (v6_Category) {set_attribute_value(5, (*v6_Category)); } if (v7_Priority) {set_attribute_value(6, (*v7_Priority)); }; populate_derived(); }

// Function implementations for IfcMaterialLayerSet
aggregate_of< ::Ifc4x3_tc1::IfcMaterialLayer >::ptr Ifc4x3_tc1::IfcMaterialLayerSet::MaterialLayers() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcMaterialLayer >(); }
void Ifc4x3_tc1::IfcMaterialLayerSet::setMaterialLayers(aggregate_of< ::Ifc4x3_tc1::IfcMaterialLayer >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialLayerSet::LayerSetName() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcMaterialLayerSet::setLayerSetName(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialLayerSet::Description() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcMaterialLayerSet::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMaterialLayerSet::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[642]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialLayerSet::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[642]); }
Ifc4x3_tc1::IfcMaterialLayerSet::IfcMaterialLayerSet(IfcEntityInstanceData&& e) : IfcMaterialDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialLayerSet::IfcMaterialLayerSet(aggregate_of< ::Ifc4x3_tc1::IfcMaterialLayer >::ptr v1_MaterialLayers, boost::optional< std::string > v2_LayerSetName, boost::optional< std::string > v3_Description) : IfcMaterialDefinition(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_MaterialLayers)->generalize()); if (v2_LayerSetName) {set_attribute_value(1, (*v2_LayerSetName)); } if (v3_Description) {set_attribute_value(2, (*v3_Description)); }; populate_derived(); }

// Function implementations for IfcMaterialLayerSetUsage
::Ifc4x3_tc1::IfcMaterialLayerSet* Ifc4x3_tc1::IfcMaterialLayerSetUsage::ForLayerSet() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcMaterialLayerSet>(true); }
void Ifc4x3_tc1::IfcMaterialLayerSetUsage::setForLayerSet(::Ifc4x3_tc1::IfcMaterialLayerSet* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcLayerSetDirectionEnum::Value Ifc4x3_tc1::IfcMaterialLayerSetUsage::LayerSetDirection() const {  return ::Ifc4x3_tc1::IfcLayerSetDirectionEnum::FromString(data_.get_attribute_value(1)); }
void Ifc4x3_tc1::IfcMaterialLayerSetUsage::setLayerSetDirection(::Ifc4x3_tc1::IfcLayerSetDirectionEnum::Value v) { set_attribute_value(1, EnumerationReference(&::Ifc4x3_tc1::IfcLayerSetDirectionEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcDirectionSenseEnum::Value Ifc4x3_tc1::IfcMaterialLayerSetUsage::DirectionSense() const {  return ::Ifc4x3_tc1::IfcDirectionSenseEnum::FromString(data_.get_attribute_value(2)); }
void Ifc4x3_tc1::IfcMaterialLayerSetUsage::setDirectionSense(::Ifc4x3_tc1::IfcDirectionSenseEnum::Value v) { set_attribute_value(2, EnumerationReference(&::Ifc4x3_tc1::IfcDirectionSenseEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(2); }
double Ifc4x3_tc1::IfcMaterialLayerSetUsage::OffsetFromReferenceLine() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcMaterialLayerSetUsage::setOffsetFromReferenceLine(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
boost::optional< double > Ifc4x3_tc1::IfcMaterialLayerSetUsage::ReferenceExtent() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcMaterialLayerSetUsage::setReferenceExtent(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMaterialLayerSetUsage::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[643]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialLayerSetUsage::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[643]); }
Ifc4x3_tc1::IfcMaterialLayerSetUsage::IfcMaterialLayerSetUsage(IfcEntityInstanceData&& e) : IfcMaterialUsageDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialLayerSetUsage::IfcMaterialLayerSetUsage(::Ifc4x3_tc1::IfcMaterialLayerSet* v1_ForLayerSet, ::Ifc4x3_tc1::IfcLayerSetDirectionEnum::Value v2_LayerSetDirection, ::Ifc4x3_tc1::IfcDirectionSenseEnum::Value v3_DirectionSense, double v4_OffsetFromReferenceLine, boost::optional< double > v5_ReferenceExtent) : IfcMaterialUsageDefinition(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_ForLayerSet ? v1_ForLayerSet->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcLayerSetDirectionEnum::Class(),(size_t)v2_LayerSetDirection)));set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcDirectionSenseEnum::Class(),(size_t)v3_DirectionSense)));set_attribute_value(3, (v4_OffsetFromReferenceLine)); if (v5_ReferenceExtent) {set_attribute_value(4, (*v5_ReferenceExtent)); }; populate_derived(); }

// Function implementations for IfcMaterialLayerWithOffsets
::Ifc4x3_tc1::IfcLayerSetDirectionEnum::Value Ifc4x3_tc1::IfcMaterialLayerWithOffsets::OffsetDirection() const {  return ::Ifc4x3_tc1::IfcLayerSetDirectionEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcMaterialLayerWithOffsets::setOffsetDirection(::Ifc4x3_tc1::IfcLayerSetDirectionEnum::Value v) { set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcLayerSetDirectionEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(7); }
std::vector< double > /*[1:2]*/ Ifc4x3_tc1::IfcMaterialLayerWithOffsets::OffsetValues() const {  std::vector< double > /*[1:2]*/ v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcMaterialLayerWithOffsets::setOffsetValues(std::vector< double > /*[1:2]*/ v) { set_attribute_value(8, v);if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcMaterialLayerWithOffsets::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[644]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialLayerWithOffsets::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[644]); }
Ifc4x3_tc1::IfcMaterialLayerWithOffsets::IfcMaterialLayerWithOffsets(IfcEntityInstanceData&& e) : IfcMaterialLayer(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialLayerWithOffsets::IfcMaterialLayerWithOffsets(::Ifc4x3_tc1::IfcMaterial* v1_Material, double v2_LayerThickness, boost::optional< boost::logic::tribool > v3_IsVentilated, boost::optional< std::string > v4_Name, boost::optional< std::string > v5_Description, boost::optional< std::string > v6_Category, boost::optional< int > v7_Priority, ::Ifc4x3_tc1::IfcLayerSetDirectionEnum::Value v8_OffsetDirection, std::vector< double > /*[1:2]*/ v9_OffsetValues) : IfcMaterialLayer(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, v1_Material ? v1_Material->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_LayerThickness)); if (v3_IsVentilated) {set_attribute_value(2, (*v3_IsVentilated)); } if (v4_Name) {set_attribute_value(3, (*v4_Name)); } if (v5_Description) {set_attribute_value(4, (*v5_Description)); } if (v6_Category) {set_attribute_value(5, (*v6_Category)); } if (v7_Priority) {set_attribute_value(6, (*v7_Priority)); }set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcLayerSetDirectionEnum::Class(),(size_t)v8_OffsetDirection)));set_attribute_value(8, (v9_OffsetValues));; populate_derived(); }

// Function implementations for IfcMaterialList
aggregate_of< ::Ifc4x3_tc1::IfcMaterial >::ptr Ifc4x3_tc1::IfcMaterialList::Materials() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcMaterial >(); }
void Ifc4x3_tc1::IfcMaterialList::setMaterials(aggregate_of< ::Ifc4x3_tc1::IfcMaterial >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcMaterialList::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[645]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialList::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[645]); }
Ifc4x3_tc1::IfcMaterialList::IfcMaterialList(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialList::IfcMaterialList(aggregate_of< ::Ifc4x3_tc1::IfcMaterial >::ptr v1_Materials) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Materials)->generalize());; populate_derived(); }

// Function implementations for IfcMaterialProfile
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialProfile::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcMaterialProfile::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialProfile::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcMaterialProfile::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
::Ifc4x3_tc1::IfcMaterial* Ifc4x3_tc1::IfcMaterialProfile::Material() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcMaterial>(true); }
void Ifc4x3_tc1::IfcMaterialProfile::setMaterial(::Ifc4x3_tc1::IfcMaterial* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcProfileDef* Ifc4x3_tc1::IfcMaterialProfile::Profile() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcProfileDef>(true); }
void Ifc4x3_tc1::IfcMaterialProfile::setProfile(::Ifc4x3_tc1::IfcProfileDef* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
boost::optional< int > Ifc4x3_tc1::IfcMaterialProfile::Priority() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } int v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcMaterialProfile::setPriority(boost::optional< int > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialProfile::Category() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcMaterialProfile::setCategory(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }

::Ifc4x3_tc1::IfcMaterialProfileSet::list::ptr Ifc4x3_tc1::IfcMaterialProfile::ToMaterialProfileSet() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[647], 2)->as<IfcMaterialProfileSet>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcMaterialProfile::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[646]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialProfile::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[646]); }
Ifc4x3_tc1::IfcMaterialProfile::IfcMaterialProfile(IfcEntityInstanceData&& e) : IfcMaterialDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialProfile::IfcMaterialProfile(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcMaterial* v3_Material, ::Ifc4x3_tc1::IfcProfileDef* v4_Profile, boost::optional< int > v5_Priority, boost::optional< std::string > v6_Category) : IfcMaterialDefinition(IfcEntityInstanceData(storage_t(6))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_Material ? v3_Material->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_Profile ? v4_Profile->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_Priority) {set_attribute_value(4, (*v5_Priority)); } if (v6_Category) {set_attribute_value(5, (*v6_Category)); }; populate_derived(); }

// Function implementations for IfcMaterialProfileSet
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialProfileSet::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcMaterialProfileSet::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialProfileSet::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcMaterialProfileSet::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
aggregate_of< ::Ifc4x3_tc1::IfcMaterialProfile >::ptr Ifc4x3_tc1::IfcMaterialProfileSet::MaterialProfiles() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcMaterialProfile >(); }
void Ifc4x3_tc1::IfcMaterialProfileSet::setMaterialProfiles(aggregate_of< ::Ifc4x3_tc1::IfcMaterialProfile >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcCompositeProfileDef* Ifc4x3_tc1::IfcMaterialProfileSet::CompositeProfile() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcCompositeProfileDef>(true); }
void Ifc4x3_tc1::IfcMaterialProfileSet::setCompositeProfile(::Ifc4x3_tc1::IfcCompositeProfileDef* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcMaterialProfileSet::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[647]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialProfileSet::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[647]); }
Ifc4x3_tc1::IfcMaterialProfileSet::IfcMaterialProfileSet(IfcEntityInstanceData&& e) : IfcMaterialDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialProfileSet::IfcMaterialProfileSet(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_tc1::IfcMaterialProfile >::ptr v3_MaterialProfiles, ::Ifc4x3_tc1::IfcCompositeProfileDef* v4_CompositeProfile) : IfcMaterialDefinition(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_MaterialProfiles)->generalize());set_attribute_value(3, v4_CompositeProfile ? v4_CompositeProfile->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcMaterialProfileSetUsage
::Ifc4x3_tc1::IfcMaterialProfileSet* Ifc4x3_tc1::IfcMaterialProfileSetUsage::ForProfileSet() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcMaterialProfileSet>(true); }
void Ifc4x3_tc1::IfcMaterialProfileSetUsage::setForProfileSet(::Ifc4x3_tc1::IfcMaterialProfileSet* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
boost::optional< int > Ifc4x3_tc1::IfcMaterialProfileSetUsage::CardinalPoint() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } int v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcMaterialProfileSetUsage::setCardinalPoint(boost::optional< int > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< double > Ifc4x3_tc1::IfcMaterialProfileSetUsage::ReferenceExtent() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcMaterialProfileSetUsage::setReferenceExtent(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMaterialProfileSetUsage::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[648]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialProfileSetUsage::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[648]); }
Ifc4x3_tc1::IfcMaterialProfileSetUsage::IfcMaterialProfileSetUsage(IfcEntityInstanceData&& e) : IfcMaterialUsageDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialProfileSetUsage::IfcMaterialProfileSetUsage(::Ifc4x3_tc1::IfcMaterialProfileSet* v1_ForProfileSet, boost::optional< int > v2_CardinalPoint, boost::optional< double > v3_ReferenceExtent) : IfcMaterialUsageDefinition(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_ForProfileSet ? v1_ForProfileSet->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_CardinalPoint) {set_attribute_value(1, (*v2_CardinalPoint)); } if (v3_ReferenceExtent) {set_attribute_value(2, (*v3_ReferenceExtent)); }; populate_derived(); }

// Function implementations for IfcMaterialProfileSetUsageTapering
::Ifc4x3_tc1::IfcMaterialProfileSet* Ifc4x3_tc1::IfcMaterialProfileSetUsageTapering::ForProfileEndSet() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcMaterialProfileSet>(true); }
void Ifc4x3_tc1::IfcMaterialProfileSetUsageTapering::setForProfileEndSet(::Ifc4x3_tc1::IfcMaterialProfileSet* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
boost::optional< int > Ifc4x3_tc1::IfcMaterialProfileSetUsageTapering::CardinalEndPoint() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } int v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcMaterialProfileSetUsageTapering::setCardinalEndPoint(boost::optional< int > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMaterialProfileSetUsageTapering::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[649]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialProfileSetUsageTapering::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[649]); }
Ifc4x3_tc1::IfcMaterialProfileSetUsageTapering::IfcMaterialProfileSetUsageTapering(IfcEntityInstanceData&& e) : IfcMaterialProfileSetUsage(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialProfileSetUsageTapering::IfcMaterialProfileSetUsageTapering(::Ifc4x3_tc1::IfcMaterialProfileSet* v1_ForProfileSet, boost::optional< int > v2_CardinalPoint, boost::optional< double > v3_ReferenceExtent, ::Ifc4x3_tc1::IfcMaterialProfileSet* v4_ForProfileEndSet, boost::optional< int > v5_CardinalEndPoint) : IfcMaterialProfileSetUsage(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_ForProfileSet ? v1_ForProfileSet->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_CardinalPoint) {set_attribute_value(1, (*v2_CardinalPoint)); } if (v3_ReferenceExtent) {set_attribute_value(2, (*v3_ReferenceExtent)); }set_attribute_value(3, v4_ForProfileEndSet ? v4_ForProfileEndSet->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_CardinalEndPoint) {set_attribute_value(4, (*v5_CardinalEndPoint)); }; populate_derived(); }

// Function implementations for IfcMaterialProfileWithOffsets
std::vector< double > /*[1:2]*/ Ifc4x3_tc1::IfcMaterialProfileWithOffsets::OffsetValues() const {  std::vector< double > /*[1:2]*/ v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcMaterialProfileWithOffsets::setOffsetValues(std::vector< double > /*[1:2]*/ v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcMaterialProfileWithOffsets::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[650]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialProfileWithOffsets::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[650]); }
Ifc4x3_tc1::IfcMaterialProfileWithOffsets::IfcMaterialProfileWithOffsets(IfcEntityInstanceData&& e) : IfcMaterialProfile(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialProfileWithOffsets::IfcMaterialProfileWithOffsets(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcMaterial* v3_Material, ::Ifc4x3_tc1::IfcProfileDef* v4_Profile, boost::optional< int > v5_Priority, boost::optional< std::string > v6_Category, std::vector< double > /*[1:2]*/ v7_OffsetValues) : IfcMaterialProfile(IfcEntityInstanceData(storage_t(7))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_Material ? v3_Material->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_Profile ? v4_Profile->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_Priority) {set_attribute_value(4, (*v5_Priority)); } if (v6_Category) {set_attribute_value(5, (*v6_Category)); }set_attribute_value(6, (v7_OffsetValues));; populate_derived(); }

// Function implementations for IfcMaterialProperties
::Ifc4x3_tc1::IfcMaterialDefinition* Ifc4x3_tc1::IfcMaterialProperties::Material() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcMaterialDefinition>(true); }
void Ifc4x3_tc1::IfcMaterialProperties::setMaterial(::Ifc4x3_tc1::IfcMaterialDefinition* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcMaterialProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[651]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[651]); }
Ifc4x3_tc1::IfcMaterialProperties::IfcMaterialProperties(IfcEntityInstanceData&& e) : IfcExtendedProperties(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialProperties::IfcMaterialProperties(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_tc1::IfcProperty >::ptr v3_Properties, ::Ifc4x3_tc1::IfcMaterialDefinition* v4_Material) : IfcExtendedProperties(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_Properties)->generalize());set_attribute_value(3, v4_Material ? v4_Material->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcMaterialRelationship
::Ifc4x3_tc1::IfcMaterial* Ifc4x3_tc1::IfcMaterialRelationship::RelatingMaterial() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcMaterial>(true); }
void Ifc4x3_tc1::IfcMaterialRelationship::setRelatingMaterial(::Ifc4x3_tc1::IfcMaterial* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
aggregate_of< ::Ifc4x3_tc1::IfcMaterial >::ptr Ifc4x3_tc1::IfcMaterialRelationship::RelatedMaterials() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(3); return es->as< ::Ifc4x3_tc1::IfcMaterial >(); }
void Ifc4x3_tc1::IfcMaterialRelationship::setRelatedMaterials(aggregate_of< ::Ifc4x3_tc1::IfcMaterial >::ptr v) { set_attribute_value(3, (v)->generalize());if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcMaterialRelationship::MaterialExpression() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcMaterialRelationship::setMaterialExpression(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMaterialRelationship::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[652]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialRelationship::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[652]); }
Ifc4x3_tc1::IfcMaterialRelationship::IfcMaterialRelationship(IfcEntityInstanceData&& e) : IfcResourceLevelRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialRelationship::IfcMaterialRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcMaterial* v3_RelatingMaterial, aggregate_of< ::Ifc4x3_tc1::IfcMaterial >::ptr v4_RelatedMaterials, boost::optional< std::string > v5_MaterialExpression) : IfcResourceLevelRelationship(IfcEntityInstanceData(storage_t(5))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_RelatingMaterial ? v3_RelatingMaterial->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_RelatedMaterials)->generalize()); if (v5_MaterialExpression) {set_attribute_value(4, (*v5_MaterialExpression)); }; populate_derived(); }

// Function implementations for IfcMaterialUsageDefinition

::Ifc4x3_tc1::IfcRelAssociatesMaterial::list::ptr Ifc4x3_tc1::IfcMaterialUsageDefinition::AssociatedTo() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[912], 5)->as<IfcRelAssociatesMaterial>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcMaterialUsageDefinition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[654]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMaterialUsageDefinition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[654]); }
Ifc4x3_tc1::IfcMaterialUsageDefinition::IfcMaterialUsageDefinition(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcMaterialUsageDefinition::IfcMaterialUsageDefinition() : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcMeasureWithUnit
::Ifc4x3_tc1::IfcValue* Ifc4x3_tc1::IfcMeasureWithUnit::ValueComponent() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcValue>(true); }
void Ifc4x3_tc1::IfcMeasureWithUnit::setValueComponent(::Ifc4x3_tc1::IfcValue* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcUnit* Ifc4x3_tc1::IfcMeasureWithUnit::UnitComponent() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcUnit>(true); }
void Ifc4x3_tc1::IfcMeasureWithUnit::setUnitComponent(::Ifc4x3_tc1::IfcUnit* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcMeasureWithUnit::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[656]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMeasureWithUnit::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[656]); }
Ifc4x3_tc1::IfcMeasureWithUnit::IfcMeasureWithUnit(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcMeasureWithUnit::IfcMeasureWithUnit(::Ifc4x3_tc1::IfcValue* v1_ValueComponent, ::Ifc4x3_tc1::IfcUnit* v2_UnitComponent) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_ValueComponent ? v1_ValueComponent->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_UnitComponent ? v2_UnitComponent->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcMechanicalFastener
boost::optional< double > Ifc4x3_tc1::IfcMechanicalFastener::NominalDiameter() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcMechanicalFastener::setNominalDiameter(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< double > Ifc4x3_tc1::IfcMechanicalFastener::NominalLength() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcMechanicalFastener::setNominalLength(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< ::Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Value > Ifc4x3_tc1::IfcMechanicalFastener::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcMechanicalFastener::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMechanicalFastener::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[657]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMechanicalFastener::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[657]); }
Ifc4x3_tc1::IfcMechanicalFastener::IfcMechanicalFastener(IfcEntityInstanceData&& e) : IfcElementComponent(std::move(e)) { }
Ifc4x3_tc1::IfcMechanicalFastener::IfcMechanicalFastener(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< double > v9_NominalDiameter, boost::optional< double > v10_NominalLength, boost::optional< ::Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Value > v11_PredefinedType) : IfcElementComponent(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_NominalDiameter) {set_attribute_value(8, (*v9_NominalDiameter)); } if (v10_NominalLength) {set_attribute_value(9, (*v10_NominalLength)); } if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcMechanicalFastenerType
::Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Value Ifc4x3_tc1::IfcMechanicalFastenerType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcMechanicalFastenerType::setPredefinedType(::Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }
boost::optional< double > Ifc4x3_tc1::IfcMechanicalFastenerType::NominalDiameter() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcMechanicalFastenerType::setNominalDiameter(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< double > Ifc4x3_tc1::IfcMechanicalFastenerType::NominalLength() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcMechanicalFastenerType::setNominalLength(boost::optional< double > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMechanicalFastenerType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[658]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMechanicalFastenerType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[658]); }
Ifc4x3_tc1::IfcMechanicalFastenerType::IfcMechanicalFastenerType(IfcEntityInstanceData&& e) : IfcElementComponentType(std::move(e)) { }
Ifc4x3_tc1::IfcMechanicalFastenerType::IfcMechanicalFastenerType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Value v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_NominalLength) : IfcElementComponentType(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcMechanicalFastenerTypeEnum::Class(),(size_t)v10_PredefinedType))); if (v11_NominalDiameter) {set_attribute_value(10, (*v11_NominalDiameter)); } if (v12_NominalLength) {set_attribute_value(11, (*v12_NominalLength)); }; populate_derived(); }

// Function implementations for IfcMedicalDevice
boost::optional< ::Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Value > Ifc4x3_tc1::IfcMedicalDevice::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcMedicalDevice::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMedicalDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[660]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMedicalDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[660]); }
Ifc4x3_tc1::IfcMedicalDevice::IfcMedicalDevice(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcMedicalDevice::IfcMedicalDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcMedicalDeviceType
::Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Value Ifc4x3_tc1::IfcMedicalDeviceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcMedicalDeviceType::setPredefinedType(::Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcMedicalDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[661]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMedicalDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[661]); }
Ifc4x3_tc1::IfcMedicalDeviceType::IfcMedicalDeviceType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcMedicalDeviceType::IfcMedicalDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcMedicalDeviceTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcMember
boost::optional< ::Ifc4x3_tc1::IfcMemberTypeEnum::Value > Ifc4x3_tc1::IfcMember::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcMemberTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcMember::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcMemberTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcMemberTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMember::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[663]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMember::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[663]); }
Ifc4x3_tc1::IfcMember::IfcMember(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcMember::IfcMember(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcMemberTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcMemberTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcMemberType
::Ifc4x3_tc1::IfcMemberTypeEnum::Value Ifc4x3_tc1::IfcMemberType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcMemberTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcMemberType::setPredefinedType(::Ifc4x3_tc1::IfcMemberTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcMemberTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcMemberType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[664]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMemberType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[664]); }
Ifc4x3_tc1::IfcMemberType::IfcMemberType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcMemberType::IfcMemberType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcMemberTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcMemberTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcMetric
::Ifc4x3_tc1::IfcBenchmarkEnum::Value Ifc4x3_tc1::IfcMetric::Benchmark() const {  return ::Ifc4x3_tc1::IfcBenchmarkEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcMetric::setBenchmark(::Ifc4x3_tc1::IfcBenchmarkEnum::Value v) { set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcBenchmarkEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(7); }
boost::optional< std::string > Ifc4x3_tc1::IfcMetric::ValueSource() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcMetric::setValueSource(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
::Ifc4x3_tc1::IfcMetricValueSelect* Ifc4x3_tc1::IfcMetric::DataValue() const { if(data_.get_attribute_value(9).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(9)))->as<::Ifc4x3_tc1::IfcMetricValueSelect>(true); }
void Ifc4x3_tc1::IfcMetric::setDataValue(::Ifc4x3_tc1::IfcMetricValueSelect* v) { set_attribute_value(9, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(9); }
::Ifc4x3_tc1::IfcReference* Ifc4x3_tc1::IfcMetric::ReferencePath() const { if(data_.get_attribute_value(10).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(10)))->as<::Ifc4x3_tc1::IfcReference>(true); }
void Ifc4x3_tc1::IfcMetric::setReferencePath(::Ifc4x3_tc1::IfcReference* v) { set_attribute_value(10, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(10); }


const IfcParse::entity& Ifc4x3_tc1::IfcMetric::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[666]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMetric::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[666]); }
Ifc4x3_tc1::IfcMetric::IfcMetric(IfcEntityInstanceData&& e) : IfcConstraint(std::move(e)) { }
Ifc4x3_tc1::IfcMetric::IfcMetric(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcConstraintEnum::Value v3_ConstraintGrade, boost::optional< std::string > v4_ConstraintSource, ::Ifc4x3_tc1::IfcActorSelect* v5_CreatingActor, boost::optional< std::string > v6_CreationTime, boost::optional< std::string > v7_UserDefinedGrade, ::Ifc4x3_tc1::IfcBenchmarkEnum::Value v8_Benchmark, boost::optional< std::string > v9_ValueSource, ::Ifc4x3_tc1::IfcMetricValueSelect* v10_DataValue, ::Ifc4x3_tc1::IfcReference* v11_ReferencePath) : IfcConstraint(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcConstraintEnum::Class(),(size_t)v3_ConstraintGrade))); if (v4_ConstraintSource) {set_attribute_value(3, (*v4_ConstraintSource)); }set_attribute_value(4, v5_CreatingActor ? v5_CreatingActor->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v6_CreationTime) {set_attribute_value(5, (*v6_CreationTime)); } if (v7_UserDefinedGrade) {set_attribute_value(6, (*v7_UserDefinedGrade)); }set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcBenchmarkEnum::Class(),(size_t)v8_Benchmark))); if (v9_ValueSource) {set_attribute_value(8, (*v9_ValueSource)); }set_attribute_value(9, v10_DataValue ? v10_DataValue->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(10, v11_ReferencePath ? v11_ReferencePath->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcMirroredProfileDef


const IfcParse::entity& Ifc4x3_tc1::IfcMirroredProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[668]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMirroredProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[668]); }
Ifc4x3_tc1::IfcMirroredProfileDef::IfcMirroredProfileDef(IfcEntityInstanceData&& e) : IfcDerivedProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcMirroredProfileDef::IfcMirroredProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcProfileDef* v3_ParentProfile, boost::optional< std::string > v5_Label) : IfcDerivedProfileDef(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_ParentProfile ? v3_ParentProfile->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_Label) {set_attribute_value(4, (*v5_Label)); }; populate_derived(); }

// Function implementations for IfcMobileTelecommunicationsAppliance
boost::optional< ::Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Value > Ifc4x3_tc1::IfcMobileTelecommunicationsAppliance::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcMobileTelecommunicationsAppliance::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMobileTelecommunicationsAppliance::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[669]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMobileTelecommunicationsAppliance::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[669]); }
Ifc4x3_tc1::IfcMobileTelecommunicationsAppliance::IfcMobileTelecommunicationsAppliance(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcMobileTelecommunicationsAppliance::IfcMobileTelecommunicationsAppliance(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcMobileTelecommunicationsApplianceType
::Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Value Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceType::setPredefinedType(::Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[670]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[670]); }
Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceType::IfcMobileTelecommunicationsApplianceType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceType::IfcMobileTelecommunicationsApplianceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcMobileTelecommunicationsApplianceTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcMonetaryUnit
std::string Ifc4x3_tc1::IfcMonetaryUnit::Currency() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcMonetaryUnit::setCurrency(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcMonetaryUnit::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[683]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMonetaryUnit::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[683]); }
Ifc4x3_tc1::IfcMonetaryUnit::IfcMonetaryUnit(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcMonetaryUnit::IfcMonetaryUnit(std::string v1_Currency) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Currency));; populate_derived(); }

// Function implementations for IfcMooringDevice
boost::optional< ::Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Value > Ifc4x3_tc1::IfcMooringDevice::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcMooringDeviceTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcMooringDevice::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMooringDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[685]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMooringDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[685]); }
Ifc4x3_tc1::IfcMooringDevice::IfcMooringDevice(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcMooringDevice::IfcMooringDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcMooringDeviceType
::Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Value Ifc4x3_tc1::IfcMooringDeviceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcMooringDeviceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcMooringDeviceType::setPredefinedType(::Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcMooringDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[686]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMooringDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[686]); }
Ifc4x3_tc1::IfcMooringDeviceType::IfcMooringDeviceType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcMooringDeviceType::IfcMooringDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcMooringDeviceTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcMotorConnection
boost::optional< ::Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Value > Ifc4x3_tc1::IfcMotorConnection::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcMotorConnectionTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcMotorConnection::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcMotorConnection::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[688]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMotorConnection::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[688]); }
Ifc4x3_tc1::IfcMotorConnection::IfcMotorConnection(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcMotorConnection::IfcMotorConnection(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcMotorConnectionType
::Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Value Ifc4x3_tc1::IfcMotorConnectionType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcMotorConnectionTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcMotorConnectionType::setPredefinedType(::Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcMotorConnectionType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[689]); }
const IfcParse::entity& Ifc4x3_tc1::IfcMotorConnectionType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[689]); }
Ifc4x3_tc1::IfcMotorConnectionType::IfcMotorConnectionType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcMotorConnectionType::IfcMotorConnectionType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcMotorConnectionTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcNamedUnit
::Ifc4x3_tc1::IfcDimensionalExponents* Ifc4x3_tc1::IfcNamedUnit::Dimensions() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcDimensionalExponents>(true); }
void Ifc4x3_tc1::IfcNamedUnit::setDimensions(::Ifc4x3_tc1::IfcDimensionalExponents* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcUnitEnum::Value Ifc4x3_tc1::IfcNamedUnit::UnitType() const {  return ::Ifc4x3_tc1::IfcUnitEnum::FromString(data_.get_attribute_value(1)); }
void Ifc4x3_tc1::IfcNamedUnit::setUnitType(::Ifc4x3_tc1::IfcUnitEnum::Value v) { set_attribute_value(1, EnumerationReference(&::Ifc4x3_tc1::IfcUnitEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcNamedUnit::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[691]); }
const IfcParse::entity& Ifc4x3_tc1::IfcNamedUnit::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[691]); }
Ifc4x3_tc1::IfcNamedUnit::IfcNamedUnit(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcNamedUnit::IfcNamedUnit(::Ifc4x3_tc1::IfcDimensionalExponents* v1_Dimensions, ::Ifc4x3_tc1::IfcUnitEnum::Value v2_UnitType) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Dimensions ? v1_Dimensions->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcUnitEnum::Class(),(size_t)v2_UnitType)));; populate_derived(); }

// Function implementations for IfcNavigationElement
boost::optional< ::Ifc4x3_tc1::IfcNavigationElementTypeEnum::Value > Ifc4x3_tc1::IfcNavigationElement::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcNavigationElementTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcNavigationElement::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcNavigationElementTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcNavigationElementTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcNavigationElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[692]); }
const IfcParse::entity& Ifc4x3_tc1::IfcNavigationElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[692]); }
Ifc4x3_tc1::IfcNavigationElement::IfcNavigationElement(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcNavigationElement::IfcNavigationElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcNavigationElementTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcNavigationElementTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcNavigationElementType
::Ifc4x3_tc1::IfcNavigationElementTypeEnum::Value Ifc4x3_tc1::IfcNavigationElementType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcNavigationElementTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcNavigationElementType::setPredefinedType(::Ifc4x3_tc1::IfcNavigationElementTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcNavigationElementTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcNavigationElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[693]); }
const IfcParse::entity& Ifc4x3_tc1::IfcNavigationElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[693]); }
Ifc4x3_tc1::IfcNavigationElementType::IfcNavigationElementType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcNavigationElementType::IfcNavigationElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcNavigationElementTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcNavigationElementTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcObject
boost::optional< std::string > Ifc4x3_tc1::IfcObject::ObjectType() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcObject::setObjectType(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }

::Ifc4x3_tc1::IfcRelDefinesByObject::list::ptr Ifc4x3_tc1::IfcObject::IsDeclaredBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[930], 4)->as<IfcRelDefinesByObject>(); }
::Ifc4x3_tc1::IfcRelDefinesByObject::list::ptr Ifc4x3_tc1::IfcObject::Declares() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[930], 5)->as<IfcRelDefinesByObject>(); }
::Ifc4x3_tc1::IfcRelDefinesByType::list::ptr Ifc4x3_tc1::IfcObject::IsTypedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[933], 4)->as<IfcRelDefinesByType>(); }
::Ifc4x3_tc1::IfcRelDefinesByProperties::list::ptr Ifc4x3_tc1::IfcObject::IsDefinedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[931], 4)->as<IfcRelDefinesByProperties>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcObject::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[698]); }
const IfcParse::entity& Ifc4x3_tc1::IfcObject::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[698]); }
Ifc4x3_tc1::IfcObject::IfcObject(IfcEntityInstanceData&& e) : IfcObjectDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcObject::IfcObject(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType) : IfcObjectDefinition(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }; populate_derived(); }

// Function implementations for IfcObjectDefinition

::Ifc4x3_tc1::IfcRelAssigns::list::ptr Ifc4x3_tc1::IfcObjectDefinition::HasAssignments() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[898], 4)->as<IfcRelAssigns>(); }
::Ifc4x3_tc1::IfcRelNests::list::ptr Ifc4x3_tc1::IfcObjectDefinition::Nests() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[937], 5)->as<IfcRelNests>(); }
::Ifc4x3_tc1::IfcRelNests::list::ptr Ifc4x3_tc1::IfcObjectDefinition::IsNestedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[937], 4)->as<IfcRelNests>(); }
::Ifc4x3_tc1::IfcRelDeclares::list::ptr Ifc4x3_tc1::IfcObjectDefinition::HasContext() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[927], 5)->as<IfcRelDeclares>(); }
::Ifc4x3_tc1::IfcRelAggregates::list::ptr Ifc4x3_tc1::IfcObjectDefinition::IsDecomposedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[897], 4)->as<IfcRelAggregates>(); }
::Ifc4x3_tc1::IfcRelAggregates::list::ptr Ifc4x3_tc1::IfcObjectDefinition::Decomposes() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[897], 5)->as<IfcRelAggregates>(); }
::Ifc4x3_tc1::IfcRelAssociates::list::ptr Ifc4x3_tc1::IfcObjectDefinition::HasAssociations() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[906], 4)->as<IfcRelAssociates>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcObjectDefinition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[699]); }
const IfcParse::entity& Ifc4x3_tc1::IfcObjectDefinition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[699]); }
Ifc4x3_tc1::IfcObjectDefinition::IfcObjectDefinition(IfcEntityInstanceData&& e) : IfcRoot(std::move(e)) { }
Ifc4x3_tc1::IfcObjectDefinition::IfcObjectDefinition(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcRoot(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }; populate_derived(); }

// Function implementations for IfcObjectPlacement
::Ifc4x3_tc1::IfcObjectPlacement* Ifc4x3_tc1::IfcObjectPlacement::PlacementRelTo() const { if(data_.get_attribute_value(0).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcObjectPlacement>(true); }
void Ifc4x3_tc1::IfcObjectPlacement::setPlacementRelTo(::Ifc4x3_tc1::IfcObjectPlacement* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }

::Ifc4x3_tc1::IfcProduct::list::ptr Ifc4x3_tc1::IfcObjectPlacement::PlacesObject() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[798], 5)->as<IfcProduct>(); }
::Ifc4x3_tc1::IfcObjectPlacement::list::ptr Ifc4x3_tc1::IfcObjectPlacement::ReferencedByPlacements() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[702], 0)->as<IfcObjectPlacement>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcObjectPlacement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[702]); }
const IfcParse::entity& Ifc4x3_tc1::IfcObjectPlacement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[702]); }
Ifc4x3_tc1::IfcObjectPlacement::IfcObjectPlacement(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcObjectPlacement::IfcObjectPlacement(::Ifc4x3_tc1::IfcObjectPlacement* v1_PlacementRelTo) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_PlacementRelTo ? v1_PlacementRelTo->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcObjective
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcConstraint >::ptr > Ifc4x3_tc1::IfcObjective::BenchmarkValues() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(7); return es->as< ::Ifc4x3_tc1::IfcConstraint >(); }
void Ifc4x3_tc1::IfcObjective::setBenchmarkValues(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcConstraint >::ptr > v) { if (v) {set_attribute_value(7, (*v)->generalize());} else {unset_attribute_value(7);} }
boost::optional< ::Ifc4x3_tc1::IfcLogicalOperatorEnum::Value > Ifc4x3_tc1::IfcObjective::LogicalAggregator() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcLogicalOperatorEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcObjective::setLogicalAggregator(boost::optional< ::Ifc4x3_tc1::IfcLogicalOperatorEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcLogicalOperatorEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }
::Ifc4x3_tc1::IfcObjectiveEnum::Value Ifc4x3_tc1::IfcObjective::ObjectiveQualifier() const {  return ::Ifc4x3_tc1::IfcObjectiveEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcObjective::setObjectiveQualifier(::Ifc4x3_tc1::IfcObjectiveEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcObjectiveEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }
boost::optional< std::string > Ifc4x3_tc1::IfcObjective::UserDefinedQualifier() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcObjective::setUserDefinedQualifier(boost::optional< std::string > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcObjective::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[700]); }
const IfcParse::entity& Ifc4x3_tc1::IfcObjective::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[700]); }
Ifc4x3_tc1::IfcObjective::IfcObjective(IfcEntityInstanceData&& e) : IfcConstraint(std::move(e)) { }
Ifc4x3_tc1::IfcObjective::IfcObjective(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcConstraintEnum::Value v3_ConstraintGrade, boost::optional< std::string > v4_ConstraintSource, ::Ifc4x3_tc1::IfcActorSelect* v5_CreatingActor, boost::optional< std::string > v6_CreationTime, boost::optional< std::string > v7_UserDefinedGrade, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcConstraint >::ptr > v8_BenchmarkValues, boost::optional< ::Ifc4x3_tc1::IfcLogicalOperatorEnum::Value > v9_LogicalAggregator, ::Ifc4x3_tc1::IfcObjectiveEnum::Value v10_ObjectiveQualifier, boost::optional< std::string > v11_UserDefinedQualifier) : IfcConstraint(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcConstraintEnum::Class(),(size_t)v3_ConstraintGrade))); if (v4_ConstraintSource) {set_attribute_value(3, (*v4_ConstraintSource)); }set_attribute_value(4, v5_CreatingActor ? v5_CreatingActor->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v6_CreationTime) {set_attribute_value(5, (*v6_CreationTime)); } if (v7_UserDefinedGrade) {set_attribute_value(6, (*v7_UserDefinedGrade)); } if (v8_BenchmarkValues) {set_attribute_value(7, (*v8_BenchmarkValues)->generalize()); } if (v9_LogicalAggregator) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcLogicalOperatorEnum::Class(),(size_t)*v9_LogicalAggregator))); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcObjectiveEnum::Class(),(size_t)v10_ObjectiveQualifier))); if (v11_UserDefinedQualifier) {set_attribute_value(10, (*v11_UserDefinedQualifier)); }; populate_derived(); }

// Function implementations for IfcOccupant
boost::optional< ::Ifc4x3_tc1::IfcOccupantTypeEnum::Value > Ifc4x3_tc1::IfcOccupant::PredefinedType() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcOccupantTypeEnum::FromString(data_.get_attribute_value(6)); }
void Ifc4x3_tc1::IfcOccupant::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcOccupantTypeEnum::Value > v) { if (v) {set_attribute_value(6, EnumerationReference(&::Ifc4x3_tc1::IfcOccupantTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(6);} }


const IfcParse::entity& Ifc4x3_tc1::IfcOccupant::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[704]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOccupant::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[704]); }
Ifc4x3_tc1::IfcOccupant::IfcOccupant(IfcEntityInstanceData&& e) : IfcActor(std::move(e)) { }
Ifc4x3_tc1::IfcOccupant::IfcOccupant(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcActorSelect* v6_TheActor, boost::optional< ::Ifc4x3_tc1::IfcOccupantTypeEnum::Value > v7_PredefinedType) : IfcActor(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_TheActor ? v6_TheActor->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v7_PredefinedType) {set_attribute_value(6, (EnumerationReference(&::Ifc4x3_tc1::IfcOccupantTypeEnum::Class(),(size_t)*v7_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcOffsetCurve
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcOffsetCurve::BasisCurve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcOffsetCurve::setBasisCurve(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcOffsetCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[706]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOffsetCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[706]); }
Ifc4x3_tc1::IfcOffsetCurve::IfcOffsetCurve(IfcEntityInstanceData&& e) : IfcCurve(std::move(e)) { }
Ifc4x3_tc1::IfcOffsetCurve::IfcOffsetCurve(::Ifc4x3_tc1::IfcCurve* v1_BasisCurve) : IfcCurve(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_BasisCurve ? v1_BasisCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcOffsetCurve2D
double Ifc4x3_tc1::IfcOffsetCurve2D::Distance() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcOffsetCurve2D::setDistance(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::logic::tribool Ifc4x3_tc1::IfcOffsetCurve2D::SelfIntersect() const {  boost::logic::tribool v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcOffsetCurve2D::setSelfIntersect(boost::logic::tribool v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcOffsetCurve2D::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[707]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOffsetCurve2D::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[707]); }
Ifc4x3_tc1::IfcOffsetCurve2D::IfcOffsetCurve2D(IfcEntityInstanceData&& e) : IfcOffsetCurve(std::move(e)) { }
Ifc4x3_tc1::IfcOffsetCurve2D::IfcOffsetCurve2D(::Ifc4x3_tc1::IfcCurve* v1_BasisCurve, double v2_Distance, boost::logic::tribool v3_SelfIntersect) : IfcOffsetCurve(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_BasisCurve ? v1_BasisCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Distance));set_attribute_value(2, (v3_SelfIntersect));; populate_derived(); }

// Function implementations for IfcOffsetCurve3D
double Ifc4x3_tc1::IfcOffsetCurve3D::Distance() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcOffsetCurve3D::setDistance(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::logic::tribool Ifc4x3_tc1::IfcOffsetCurve3D::SelfIntersect() const {  boost::logic::tribool v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcOffsetCurve3D::setSelfIntersect(boost::logic::tribool v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcOffsetCurve3D::RefDirection() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcOffsetCurve3D::setRefDirection(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcOffsetCurve3D::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[708]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOffsetCurve3D::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[708]); }
Ifc4x3_tc1::IfcOffsetCurve3D::IfcOffsetCurve3D(IfcEntityInstanceData&& e) : IfcOffsetCurve(std::move(e)) { }
Ifc4x3_tc1::IfcOffsetCurve3D::IfcOffsetCurve3D(::Ifc4x3_tc1::IfcCurve* v1_BasisCurve, double v2_Distance, boost::logic::tribool v3_SelfIntersect, ::Ifc4x3_tc1::IfcDirection* v4_RefDirection) : IfcOffsetCurve(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_BasisCurve ? v1_BasisCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Distance));set_attribute_value(2, (v3_SelfIntersect));set_attribute_value(3, v4_RefDirection ? v4_RefDirection->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcOffsetCurveByDistances
aggregate_of< ::Ifc4x3_tc1::IfcPointByDistanceExpression >::ptr Ifc4x3_tc1::IfcOffsetCurveByDistances::OffsetValues() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcPointByDistanceExpression >(); }
void Ifc4x3_tc1::IfcOffsetCurveByDistances::setOffsetValues(aggregate_of< ::Ifc4x3_tc1::IfcPointByDistanceExpression >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }
boost::optional< std::string > Ifc4x3_tc1::IfcOffsetCurveByDistances::Tag() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcOffsetCurveByDistances::setTag(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }


const IfcParse::entity& Ifc4x3_tc1::IfcOffsetCurveByDistances::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[709]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOffsetCurveByDistances::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[709]); }
Ifc4x3_tc1::IfcOffsetCurveByDistances::IfcOffsetCurveByDistances(IfcEntityInstanceData&& e) : IfcOffsetCurve(std::move(e)) { }
Ifc4x3_tc1::IfcOffsetCurveByDistances::IfcOffsetCurveByDistances(::Ifc4x3_tc1::IfcCurve* v1_BasisCurve, aggregate_of< ::Ifc4x3_tc1::IfcPointByDistanceExpression >::ptr v2_OffsetValues, boost::optional< std::string > v3_Tag) : IfcOffsetCurve(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_BasisCurve ? v1_BasisCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_OffsetValues)->generalize()); if (v3_Tag) {set_attribute_value(2, (*v3_Tag)); }; populate_derived(); }

// Function implementations for IfcOpenCrossProfileDef
bool Ifc4x3_tc1::IfcOpenCrossProfileDef::HorizontalWidths() const {  bool v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcOpenCrossProfileDef::setHorizontalWidths(bool v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
std::vector< double > /*[1:?]*/ Ifc4x3_tc1::IfcOpenCrossProfileDef::Widths() const {  std::vector< double > /*[1:?]*/ v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcOpenCrossProfileDef::setWidths(std::vector< double > /*[1:?]*/ v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
std::vector< double > /*[1:?]*/ Ifc4x3_tc1::IfcOpenCrossProfileDef::Slopes() const {  std::vector< double > /*[1:?]*/ v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcOpenCrossProfileDef::setSlopes(std::vector< double > /*[1:?]*/ v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
boost::optional< std::vector< std::string > /*[2:?]*/ > Ifc4x3_tc1::IfcOpenCrossProfileDef::Tags() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::vector< std::string > /*[2:?]*/ v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcOpenCrossProfileDef::setTags(boost::optional< std::vector< std::string > /*[2:?]*/ > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
::Ifc4x3_tc1::IfcCartesianPoint* Ifc4x3_tc1::IfcOpenCrossProfileDef::OffsetPoint() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcCartesianPoint>(true); }
void Ifc4x3_tc1::IfcOpenCrossProfileDef::setOffsetPoint(::Ifc4x3_tc1::IfcCartesianPoint* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcOpenCrossProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[710]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOpenCrossProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[710]); }
Ifc4x3_tc1::IfcOpenCrossProfileDef::IfcOpenCrossProfileDef(IfcEntityInstanceData&& e) : IfcProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcOpenCrossProfileDef::IfcOpenCrossProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, bool v3_HorizontalWidths, std::vector< double > /*[1:?]*/ v4_Widths, std::vector< double > /*[1:?]*/ v5_Slopes, boost::optional< std::vector< std::string > /*[2:?]*/ > v6_Tags, ::Ifc4x3_tc1::IfcCartesianPoint* v7_OffsetPoint) : IfcProfileDef(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, (v3_HorizontalWidths));set_attribute_value(3, (v4_Widths));set_attribute_value(4, (v5_Slopes)); if (v6_Tags) {set_attribute_value(5, (*v6_Tags)); }set_attribute_value(6, v7_OffsetPoint ? v7_OffsetPoint->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcOpenShell


const IfcParse::entity& Ifc4x3_tc1::IfcOpenShell::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[713]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOpenShell::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[713]); }
Ifc4x3_tc1::IfcOpenShell::IfcOpenShell(IfcEntityInstanceData&& e) : IfcConnectedFaceSet(std::move(e)) { }
Ifc4x3_tc1::IfcOpenShell::IfcOpenShell(aggregate_of< ::Ifc4x3_tc1::IfcFace >::ptr v1_CfsFaces) : IfcConnectedFaceSet(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_CfsFaces)->generalize());; populate_derived(); }

// Function implementations for IfcOpeningElement
boost::optional< ::Ifc4x3_tc1::IfcOpeningElementTypeEnum::Value > Ifc4x3_tc1::IfcOpeningElement::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcOpeningElementTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcOpeningElement::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcOpeningElementTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcOpeningElementTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }

::Ifc4x3_tc1::IfcRelFillsElement::list::ptr Ifc4x3_tc1::IfcOpeningElement::HasFillings() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[934], 4)->as<IfcRelFillsElement>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcOpeningElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[711]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOpeningElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[711]); }
Ifc4x3_tc1::IfcOpeningElement::IfcOpeningElement(IfcEntityInstanceData&& e) : IfcFeatureElementSubtraction(std::move(e)) { }
Ifc4x3_tc1::IfcOpeningElement::IfcOpeningElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcOpeningElementTypeEnum::Value > v9_PredefinedType) : IfcFeatureElementSubtraction(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcOpeningElementTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcOrganization
boost::optional< std::string > Ifc4x3_tc1::IfcOrganization::Identification() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcOrganization::setIdentification(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
std::string Ifc4x3_tc1::IfcOrganization::Name() const {  std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcOrganization::setName(std::string v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< std::string > Ifc4x3_tc1::IfcOrganization::Description() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcOrganization::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcActorRole >::ptr > Ifc4x3_tc1::IfcOrganization::Roles() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(3); return es->as< ::Ifc4x3_tc1::IfcActorRole >(); }
void Ifc4x3_tc1::IfcOrganization::setRoles(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcActorRole >::ptr > v) { if (v) {set_attribute_value(3, (*v)->generalize());} else {unset_attribute_value(3);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAddress >::ptr > Ifc4x3_tc1::IfcOrganization::Addresses() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(4); return es->as< ::Ifc4x3_tc1::IfcAddress >(); }
void Ifc4x3_tc1::IfcOrganization::setAddresses(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAddress >::ptr > v) { if (v) {set_attribute_value(4, (*v)->generalize());} else {unset_attribute_value(4);} }

::Ifc4x3_tc1::IfcOrganizationRelationship::list::ptr Ifc4x3_tc1::IfcOrganization::IsRelatedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[715], 3)->as<IfcOrganizationRelationship>(); }
::Ifc4x3_tc1::IfcOrganizationRelationship::list::ptr Ifc4x3_tc1::IfcOrganization::Relates() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[715], 2)->as<IfcOrganizationRelationship>(); }
::Ifc4x3_tc1::IfcPersonAndOrganization::list::ptr Ifc4x3_tc1::IfcOrganization::Engages() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[736], 1)->as<IfcPersonAndOrganization>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcOrganization::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[714]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOrganization::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[714]); }
Ifc4x3_tc1::IfcOrganization::IfcOrganization(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcOrganization::IfcOrganization(boost::optional< std::string > v1_Identification, std::string v2_Name, boost::optional< std::string > v3_Description, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcActorRole >::ptr > v4_Roles, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAddress >::ptr > v5_Addresses) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(5))) {  if (v1_Identification) {set_attribute_value(0, (*v1_Identification)); }set_attribute_value(1, (v2_Name)); if (v3_Description) {set_attribute_value(2, (*v3_Description)); } if (v4_Roles) {set_attribute_value(3, (*v4_Roles)->generalize()); } if (v5_Addresses) {set_attribute_value(4, (*v5_Addresses)->generalize()); }; populate_derived(); }

// Function implementations for IfcOrganizationRelationship
::Ifc4x3_tc1::IfcOrganization* Ifc4x3_tc1::IfcOrganizationRelationship::RelatingOrganization() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcOrganization>(true); }
void Ifc4x3_tc1::IfcOrganizationRelationship::setRelatingOrganization(::Ifc4x3_tc1::IfcOrganization* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
aggregate_of< ::Ifc4x3_tc1::IfcOrganization >::ptr Ifc4x3_tc1::IfcOrganizationRelationship::RelatedOrganizations() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(3); return es->as< ::Ifc4x3_tc1::IfcOrganization >(); }
void Ifc4x3_tc1::IfcOrganizationRelationship::setRelatedOrganizations(aggregate_of< ::Ifc4x3_tc1::IfcOrganization >::ptr v) { set_attribute_value(3, (v)->generalize());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcOrganizationRelationship::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[715]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOrganizationRelationship::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[715]); }
Ifc4x3_tc1::IfcOrganizationRelationship::IfcOrganizationRelationship(IfcEntityInstanceData&& e) : IfcResourceLevelRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcOrganizationRelationship::IfcOrganizationRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcOrganization* v3_RelatingOrganization, aggregate_of< ::Ifc4x3_tc1::IfcOrganization >::ptr v4_RelatedOrganizations) : IfcResourceLevelRelationship(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_RelatingOrganization ? v3_RelatingOrganization->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_RelatedOrganizations)->generalize());; populate_derived(); }

// Function implementations for IfcOrientedEdge
::Ifc4x3_tc1::IfcEdge* Ifc4x3_tc1::IfcOrientedEdge::EdgeElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcEdge>(true); }
void Ifc4x3_tc1::IfcOrientedEdge::setEdgeElement(::Ifc4x3_tc1::IfcEdge* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
bool Ifc4x3_tc1::IfcOrientedEdge::Orientation() const {  bool v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcOrientedEdge::setOrientation(bool v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcOrientedEdge::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[716]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOrientedEdge::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[716]); }
Ifc4x3_tc1::IfcOrientedEdge::IfcOrientedEdge(IfcEntityInstanceData&& e) : IfcEdge(std::move(e)) { }
Ifc4x3_tc1::IfcOrientedEdge::IfcOrientedEdge(::Ifc4x3_tc1::IfcEdge* v3_EdgeElement, bool v4_Orientation) : IfcEdge(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(2, v3_EdgeElement ? v3_EdgeElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Orientation));; populate_derived(); }

// Function implementations for IfcOuterBoundaryCurve


const IfcParse::entity& Ifc4x3_tc1::IfcOuterBoundaryCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[717]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOuterBoundaryCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[717]); }
Ifc4x3_tc1::IfcOuterBoundaryCurve::IfcOuterBoundaryCurve(IfcEntityInstanceData&& e) : IfcBoundaryCurve(std::move(e)) { }
Ifc4x3_tc1::IfcOuterBoundaryCurve::IfcOuterBoundaryCurve(aggregate_of< ::Ifc4x3_tc1::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect) : IfcBoundaryCurve(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_Segments)->generalize());set_attribute_value(1, (v2_SelfIntersect));; populate_derived(); }

// Function implementations for IfcOutlet
boost::optional< ::Ifc4x3_tc1::IfcOutletTypeEnum::Value > Ifc4x3_tc1::IfcOutlet::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcOutletTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcOutlet::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcOutletTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcOutletTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcOutlet::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[718]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOutlet::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[718]); }
Ifc4x3_tc1::IfcOutlet::IfcOutlet(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcOutlet::IfcOutlet(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcOutletTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcOutletTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcOutletType
::Ifc4x3_tc1::IfcOutletTypeEnum::Value Ifc4x3_tc1::IfcOutletType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcOutletTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcOutletType::setPredefinedType(::Ifc4x3_tc1::IfcOutletTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcOutletTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcOutletType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[719]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOutletType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[719]); }
Ifc4x3_tc1::IfcOutletType::IfcOutletType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcOutletType::IfcOutletType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcOutletTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcOutletTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcOwnerHistory
::Ifc4x3_tc1::IfcPersonAndOrganization* Ifc4x3_tc1::IfcOwnerHistory::OwningUser() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcPersonAndOrganization>(true); }
void Ifc4x3_tc1::IfcOwnerHistory::setOwningUser(::Ifc4x3_tc1::IfcPersonAndOrganization* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcApplication* Ifc4x3_tc1::IfcOwnerHistory::OwningApplication() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcApplication>(true); }
void Ifc4x3_tc1::IfcOwnerHistory::setOwningApplication(::Ifc4x3_tc1::IfcApplication* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
boost::optional< ::Ifc4x3_tc1::IfcStateEnum::Value > Ifc4x3_tc1::IfcOwnerHistory::State() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcStateEnum::FromString(data_.get_attribute_value(2)); }
void Ifc4x3_tc1::IfcOwnerHistory::setState(boost::optional< ::Ifc4x3_tc1::IfcStateEnum::Value > v) { if (v) {set_attribute_value(2, EnumerationReference(&::Ifc4x3_tc1::IfcStateEnum::Class(), (size_t) *v));} else {unset_attribute_value(2);} }
boost::optional< ::Ifc4x3_tc1::IfcChangeActionEnum::Value > Ifc4x3_tc1::IfcOwnerHistory::ChangeAction() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcChangeActionEnum::FromString(data_.get_attribute_value(3)); }
void Ifc4x3_tc1::IfcOwnerHistory::setChangeAction(boost::optional< ::Ifc4x3_tc1::IfcChangeActionEnum::Value > v) { if (v) {set_attribute_value(3, EnumerationReference(&::Ifc4x3_tc1::IfcChangeActionEnum::Class(), (size_t) *v));} else {unset_attribute_value(3);} }
boost::optional< int > Ifc4x3_tc1::IfcOwnerHistory::LastModifiedDate() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } int v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcOwnerHistory::setLastModifiedDate(boost::optional< int > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
::Ifc4x3_tc1::IfcPersonAndOrganization* Ifc4x3_tc1::IfcOwnerHistory::LastModifyingUser() const { if(data_.get_attribute_value(5).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcPersonAndOrganization>(true); }
void Ifc4x3_tc1::IfcOwnerHistory::setLastModifyingUser(::Ifc4x3_tc1::IfcPersonAndOrganization* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcApplication* Ifc4x3_tc1::IfcOwnerHistory::LastModifyingApplication() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcApplication>(true); }
void Ifc4x3_tc1::IfcOwnerHistory::setLastModifyingApplication(::Ifc4x3_tc1::IfcApplication* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
int Ifc4x3_tc1::IfcOwnerHistory::CreationDate() const {  int v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcOwnerHistory::setCreationDate(int v) { set_attribute_value(7, v);if constexpr (false)unset_attribute_value(7); }


const IfcParse::entity& Ifc4x3_tc1::IfcOwnerHistory::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[721]); }
const IfcParse::entity& Ifc4x3_tc1::IfcOwnerHistory::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[721]); }
Ifc4x3_tc1::IfcOwnerHistory::IfcOwnerHistory(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcOwnerHistory::IfcOwnerHistory(::Ifc4x3_tc1::IfcPersonAndOrganization* v1_OwningUser, ::Ifc4x3_tc1::IfcApplication* v2_OwningApplication, boost::optional< ::Ifc4x3_tc1::IfcStateEnum::Value > v3_State, boost::optional< ::Ifc4x3_tc1::IfcChangeActionEnum::Value > v4_ChangeAction, boost::optional< int > v5_LastModifiedDate, ::Ifc4x3_tc1::IfcPersonAndOrganization* v6_LastModifyingUser, ::Ifc4x3_tc1::IfcApplication* v7_LastModifyingApplication, int v8_CreationDate) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, v1_OwningUser ? v1_OwningUser->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_OwningApplication ? v2_OwningApplication->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_State) {set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcStateEnum::Class(),(size_t)*v3_State))); } if (v4_ChangeAction) {set_attribute_value(3, (EnumerationReference(&::Ifc4x3_tc1::IfcChangeActionEnum::Class(),(size_t)*v4_ChangeAction))); } if (v5_LastModifiedDate) {set_attribute_value(4, (*v5_LastModifiedDate)); }set_attribute_value(5, v6_LastModifyingUser ? v6_LastModifyingUser->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_LastModifyingApplication ? v7_LastModifyingApplication->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (v8_CreationDate));; populate_derived(); }

// Function implementations for IfcParameterizedProfileDef
::Ifc4x3_tc1::IfcAxis2Placement2D* Ifc4x3_tc1::IfcParameterizedProfileDef::Position() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcAxis2Placement2D>(true); }
void Ifc4x3_tc1::IfcParameterizedProfileDef::setPosition(::Ifc4x3_tc1::IfcAxis2Placement2D* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcParameterizedProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[722]); }
const IfcParse::entity& Ifc4x3_tc1::IfcParameterizedProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[722]); }
Ifc4x3_tc1::IfcParameterizedProfileDef::IfcParameterizedProfileDef(IfcEntityInstanceData&& e) : IfcProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcParameterizedProfileDef::IfcParameterizedProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position) : IfcProfileDef(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPath
aggregate_of< ::Ifc4x3_tc1::IfcOrientedEdge >::ptr Ifc4x3_tc1::IfcPath::EdgeList() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcOrientedEdge >(); }
void Ifc4x3_tc1::IfcPath::setEdgeList(aggregate_of< ::Ifc4x3_tc1::IfcOrientedEdge >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcPath::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[724]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPath::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[724]); }
Ifc4x3_tc1::IfcPath::IfcPath(IfcEntityInstanceData&& e) : IfcTopologicalRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcPath::IfcPath(aggregate_of< ::Ifc4x3_tc1::IfcOrientedEdge >::ptr v1_EdgeList) : IfcTopologicalRepresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_EdgeList)->generalize());; populate_derived(); }

// Function implementations for IfcPavement
boost::optional< ::Ifc4x3_tc1::IfcPavementTypeEnum::Value > Ifc4x3_tc1::IfcPavement::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcPavementTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcPavement::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcPavementTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcPavementTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPavement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[725]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPavement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[725]); }
Ifc4x3_tc1::IfcPavement::IfcPavement(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcPavement::IfcPavement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcPavementTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcPavementTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcPavementType
::Ifc4x3_tc1::IfcPavementTypeEnum::Value Ifc4x3_tc1::IfcPavementType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcPavementTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcPavementType::setPredefinedType(::Ifc4x3_tc1::IfcPavementTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcPavementTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcPavementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[726]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPavementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[726]); }
Ifc4x3_tc1::IfcPavementType::IfcPavementType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcPavementType::IfcPavementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcPavementTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcPavementTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcPcurve
::Ifc4x3_tc1::IfcSurface* Ifc4x3_tc1::IfcPcurve::BasisSurface() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcSurface>(true); }
void Ifc4x3_tc1::IfcPcurve::setBasisSurface(::Ifc4x3_tc1::IfcSurface* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcPcurve::ReferenceCurve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcPcurve::setReferenceCurve(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcPcurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[728]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPcurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[728]); }
Ifc4x3_tc1::IfcPcurve::IfcPcurve(IfcEntityInstanceData&& e) : IfcCurve(std::move(e)) { }
Ifc4x3_tc1::IfcPcurve::IfcPcurve(::Ifc4x3_tc1::IfcSurface* v1_BasisSurface, ::Ifc4x3_tc1::IfcCurve* v2_ReferenceCurve) : IfcCurve(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_BasisSurface ? v1_BasisSurface->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_ReferenceCurve ? v2_ReferenceCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPerformanceHistory
std::string Ifc4x3_tc1::IfcPerformanceHistory::LifeCyclePhase() const {  std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcPerformanceHistory::setLifeCyclePhase(std::string v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
boost::optional< ::Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::Value > Ifc4x3_tc1::IfcPerformanceHistory::PredefinedType() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcPerformanceHistory::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::Value > v) { if (v) {set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(7);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPerformanceHistory::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[729]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPerformanceHistory::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[729]); }
Ifc4x3_tc1::IfcPerformanceHistory::IfcPerformanceHistory(IfcEntityInstanceData&& e) : IfcControl(std::move(e)) { }
Ifc4x3_tc1::IfcPerformanceHistory::IfcPerformanceHistory(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, std::string v7_LifeCyclePhase, boost::optional< ::Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::Value > v8_PredefinedType) : IfcControl(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); }set_attribute_value(6, (v7_LifeCyclePhase)); if (v8_PredefinedType) {set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcPerformanceHistoryTypeEnum::Class(),(size_t)*v8_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcPermeableCoveringProperties
::Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::Value Ifc4x3_tc1::IfcPermeableCoveringProperties::OperationType() const {  return ::Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::FromString(data_.get_attribute_value(4)); }
void Ifc4x3_tc1::IfcPermeableCoveringProperties::setOperationType(::Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::Value v) { set_attribute_value(4, EnumerationReference(&::Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcWindowPanelPositionEnum::Value Ifc4x3_tc1::IfcPermeableCoveringProperties::PanelPosition() const {  return ::Ifc4x3_tc1::IfcWindowPanelPositionEnum::FromString(data_.get_attribute_value(5)); }
void Ifc4x3_tc1::IfcPermeableCoveringProperties::setPanelPosition(::Ifc4x3_tc1::IfcWindowPanelPositionEnum::Value v) { set_attribute_value(5, EnumerationReference(&::Ifc4x3_tc1::IfcWindowPanelPositionEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(5); }
boost::optional< double > Ifc4x3_tc1::IfcPermeableCoveringProperties::FrameDepth() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcPermeableCoveringProperties::setFrameDepth(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< double > Ifc4x3_tc1::IfcPermeableCoveringProperties::FrameThickness() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcPermeableCoveringProperties::setFrameThickness(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
::Ifc4x3_tc1::IfcShapeAspect* Ifc4x3_tc1::IfcPermeableCoveringProperties::ShapeAspectStyle() const { if(data_.get_attribute_value(8).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(8)))->as<::Ifc4x3_tc1::IfcShapeAspect>(true); }
void Ifc4x3_tc1::IfcPermeableCoveringProperties::setShapeAspectStyle(::Ifc4x3_tc1::IfcShapeAspect* v) { set_attribute_value(8, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcPermeableCoveringProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[732]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPermeableCoveringProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[732]); }
Ifc4x3_tc1::IfcPermeableCoveringProperties::IfcPermeableCoveringProperties(IfcEntityInstanceData&& e) : IfcPreDefinedPropertySet(std::move(e)) { }
Ifc4x3_tc1::IfcPermeableCoveringProperties::IfcPermeableCoveringProperties(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::Value v5_OperationType, ::Ifc4x3_tc1::IfcWindowPanelPositionEnum::Value v6_PanelPosition, boost::optional< double > v7_FrameDepth, boost::optional< double > v8_FrameThickness, ::Ifc4x3_tc1::IfcShapeAspect* v9_ShapeAspectStyle) : IfcPreDefinedPropertySet(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (EnumerationReference(&::Ifc4x3_tc1::IfcPermeableCoveringOperationEnum::Class(),(size_t)v5_OperationType)));set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcWindowPanelPositionEnum::Class(),(size_t)v6_PanelPosition))); if (v7_FrameDepth) {set_attribute_value(6, (*v7_FrameDepth)); } if (v8_FrameThickness) {set_attribute_value(7, (*v8_FrameThickness)); }set_attribute_value(8, v9_ShapeAspectStyle ? v9_ShapeAspectStyle->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPermit
boost::optional< ::Ifc4x3_tc1::IfcPermitTypeEnum::Value > Ifc4x3_tc1::IfcPermit::PredefinedType() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcPermitTypeEnum::FromString(data_.get_attribute_value(6)); }
void Ifc4x3_tc1::IfcPermit::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcPermitTypeEnum::Value > v) { if (v) {set_attribute_value(6, EnumerationReference(&::Ifc4x3_tc1::IfcPermitTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(6);} }
boost::optional< std::string > Ifc4x3_tc1::IfcPermit::Status() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcPermit::setStatus(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< std::string > Ifc4x3_tc1::IfcPermit::LongDescription() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcPermit::setLongDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPermit::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[733]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPermit::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[733]); }
Ifc4x3_tc1::IfcPermit::IfcPermit(IfcEntityInstanceData&& e) : IfcControl(std::move(e)) { }
Ifc4x3_tc1::IfcPermit::IfcPermit(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_tc1::IfcPermitTypeEnum::Value > v7_PredefinedType, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_LongDescription) : IfcControl(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_PredefinedType) {set_attribute_value(6, (EnumerationReference(&::Ifc4x3_tc1::IfcPermitTypeEnum::Class(),(size_t)*v7_PredefinedType))); } if (v8_Status) {set_attribute_value(7, (*v8_Status)); } if (v9_LongDescription) {set_attribute_value(8, (*v9_LongDescription)); }; populate_derived(); }

// Function implementations for IfcPerson
boost::optional< std::string > Ifc4x3_tc1::IfcPerson::Identification() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcPerson::setIdentification(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcPerson::FamilyName() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcPerson::setFamilyName(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcPerson::GivenName() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcPerson::setGivenName(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_tc1::IfcPerson::MiddleNames() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcPerson::setMiddleNames(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_tc1::IfcPerson::PrefixTitles() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcPerson::setPrefixTitles(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_tc1::IfcPerson::SuffixTitles() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcPerson::setSuffixTitles(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcActorRole >::ptr > Ifc4x3_tc1::IfcPerson::Roles() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(6); return es->as< ::Ifc4x3_tc1::IfcActorRole >(); }
void Ifc4x3_tc1::IfcPerson::setRoles(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcActorRole >::ptr > v) { if (v) {set_attribute_value(6, (*v)->generalize());} else {unset_attribute_value(6);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAddress >::ptr > Ifc4x3_tc1::IfcPerson::Addresses() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(7); return es->as< ::Ifc4x3_tc1::IfcAddress >(); }
void Ifc4x3_tc1::IfcPerson::setAddresses(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAddress >::ptr > v) { if (v) {set_attribute_value(7, (*v)->generalize());} else {unset_attribute_value(7);} }

::Ifc4x3_tc1::IfcPersonAndOrganization::list::ptr Ifc4x3_tc1::IfcPerson::EngagedIn() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[736], 0)->as<IfcPersonAndOrganization>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcPerson::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[735]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPerson::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[735]); }
Ifc4x3_tc1::IfcPerson::IfcPerson(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcPerson::IfcPerson(boost::optional< std::string > v1_Identification, boost::optional< std::string > v2_FamilyName, boost::optional< std::string > v3_GivenName, boost::optional< std::vector< std::string > /*[1:?]*/ > v4_MiddleNames, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_PrefixTitles, boost::optional< std::vector< std::string > /*[1:?]*/ > v6_SuffixTitles, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcActorRole >::ptr > v7_Roles, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAddress >::ptr > v8_Addresses) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(8))) {  if (v1_Identification) {set_attribute_value(0, (*v1_Identification)); } if (v2_FamilyName) {set_attribute_value(1, (*v2_FamilyName)); } if (v3_GivenName) {set_attribute_value(2, (*v3_GivenName)); } if (v4_MiddleNames) {set_attribute_value(3, (*v4_MiddleNames)); } if (v5_PrefixTitles) {set_attribute_value(4, (*v5_PrefixTitles)); } if (v6_SuffixTitles) {set_attribute_value(5, (*v6_SuffixTitles)); } if (v7_Roles) {set_attribute_value(6, (*v7_Roles)->generalize()); } if (v8_Addresses) {set_attribute_value(7, (*v8_Addresses)->generalize()); }; populate_derived(); }

// Function implementations for IfcPersonAndOrganization
::Ifc4x3_tc1::IfcPerson* Ifc4x3_tc1::IfcPersonAndOrganization::ThePerson() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcPerson>(true); }
void Ifc4x3_tc1::IfcPersonAndOrganization::setThePerson(::Ifc4x3_tc1::IfcPerson* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcOrganization* Ifc4x3_tc1::IfcPersonAndOrganization::TheOrganization() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcOrganization>(true); }
void Ifc4x3_tc1::IfcPersonAndOrganization::setTheOrganization(::Ifc4x3_tc1::IfcOrganization* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcActorRole >::ptr > Ifc4x3_tc1::IfcPersonAndOrganization::Roles() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcActorRole >(); }
void Ifc4x3_tc1::IfcPersonAndOrganization::setRoles(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcActorRole >::ptr > v) { if (v) {set_attribute_value(2, (*v)->generalize());} else {unset_attribute_value(2);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPersonAndOrganization::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[736]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPersonAndOrganization::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[736]); }
Ifc4x3_tc1::IfcPersonAndOrganization::IfcPersonAndOrganization(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcPersonAndOrganization::IfcPersonAndOrganization(::Ifc4x3_tc1::IfcPerson* v1_ThePerson, ::Ifc4x3_tc1::IfcOrganization* v2_TheOrganization, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcActorRole >::ptr > v3_Roles) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_ThePerson ? v1_ThePerson->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_TheOrganization ? v2_TheOrganization->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Roles) {set_attribute_value(2, (*v3_Roles)->generalize()); }; populate_derived(); }

// Function implementations for IfcPhysicalComplexQuantity
aggregate_of< ::Ifc4x3_tc1::IfcPhysicalQuantity >::ptr Ifc4x3_tc1::IfcPhysicalComplexQuantity::HasQuantities() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcPhysicalQuantity >(); }
void Ifc4x3_tc1::IfcPhysicalComplexQuantity::setHasQuantities(aggregate_of< ::Ifc4x3_tc1::IfcPhysicalQuantity >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }
std::string Ifc4x3_tc1::IfcPhysicalComplexQuantity::Discrimination() const {  std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcPhysicalComplexQuantity::setDiscrimination(std::string v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcPhysicalComplexQuantity::Quality() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcPhysicalComplexQuantity::setQuality(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcPhysicalComplexQuantity::Usage() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcPhysicalComplexQuantity::setUsage(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPhysicalComplexQuantity::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[738]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPhysicalComplexQuantity::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[738]); }
Ifc4x3_tc1::IfcPhysicalComplexQuantity::IfcPhysicalComplexQuantity(IfcEntityInstanceData&& e) : IfcPhysicalQuantity(std::move(e)) { }
Ifc4x3_tc1::IfcPhysicalComplexQuantity::IfcPhysicalComplexQuantity(std::string v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_tc1::IfcPhysicalQuantity >::ptr v3_HasQuantities, std::string v4_Discrimination, boost::optional< std::string > v5_Quality, boost::optional< std::string > v6_Usage) : IfcPhysicalQuantity(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_HasQuantities)->generalize());set_attribute_value(3, (v4_Discrimination)); if (v5_Quality) {set_attribute_value(4, (*v5_Quality)); } if (v6_Usage) {set_attribute_value(5, (*v6_Usage)); }; populate_derived(); }

// Function implementations for IfcPhysicalQuantity
std::string Ifc4x3_tc1::IfcPhysicalQuantity::Name() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcPhysicalQuantity::setName(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcPhysicalQuantity::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcPhysicalQuantity::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }

::Ifc4x3_tc1::IfcExternalReferenceRelationship::list::ptr Ifc4x3_tc1::IfcPhysicalQuantity::HasExternalReferences() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[427], 3)->as<IfcExternalReferenceRelationship>(); }
::Ifc4x3_tc1::IfcPhysicalComplexQuantity::list::ptr Ifc4x3_tc1::IfcPhysicalQuantity::PartOfComplex() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[738], 2)->as<IfcPhysicalComplexQuantity>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcPhysicalQuantity::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[740]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPhysicalQuantity::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[740]); }
Ifc4x3_tc1::IfcPhysicalQuantity::IfcPhysicalQuantity(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcPhysicalQuantity::IfcPhysicalQuantity(std::string v1_Name, boost::optional< std::string > v2_Description) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }; populate_derived(); }

// Function implementations for IfcPhysicalSimpleQuantity
::Ifc4x3_tc1::IfcNamedUnit* Ifc4x3_tc1::IfcPhysicalSimpleQuantity::Unit() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcNamedUnit>(true); }
void Ifc4x3_tc1::IfcPhysicalSimpleQuantity::setUnit(::Ifc4x3_tc1::IfcNamedUnit* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcPhysicalSimpleQuantity::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[741]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPhysicalSimpleQuantity::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[741]); }
Ifc4x3_tc1::IfcPhysicalSimpleQuantity::IfcPhysicalSimpleQuantity(IfcEntityInstanceData&& e) : IfcPhysicalQuantity(std::move(e)) { }
Ifc4x3_tc1::IfcPhysicalSimpleQuantity::IfcPhysicalSimpleQuantity(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcNamedUnit* v3_Unit) : IfcPhysicalQuantity(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_Unit ? v3_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPile
boost::optional< ::Ifc4x3_tc1::IfcPileTypeEnum::Value > Ifc4x3_tc1::IfcPile::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcPileTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcPile::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcPileTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcPileTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }
boost::optional< ::Ifc4x3_tc1::IfcPileConstructionEnum::Value > Ifc4x3_tc1::IfcPile::ConstructionType() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcPileConstructionEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcPile::setConstructionType(boost::optional< ::Ifc4x3_tc1::IfcPileConstructionEnum::Value > v) { if (v) {set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcPileConstructionEnum::Class(), (size_t) *v));} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPile::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[742]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPile::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[742]); }
Ifc4x3_tc1::IfcPile::IfcPile(IfcEntityInstanceData&& e) : IfcDeepFoundation(std::move(e)) { }
Ifc4x3_tc1::IfcPile::IfcPile(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcPileTypeEnum::Value > v9_PredefinedType, boost::optional< ::Ifc4x3_tc1::IfcPileConstructionEnum::Value > v10_ConstructionType) : IfcDeepFoundation(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcPileTypeEnum::Class(),(size_t)*v9_PredefinedType))); } if (v10_ConstructionType) {set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcPileConstructionEnum::Class(),(size_t)*v10_ConstructionType))); }; populate_derived(); }

// Function implementations for IfcPileType
::Ifc4x3_tc1::IfcPileTypeEnum::Value Ifc4x3_tc1::IfcPileType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcPileTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcPileType::setPredefinedType(::Ifc4x3_tc1::IfcPileTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcPileTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcPileType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[744]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPileType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[744]); }
Ifc4x3_tc1::IfcPileType::IfcPileType(IfcEntityInstanceData&& e) : IfcDeepFoundationType(std::move(e)) { }
Ifc4x3_tc1::IfcPileType::IfcPileType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcPileTypeEnum::Value v10_PredefinedType) : IfcDeepFoundationType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcPileTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcPipeFitting
boost::optional< ::Ifc4x3_tc1::IfcPipeFittingTypeEnum::Value > Ifc4x3_tc1::IfcPipeFitting::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcPipeFittingTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcPipeFitting::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcPipeFittingTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcPipeFittingTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPipeFitting::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[746]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPipeFitting::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[746]); }
Ifc4x3_tc1::IfcPipeFitting::IfcPipeFitting(IfcEntityInstanceData&& e) : IfcFlowFitting(std::move(e)) { }
Ifc4x3_tc1::IfcPipeFitting::IfcPipeFitting(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcPipeFittingTypeEnum::Value > v9_PredefinedType) : IfcFlowFitting(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcPipeFittingTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcPipeFittingType
::Ifc4x3_tc1::IfcPipeFittingTypeEnum::Value Ifc4x3_tc1::IfcPipeFittingType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcPipeFittingTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcPipeFittingType::setPredefinedType(::Ifc4x3_tc1::IfcPipeFittingTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcPipeFittingTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcPipeFittingType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[747]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPipeFittingType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[747]); }
Ifc4x3_tc1::IfcPipeFittingType::IfcPipeFittingType(IfcEntityInstanceData&& e) : IfcFlowFittingType(std::move(e)) { }
Ifc4x3_tc1::IfcPipeFittingType::IfcPipeFittingType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcPipeFittingTypeEnum::Value v10_PredefinedType) : IfcFlowFittingType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcPipeFittingTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcPipeSegment
boost::optional< ::Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Value > Ifc4x3_tc1::IfcPipeSegment::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcPipeSegmentTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcPipeSegment::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPipeSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[749]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPipeSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[749]); }
Ifc4x3_tc1::IfcPipeSegment::IfcPipeSegment(IfcEntityInstanceData&& e) : IfcFlowSegment(std::move(e)) { }
Ifc4x3_tc1::IfcPipeSegment::IfcPipeSegment(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Value > v9_PredefinedType) : IfcFlowSegment(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcPipeSegmentType
::Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Value Ifc4x3_tc1::IfcPipeSegmentType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcPipeSegmentTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcPipeSegmentType::setPredefinedType(::Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcPipeSegmentType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[750]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPipeSegmentType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[750]); }
Ifc4x3_tc1::IfcPipeSegmentType::IfcPipeSegmentType(IfcEntityInstanceData&& e) : IfcFlowSegmentType(std::move(e)) { }
Ifc4x3_tc1::IfcPipeSegmentType::IfcPipeSegmentType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Value v10_PredefinedType) : IfcFlowSegmentType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcPipeSegmentTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcPixelTexture
int Ifc4x3_tc1::IfcPixelTexture::Width() const {  int v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcPixelTexture::setWidth(int v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
int Ifc4x3_tc1::IfcPixelTexture::Height() const {  int v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcPixelTexture::setHeight(int v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
int Ifc4x3_tc1::IfcPixelTexture::ColourComponents() const {  int v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcPixelTexture::setColourComponents(int v) { set_attribute_value(7, v);if constexpr (false)unset_attribute_value(7); }
std::vector< boost::dynamic_bitset<> > /*[1:?]*/ Ifc4x3_tc1::IfcPixelTexture::Pixel() const {  std::vector< boost::dynamic_bitset<> > /*[1:?]*/ v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcPixelTexture::setPixel(std::vector< boost::dynamic_bitset<> > /*[1:?]*/ v) { set_attribute_value(8, v);if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcPixelTexture::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[752]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPixelTexture::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[752]); }
Ifc4x3_tc1::IfcPixelTexture::IfcPixelTexture(IfcEntityInstanceData&& e) : IfcSurfaceTexture(std::move(e)) { }
Ifc4x3_tc1::IfcPixelTexture::IfcPixelTexture(bool v1_RepeatS, bool v2_RepeatT, boost::optional< std::string > v3_Mode, ::Ifc4x3_tc1::IfcCartesianTransformationOperator2D* v4_TextureTransform, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_Parameter, int v6_Width, int v7_Height, int v8_ColourComponents, std::vector< boost::dynamic_bitset<> > /*[1:?]*/ v9_Pixel) : IfcSurfaceTexture(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_RepeatS));set_attribute_value(1, (v2_RepeatT)); if (v3_Mode) {set_attribute_value(2, (*v3_Mode)); }set_attribute_value(3, v4_TextureTransform ? v4_TextureTransform->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_Parameter) {set_attribute_value(4, (*v5_Parameter)); }set_attribute_value(5, (v6_Width));set_attribute_value(6, (v7_Height));set_attribute_value(7, (v8_ColourComponents));set_attribute_value(8, (v9_Pixel));; populate_derived(); }

// Function implementations for IfcPlacement
::Ifc4x3_tc1::IfcPoint* Ifc4x3_tc1::IfcPlacement::Location() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcPoint>(true); }
void Ifc4x3_tc1::IfcPlacement::setLocation(::Ifc4x3_tc1::IfcPoint* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcPlacement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[753]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPlacement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[753]); }
Ifc4x3_tc1::IfcPlacement::IfcPlacement(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcPlacement::IfcPlacement(::Ifc4x3_tc1::IfcPoint* v1_Location) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_Location ? v1_Location->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPlanarBox
::Ifc4x3_tc1::IfcAxis2Placement* Ifc4x3_tc1::IfcPlanarBox::Placement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcAxis2Placement>(true); }
void Ifc4x3_tc1::IfcPlanarBox::setPlacement(::Ifc4x3_tc1::IfcAxis2Placement* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcPlanarBox::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[754]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPlanarBox::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[754]); }
Ifc4x3_tc1::IfcPlanarBox::IfcPlanarBox(IfcEntityInstanceData&& e) : IfcPlanarExtent(std::move(e)) { }
Ifc4x3_tc1::IfcPlanarBox::IfcPlanarBox(double v1_SizeInX, double v2_SizeInY, ::Ifc4x3_tc1::IfcAxis2Placement* v3_Placement) : IfcPlanarExtent(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_SizeInX));set_attribute_value(1, (v2_SizeInY));set_attribute_value(2, v3_Placement ? v3_Placement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPlanarExtent
double Ifc4x3_tc1::IfcPlanarExtent::SizeInX() const {  double v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcPlanarExtent::setSizeInX(double v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
double Ifc4x3_tc1::IfcPlanarExtent::SizeInY() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcPlanarExtent::setSizeInY(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcPlanarExtent::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[755]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPlanarExtent::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[755]); }
Ifc4x3_tc1::IfcPlanarExtent::IfcPlanarExtent(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcPlanarExtent::IfcPlanarExtent(double v1_SizeInX, double v2_SizeInY) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_SizeInX));set_attribute_value(1, (v2_SizeInY));; populate_derived(); }

// Function implementations for IfcPlane


const IfcParse::entity& Ifc4x3_tc1::IfcPlane::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[757]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPlane::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[757]); }
Ifc4x3_tc1::IfcPlane::IfcPlane(IfcEntityInstanceData&& e) : IfcElementarySurface(std::move(e)) { }
Ifc4x3_tc1::IfcPlane::IfcPlane(::Ifc4x3_tc1::IfcAxis2Placement3D* v1_Position) : IfcElementarySurface(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPlate
boost::optional< ::Ifc4x3_tc1::IfcPlateTypeEnum::Value > Ifc4x3_tc1::IfcPlate::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcPlateTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcPlate::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcPlateTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcPlateTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPlate::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[759]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPlate::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[759]); }
Ifc4x3_tc1::IfcPlate::IfcPlate(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcPlate::IfcPlate(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcPlateTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcPlateTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcPlateType
::Ifc4x3_tc1::IfcPlateTypeEnum::Value Ifc4x3_tc1::IfcPlateType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcPlateTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcPlateType::setPredefinedType(::Ifc4x3_tc1::IfcPlateTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcPlateTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcPlateType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[760]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPlateType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[760]); }
Ifc4x3_tc1::IfcPlateType::IfcPlateType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcPlateType::IfcPlateType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcPlateTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcPlateTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcPoint


const IfcParse::entity& Ifc4x3_tc1::IfcPoint::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[762]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPoint::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[762]); }
Ifc4x3_tc1::IfcPoint::IfcPoint(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcPoint::IfcPoint() : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcPointByDistanceExpression
::Ifc4x3_tc1::IfcCurveMeasureSelect* Ifc4x3_tc1::IfcPointByDistanceExpression::DistanceAlong() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCurveMeasureSelect>(true); }
void Ifc4x3_tc1::IfcPointByDistanceExpression::setDistanceAlong(::Ifc4x3_tc1::IfcCurveMeasureSelect* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
boost::optional< double > Ifc4x3_tc1::IfcPointByDistanceExpression::OffsetLateral() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcPointByDistanceExpression::setOffsetLateral(boost::optional< double > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< double > Ifc4x3_tc1::IfcPointByDistanceExpression::OffsetVertical() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcPointByDistanceExpression::setOffsetVertical(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcPointByDistanceExpression::OffsetLongitudinal() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcPointByDistanceExpression::setOffsetLongitudinal(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcPointByDistanceExpression::BasisCurve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcPointByDistanceExpression::setBasisCurve(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcPointByDistanceExpression::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[763]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPointByDistanceExpression::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[763]); }
Ifc4x3_tc1::IfcPointByDistanceExpression::IfcPointByDistanceExpression(IfcEntityInstanceData&& e) : IfcPoint(std::move(e)) { }
Ifc4x3_tc1::IfcPointByDistanceExpression::IfcPointByDistanceExpression(::Ifc4x3_tc1::IfcCurveMeasureSelect* v1_DistanceAlong, boost::optional< double > v2_OffsetLateral, boost::optional< double > v3_OffsetVertical, boost::optional< double > v4_OffsetLongitudinal, ::Ifc4x3_tc1::IfcCurve* v5_BasisCurve) : IfcPoint(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_DistanceAlong ? v1_DistanceAlong->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_OffsetLateral) {set_attribute_value(1, (*v2_OffsetLateral)); } if (v3_OffsetVertical) {set_attribute_value(2, (*v3_OffsetVertical)); } if (v4_OffsetLongitudinal) {set_attribute_value(3, (*v4_OffsetLongitudinal)); }set_attribute_value(4, v5_BasisCurve ? v5_BasisCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPointOnCurve
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcPointOnCurve::BasisCurve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcPointOnCurve::setBasisCurve(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
double Ifc4x3_tc1::IfcPointOnCurve::PointParameter() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcPointOnCurve::setPointParameter(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcPointOnCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[764]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPointOnCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[764]); }
Ifc4x3_tc1::IfcPointOnCurve::IfcPointOnCurve(IfcEntityInstanceData&& e) : IfcPoint(std::move(e)) { }
Ifc4x3_tc1::IfcPointOnCurve::IfcPointOnCurve(::Ifc4x3_tc1::IfcCurve* v1_BasisCurve, double v2_PointParameter) : IfcPoint(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_BasisCurve ? v1_BasisCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_PointParameter));; populate_derived(); }

// Function implementations for IfcPointOnSurface
::Ifc4x3_tc1::IfcSurface* Ifc4x3_tc1::IfcPointOnSurface::BasisSurface() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcSurface>(true); }
void Ifc4x3_tc1::IfcPointOnSurface::setBasisSurface(::Ifc4x3_tc1::IfcSurface* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
double Ifc4x3_tc1::IfcPointOnSurface::PointParameterU() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcPointOnSurface::setPointParameterU(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
double Ifc4x3_tc1::IfcPointOnSurface::PointParameterV() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcPointOnSurface::setPointParameterV(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcPointOnSurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[765]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPointOnSurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[765]); }
Ifc4x3_tc1::IfcPointOnSurface::IfcPointOnSurface(IfcEntityInstanceData&& e) : IfcPoint(std::move(e)) { }
Ifc4x3_tc1::IfcPointOnSurface::IfcPointOnSurface(::Ifc4x3_tc1::IfcSurface* v1_BasisSurface, double v2_PointParameterU, double v3_PointParameterV) : IfcPoint(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_BasisSurface ? v1_BasisSurface->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_PointParameterU));set_attribute_value(2, (v3_PointParameterV));; populate_derived(); }

// Function implementations for IfcPolyLoop
aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr Ifc4x3_tc1::IfcPolyLoop::Polygon() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcCartesianPoint >(); }
void Ifc4x3_tc1::IfcPolyLoop::setPolygon(aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcPolyLoop::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[770]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPolyLoop::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[770]); }
Ifc4x3_tc1::IfcPolyLoop::IfcPolyLoop(IfcEntityInstanceData&& e) : IfcLoop(std::move(e)) { }
Ifc4x3_tc1::IfcPolyLoop::IfcPolyLoop(aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr v1_Polygon) : IfcLoop(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Polygon)->generalize());; populate_derived(); }

// Function implementations for IfcPolygonalBoundedHalfSpace
::Ifc4x3_tc1::IfcAxis2Placement3D* Ifc4x3_tc1::IfcPolygonalBoundedHalfSpace::Position() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcAxis2Placement3D>(true); }
void Ifc4x3_tc1::IfcPolygonalBoundedHalfSpace::setPosition(::Ifc4x3_tc1::IfcAxis2Placement3D* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcBoundedCurve* Ifc4x3_tc1::IfcPolygonalBoundedHalfSpace::PolygonalBoundary() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcBoundedCurve>(true); }
void Ifc4x3_tc1::IfcPolygonalBoundedHalfSpace::setPolygonalBoundary(::Ifc4x3_tc1::IfcBoundedCurve* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcPolygonalBoundedHalfSpace::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[767]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPolygonalBoundedHalfSpace::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[767]); }
Ifc4x3_tc1::IfcPolygonalBoundedHalfSpace::IfcPolygonalBoundedHalfSpace(IfcEntityInstanceData&& e) : IfcHalfSpaceSolid(std::move(e)) { }
Ifc4x3_tc1::IfcPolygonalBoundedHalfSpace::IfcPolygonalBoundedHalfSpace(::Ifc4x3_tc1::IfcSurface* v1_BaseSurface, bool v2_AgreementFlag, ::Ifc4x3_tc1::IfcAxis2Placement3D* v3_Position, ::Ifc4x3_tc1::IfcBoundedCurve* v4_PolygonalBoundary) : IfcHalfSpaceSolid(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_BaseSurface ? v1_BaseSurface->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_AgreementFlag));set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_PolygonalBoundary ? v4_PolygonalBoundary->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPolygonalFaceSet
boost::optional< bool > Ifc4x3_tc1::IfcPolygonalFaceSet::Closed() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } bool v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcPolygonalFaceSet::setClosed(boost::optional< bool > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
aggregate_of< ::Ifc4x3_tc1::IfcIndexedPolygonalFace >::ptr Ifc4x3_tc1::IfcPolygonalFaceSet::Faces() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcIndexedPolygonalFace >(); }
void Ifc4x3_tc1::IfcPolygonalFaceSet::setFaces(aggregate_of< ::Ifc4x3_tc1::IfcIndexedPolygonalFace >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }
boost::optional< std::vector< int > /*[1:?]*/ > Ifc4x3_tc1::IfcPolygonalFaceSet::PnIndex() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::vector< int > /*[1:?]*/ v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcPolygonalFaceSet::setPnIndex(boost::optional< std::vector< int > /*[1:?]*/ > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPolygonalFaceSet::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[768]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPolygonalFaceSet::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[768]); }
Ifc4x3_tc1::IfcPolygonalFaceSet::IfcPolygonalFaceSet(IfcEntityInstanceData&& e) : IfcTessellatedFaceSet(std::move(e)) { }
Ifc4x3_tc1::IfcPolygonalFaceSet::IfcPolygonalFaceSet(::Ifc4x3_tc1::IfcCartesianPointList3D* v1_Coordinates, boost::optional< bool > v2_Closed, aggregate_of< ::Ifc4x3_tc1::IfcIndexedPolygonalFace >::ptr v3_Faces, boost::optional< std::vector< int > /*[1:?]*/ > v4_PnIndex) : IfcTessellatedFaceSet(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_Coordinates ? v1_Coordinates->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_Closed) {set_attribute_value(1, (*v2_Closed)); }set_attribute_value(2, (v3_Faces)->generalize()); if (v4_PnIndex) {set_attribute_value(3, (*v4_PnIndex)); }; populate_derived(); }

// Function implementations for IfcPolyline
aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr Ifc4x3_tc1::IfcPolyline::Points() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcCartesianPoint >(); }
void Ifc4x3_tc1::IfcPolyline::setPoints(aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcPolyline::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[769]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPolyline::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[769]); }
Ifc4x3_tc1::IfcPolyline::IfcPolyline(IfcEntityInstanceData&& e) : IfcBoundedCurve(std::move(e)) { }
Ifc4x3_tc1::IfcPolyline::IfcPolyline(aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr v1_Points) : IfcBoundedCurve(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Points)->generalize());; populate_derived(); }

// Function implementations for IfcPolynomialCurve
::Ifc4x3_tc1::IfcPlacement* Ifc4x3_tc1::IfcPolynomialCurve::Position() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcPlacement>(true); }
void Ifc4x3_tc1::IfcPolynomialCurve::setPosition(::Ifc4x3_tc1::IfcPlacement* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
boost::optional< std::vector< double > /*[2:?]*/ > Ifc4x3_tc1::IfcPolynomialCurve::CoefficientsX() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::vector< double > /*[2:?]*/ v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcPolynomialCurve::setCoefficientsX(boost::optional< std::vector< double > /*[2:?]*/ > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::vector< double > /*[2:?]*/ > Ifc4x3_tc1::IfcPolynomialCurve::CoefficientsY() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::vector< double > /*[2:?]*/ v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcPolynomialCurve::setCoefficientsY(boost::optional< std::vector< double > /*[2:?]*/ > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< std::vector< double > /*[2:?]*/ > Ifc4x3_tc1::IfcPolynomialCurve::CoefficientsZ() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::vector< double > /*[2:?]*/ v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcPolynomialCurve::setCoefficientsZ(boost::optional< std::vector< double > /*[2:?]*/ > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPolynomialCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[771]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPolynomialCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[771]); }
Ifc4x3_tc1::IfcPolynomialCurve::IfcPolynomialCurve(IfcEntityInstanceData&& e) : IfcCurve(std::move(e)) { }
Ifc4x3_tc1::IfcPolynomialCurve::IfcPolynomialCurve(::Ifc4x3_tc1::IfcPlacement* v1_Position, boost::optional< std::vector< double > /*[2:?]*/ > v2_CoefficientsX, boost::optional< std::vector< double > /*[2:?]*/ > v3_CoefficientsY, boost::optional< std::vector< double > /*[2:?]*/ > v4_CoefficientsZ) : IfcCurve(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_CoefficientsX) {set_attribute_value(1, (*v2_CoefficientsX)); } if (v3_CoefficientsY) {set_attribute_value(2, (*v3_CoefficientsY)); } if (v4_CoefficientsZ) {set_attribute_value(3, (*v4_CoefficientsZ)); }; populate_derived(); }

// Function implementations for IfcPort

::Ifc4x3_tc1::IfcRelConnectsPortToElement::list::ptr Ifc4x3_tc1::IfcPort::ContainedIn() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[919], 4)->as<IfcRelConnectsPortToElement>(); }
::Ifc4x3_tc1::IfcRelConnectsPorts::list::ptr Ifc4x3_tc1::IfcPort::ConnectedFrom() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[918], 5)->as<IfcRelConnectsPorts>(); }
::Ifc4x3_tc1::IfcRelConnectsPorts::list::ptr Ifc4x3_tc1::IfcPort::ConnectedTo() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[918], 4)->as<IfcRelConnectsPorts>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcPort::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[772]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPort::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[772]); }
Ifc4x3_tc1::IfcPort::IfcPort(IfcEntityInstanceData&& e) : IfcProduct(std::move(e)) { }
Ifc4x3_tc1::IfcPort::IfcPort(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation) : IfcProduct(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPositioningElement

::Ifc4x3_tc1::IfcRelContainedInSpatialStructure::list::ptr Ifc4x3_tc1::IfcPositioningElement::ContainedInStructure() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[924], 4)->as<IfcRelContainedInSpatialStructure>(); }
::Ifc4x3_tc1::IfcRelPositions::list::ptr Ifc4x3_tc1::IfcPositioningElement::Positions() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[938], 4)->as<IfcRelPositions>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcPositioningElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[773]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPositioningElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[773]); }
Ifc4x3_tc1::IfcPositioningElement::IfcPositioningElement(IfcEntityInstanceData&& e) : IfcProduct(std::move(e)) { }
Ifc4x3_tc1::IfcPositioningElement::IfcPositioningElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation) : IfcProduct(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPostalAddress
boost::optional< std::string > Ifc4x3_tc1::IfcPostalAddress::InternalLocation() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcPostalAddress::setInternalLocation(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_tc1::IfcPostalAddress::AddressLines() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcPostalAddress::setAddressLines(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcPostalAddress::PostalBox() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcPostalAddress::setPostalBox(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcPostalAddress::Town() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcPostalAddress::setTown(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< std::string > Ifc4x3_tc1::IfcPostalAddress::Region() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcPostalAddress::setRegion(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< std::string > Ifc4x3_tc1::IfcPostalAddress::PostalCode() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcPostalAddress::setPostalCode(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< std::string > Ifc4x3_tc1::IfcPostalAddress::Country() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcPostalAddress::setCountry(boost::optional< std::string > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPostalAddress::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[778]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPostalAddress::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[778]); }
Ifc4x3_tc1::IfcPostalAddress::IfcPostalAddress(IfcEntityInstanceData&& e) : IfcAddress(std::move(e)) { }
Ifc4x3_tc1::IfcPostalAddress::IfcPostalAddress(boost::optional< ::Ifc4x3_tc1::IfcAddressTypeEnum::Value > v1_Purpose, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_UserDefinedPurpose, boost::optional< std::string > v4_InternalLocation, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_AddressLines, boost::optional< std::string > v6_PostalBox, boost::optional< std::string > v7_Town, boost::optional< std::string > v8_Region, boost::optional< std::string > v9_PostalCode, boost::optional< std::string > v10_Country) : IfcAddress(IfcEntityInstanceData(storage_t(10))) {  if (v1_Purpose) {set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcAddressTypeEnum::Class(),(size_t)*v1_Purpose))); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); } if (v3_UserDefinedPurpose) {set_attribute_value(2, (*v3_UserDefinedPurpose)); } if (v4_InternalLocation) {set_attribute_value(3, (*v4_InternalLocation)); } if (v5_AddressLines) {set_attribute_value(4, (*v5_AddressLines)); } if (v6_PostalBox) {set_attribute_value(5, (*v6_PostalBox)); } if (v7_Town) {set_attribute_value(6, (*v7_Town)); } if (v8_Region) {set_attribute_value(7, (*v8_Region)); } if (v9_PostalCode) {set_attribute_value(8, (*v9_PostalCode)); } if (v10_Country) {set_attribute_value(9, (*v10_Country)); }; populate_derived(); }

// Function implementations for IfcPreDefinedColour


const IfcParse::entity& Ifc4x3_tc1::IfcPreDefinedColour::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[780]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPreDefinedColour::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[780]); }
Ifc4x3_tc1::IfcPreDefinedColour::IfcPreDefinedColour(IfcEntityInstanceData&& e) : IfcPreDefinedItem(std::move(e)) { }
Ifc4x3_tc1::IfcPreDefinedColour::IfcPreDefinedColour(std::string v1_Name) : IfcPreDefinedItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Name));; populate_derived(); }

// Function implementations for IfcPreDefinedCurveFont


const IfcParse::entity& Ifc4x3_tc1::IfcPreDefinedCurveFont::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[781]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPreDefinedCurveFont::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[781]); }
Ifc4x3_tc1::IfcPreDefinedCurveFont::IfcPreDefinedCurveFont(IfcEntityInstanceData&& e) : IfcPreDefinedItem(std::move(e)) { }
Ifc4x3_tc1::IfcPreDefinedCurveFont::IfcPreDefinedCurveFont(std::string v1_Name) : IfcPreDefinedItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Name));; populate_derived(); }

// Function implementations for IfcPreDefinedItem
std::string Ifc4x3_tc1::IfcPreDefinedItem::Name() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcPreDefinedItem::setName(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcPreDefinedItem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[782]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPreDefinedItem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[782]); }
Ifc4x3_tc1::IfcPreDefinedItem::IfcPreDefinedItem(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcPreDefinedItem::IfcPreDefinedItem(std::string v1_Name) : IfcPresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Name));; populate_derived(); }

// Function implementations for IfcPreDefinedProperties


const IfcParse::entity& Ifc4x3_tc1::IfcPreDefinedProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[783]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPreDefinedProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[783]); }
Ifc4x3_tc1::IfcPreDefinedProperties::IfcPreDefinedProperties(IfcEntityInstanceData&& e) : IfcPropertyAbstraction(std::move(e)) { }
Ifc4x3_tc1::IfcPreDefinedProperties::IfcPreDefinedProperties() : IfcPropertyAbstraction(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcPreDefinedPropertySet


const IfcParse::entity& Ifc4x3_tc1::IfcPreDefinedPropertySet::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[784]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPreDefinedPropertySet::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[784]); }
Ifc4x3_tc1::IfcPreDefinedPropertySet::IfcPreDefinedPropertySet(IfcEntityInstanceData&& e) : IfcPropertySetDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcPreDefinedPropertySet::IfcPreDefinedPropertySet(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcPropertySetDefinition(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }; populate_derived(); }

// Function implementations for IfcPreDefinedTextFont


const IfcParse::entity& Ifc4x3_tc1::IfcPreDefinedTextFont::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[785]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPreDefinedTextFont::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[785]); }
Ifc4x3_tc1::IfcPreDefinedTextFont::IfcPreDefinedTextFont(IfcEntityInstanceData&& e) : IfcPreDefinedItem(std::move(e)) { }
Ifc4x3_tc1::IfcPreDefinedTextFont::IfcPreDefinedTextFont(std::string v1_Name) : IfcPreDefinedItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Name));; populate_derived(); }

// Function implementations for IfcPresentationItem


const IfcParse::entity& Ifc4x3_tc1::IfcPresentationItem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[788]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPresentationItem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[788]); }
Ifc4x3_tc1::IfcPresentationItem::IfcPresentationItem(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcPresentationItem::IfcPresentationItem() : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcPresentationLayerAssignment
std::string Ifc4x3_tc1::IfcPresentationLayerAssignment::Name() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcPresentationLayerAssignment::setName(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcPresentationLayerAssignment::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcPresentationLayerAssignment::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
aggregate_of< ::Ifc4x3_tc1::IfcLayeredItem >::ptr Ifc4x3_tc1::IfcPresentationLayerAssignment::AssignedItems() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcLayeredItem >(); }
void Ifc4x3_tc1::IfcPresentationLayerAssignment::setAssignedItems(aggregate_of< ::Ifc4x3_tc1::IfcLayeredItem >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }
boost::optional< std::string > Ifc4x3_tc1::IfcPresentationLayerAssignment::Identifier() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcPresentationLayerAssignment::setIdentifier(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPresentationLayerAssignment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[789]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPresentationLayerAssignment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[789]); }
Ifc4x3_tc1::IfcPresentationLayerAssignment::IfcPresentationLayerAssignment(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcPresentationLayerAssignment::IfcPresentationLayerAssignment(std::string v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_tc1::IfcLayeredItem >::ptr v3_AssignedItems, boost::optional< std::string > v4_Identifier) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_AssignedItems)->generalize()); if (v4_Identifier) {set_attribute_value(3, (*v4_Identifier)); }; populate_derived(); }

// Function implementations for IfcPresentationLayerWithStyle
boost::logic::tribool Ifc4x3_tc1::IfcPresentationLayerWithStyle::LayerOn() const {  boost::logic::tribool v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcPresentationLayerWithStyle::setLayerOn(boost::logic::tribool v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
boost::logic::tribool Ifc4x3_tc1::IfcPresentationLayerWithStyle::LayerFrozen() const {  boost::logic::tribool v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcPresentationLayerWithStyle::setLayerFrozen(boost::logic::tribool v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
boost::logic::tribool Ifc4x3_tc1::IfcPresentationLayerWithStyle::LayerBlocked() const {  boost::logic::tribool v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcPresentationLayerWithStyle::setLayerBlocked(boost::logic::tribool v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
aggregate_of< ::Ifc4x3_tc1::IfcPresentationStyle >::ptr Ifc4x3_tc1::IfcPresentationLayerWithStyle::LayerStyles() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(7); return es->as< ::Ifc4x3_tc1::IfcPresentationStyle >(); }
void Ifc4x3_tc1::IfcPresentationLayerWithStyle::setLayerStyles(aggregate_of< ::Ifc4x3_tc1::IfcPresentationStyle >::ptr v) { set_attribute_value(7, (v)->generalize());if constexpr (false)unset_attribute_value(7); }


const IfcParse::entity& Ifc4x3_tc1::IfcPresentationLayerWithStyle::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[790]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPresentationLayerWithStyle::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[790]); }
Ifc4x3_tc1::IfcPresentationLayerWithStyle::IfcPresentationLayerWithStyle(IfcEntityInstanceData&& e) : IfcPresentationLayerAssignment(std::move(e)) { }
Ifc4x3_tc1::IfcPresentationLayerWithStyle::IfcPresentationLayerWithStyle(std::string v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_tc1::IfcLayeredItem >::ptr v3_AssignedItems, boost::optional< std::string > v4_Identifier, boost::logic::tribool v5_LayerOn, boost::logic::tribool v6_LayerFrozen, boost::logic::tribool v7_LayerBlocked, aggregate_of< ::Ifc4x3_tc1::IfcPresentationStyle >::ptr v8_LayerStyles) : IfcPresentationLayerAssignment(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_AssignedItems)->generalize()); if (v4_Identifier) {set_attribute_value(3, (*v4_Identifier)); }set_attribute_value(4, (v5_LayerOn));set_attribute_value(5, (v6_LayerFrozen));set_attribute_value(6, (v7_LayerBlocked));set_attribute_value(7, (v8_LayerStyles)->generalize());; populate_derived(); }

// Function implementations for IfcPresentationStyle
boost::optional< std::string > Ifc4x3_tc1::IfcPresentationStyle::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcPresentationStyle::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPresentationStyle::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[791]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPresentationStyle::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[791]); }
Ifc4x3_tc1::IfcPresentationStyle::IfcPresentationStyle(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcPresentationStyle::IfcPresentationStyle(boost::optional< std::string > v1_Name) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(1))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }; populate_derived(); }

// Function implementations for IfcProcedure
boost::optional< ::Ifc4x3_tc1::IfcProcedureTypeEnum::Value > Ifc4x3_tc1::IfcProcedure::PredefinedType() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcProcedureTypeEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcProcedure::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcProcedureTypeEnum::Value > v) { if (v) {set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcProcedureTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(7);} }


const IfcParse::entity& Ifc4x3_tc1::IfcProcedure::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[793]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProcedure::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[793]); }
Ifc4x3_tc1::IfcProcedure::IfcProcedure(IfcEntityInstanceData&& e) : IfcProcess(std::move(e)) { }
Ifc4x3_tc1::IfcProcedure::IfcProcedure(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, boost::optional< ::Ifc4x3_tc1::IfcProcedureTypeEnum::Value > v8_PredefinedType) : IfcProcess(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_LongDescription) {set_attribute_value(6, (*v7_LongDescription)); } if (v8_PredefinedType) {set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcProcedureTypeEnum::Class(),(size_t)*v8_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcProcedureType
::Ifc4x3_tc1::IfcProcedureTypeEnum::Value Ifc4x3_tc1::IfcProcedureType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcProcedureTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcProcedureType::setPredefinedType(::Ifc4x3_tc1::IfcProcedureTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcProcedureTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcProcedureType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[794]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProcedureType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[794]); }
Ifc4x3_tc1::IfcProcedureType::IfcProcedureType(IfcEntityInstanceData&& e) : IfcTypeProcess(std::move(e)) { }
Ifc4x3_tc1::IfcProcedureType::IfcProcedureType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ProcessType, ::Ifc4x3_tc1::IfcProcedureTypeEnum::Value v10_PredefinedType) : IfcTypeProcess(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_Identification) {set_attribute_value(6, (*v7_Identification)); } if (v8_LongDescription) {set_attribute_value(7, (*v8_LongDescription)); } if (v9_ProcessType) {set_attribute_value(8, (*v9_ProcessType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcProcedureTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcProcess
boost::optional< std::string > Ifc4x3_tc1::IfcProcess::Identification() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcProcess::setIdentification(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcProcess::LongDescription() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcProcess::setLongDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }

::Ifc4x3_tc1::IfcRelSequence::list::ptr Ifc4x3_tc1::IfcProcess::IsPredecessorTo() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[941], 4)->as<IfcRelSequence>(); }
::Ifc4x3_tc1::IfcRelSequence::list::ptr Ifc4x3_tc1::IfcProcess::IsSuccessorFrom() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[941], 5)->as<IfcRelSequence>(); }
::Ifc4x3_tc1::IfcRelAssignsToProcess::list::ptr Ifc4x3_tc1::IfcProcess::OperatesOn() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[903], 6)->as<IfcRelAssignsToProcess>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcProcess::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[796]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProcess::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[796]); }
Ifc4x3_tc1::IfcProcess::IfcProcess(IfcEntityInstanceData&& e) : IfcObject(std::move(e)) { }
Ifc4x3_tc1::IfcProcess::IfcProcess(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription) : IfcObject(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_LongDescription) {set_attribute_value(6, (*v7_LongDescription)); }; populate_derived(); }

// Function implementations for IfcProduct
::Ifc4x3_tc1::IfcObjectPlacement* Ifc4x3_tc1::IfcProduct::ObjectPlacement() const { if(data_.get_attribute_value(5).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcObjectPlacement>(true); }
void Ifc4x3_tc1::IfcProduct::setObjectPlacement(::Ifc4x3_tc1::IfcObjectPlacement* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcProductRepresentation* Ifc4x3_tc1::IfcProduct::Representation() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcProductRepresentation>(true); }
void Ifc4x3_tc1::IfcProduct::setRepresentation(::Ifc4x3_tc1::IfcProductRepresentation* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }

::Ifc4x3_tc1::IfcRelAssignsToProduct::list::ptr Ifc4x3_tc1::IfcProduct::ReferencedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[904], 6)->as<IfcRelAssignsToProduct>(); }
::Ifc4x3_tc1::IfcRelPositions::list::ptr Ifc4x3_tc1::IfcProduct::PositionedRelativeTo() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[938], 5)->as<IfcRelPositions>(); }
::Ifc4x3_tc1::IfcRelReferencedInSpatialStructure::list::ptr Ifc4x3_tc1::IfcProduct::ReferencedInStructures() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[940], 4)->as<IfcRelReferencedInSpatialStructure>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcProduct::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[798]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProduct::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[798]); }
Ifc4x3_tc1::IfcProduct::IfcProduct(IfcEntityInstanceData&& e) : IfcObject(std::move(e)) { }
Ifc4x3_tc1::IfcProduct::IfcProduct(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation) : IfcObject(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcProductDefinitionShape

::Ifc4x3_tc1::IfcProduct::list::ptr Ifc4x3_tc1::IfcProductDefinitionShape::ShapeOfProduct() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[798], 6)->as<IfcProduct>(); }
::Ifc4x3_tc1::IfcShapeAspect::list::ptr Ifc4x3_tc1::IfcProductDefinitionShape::HasShapeAspects() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[1003], 4)->as<IfcShapeAspect>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcProductDefinitionShape::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[799]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProductDefinitionShape::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[799]); }
Ifc4x3_tc1::IfcProductDefinitionShape::IfcProductDefinitionShape(IfcEntityInstanceData&& e) : IfcProductRepresentation(std::move(e)) { }
Ifc4x3_tc1::IfcProductDefinitionShape::IfcProductDefinitionShape(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_tc1::IfcRepresentation >::ptr v3_Representations) : IfcProductRepresentation(IfcEntityInstanceData(storage_t(3))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_Representations)->generalize());; populate_derived(); }

// Function implementations for IfcProductRepresentation
boost::optional< std::string > Ifc4x3_tc1::IfcProductRepresentation::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcProductRepresentation::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcProductRepresentation::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcProductRepresentation::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
aggregate_of< ::Ifc4x3_tc1::IfcRepresentation >::ptr Ifc4x3_tc1::IfcProductRepresentation::Representations() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcRepresentation >(); }
void Ifc4x3_tc1::IfcProductRepresentation::setRepresentations(aggregate_of< ::Ifc4x3_tc1::IfcRepresentation >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcProductRepresentation::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[800]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProductRepresentation::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[800]); }
Ifc4x3_tc1::IfcProductRepresentation::IfcProductRepresentation(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcProductRepresentation::IfcProductRepresentation(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_tc1::IfcRepresentation >::ptr v3_Representations) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(3))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_Representations)->generalize());; populate_derived(); }

// Function implementations for IfcProfileDef
::Ifc4x3_tc1::IfcProfileTypeEnum::Value Ifc4x3_tc1::IfcProfileDef::ProfileType() const {  return ::Ifc4x3_tc1::IfcProfileTypeEnum::FromString(data_.get_attribute_value(0)); }
void Ifc4x3_tc1::IfcProfileDef::setProfileType(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v) { set_attribute_value(0, EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcProfileDef::ProfileName() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcProfileDef::setProfileName(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }

::Ifc4x3_tc1::IfcExternalReferenceRelationship::list::ptr Ifc4x3_tc1::IfcProfileDef::HasExternalReference() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[427], 3)->as<IfcExternalReferenceRelationship>(); }
::Ifc4x3_tc1::IfcProfileProperties::list::ptr Ifc4x3_tc1::IfcProfileDef::HasProperties() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[804], 3)->as<IfcProfileProperties>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[803]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[803]); }
Ifc4x3_tc1::IfcProfileDef::IfcProfileDef(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcProfileDef::IfcProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }; populate_derived(); }

// Function implementations for IfcProfileProperties
::Ifc4x3_tc1::IfcProfileDef* Ifc4x3_tc1::IfcProfileProperties::ProfileDefinition() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcProfileDef>(true); }
void Ifc4x3_tc1::IfcProfileProperties::setProfileDefinition(::Ifc4x3_tc1::IfcProfileDef* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcProfileProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[804]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProfileProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[804]); }
Ifc4x3_tc1::IfcProfileProperties::IfcProfileProperties(IfcEntityInstanceData&& e) : IfcExtendedProperties(std::move(e)) { }
Ifc4x3_tc1::IfcProfileProperties::IfcProfileProperties(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_tc1::IfcProperty >::ptr v3_Properties, ::Ifc4x3_tc1::IfcProfileDef* v4_ProfileDefinition) : IfcExtendedProperties(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_Properties)->generalize());set_attribute_value(3, v4_ProfileDefinition ? v4_ProfileDefinition->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcProject


const IfcParse::entity& Ifc4x3_tc1::IfcProject::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[806]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProject::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[806]); }
Ifc4x3_tc1::IfcProject::IfcProject(IfcEntityInstanceData&& e) : IfcContext(std::move(e)) { }
Ifc4x3_tc1::IfcProject::IfcProject(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< std::string > v7_Phase, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationContext >::ptr > v8_RepresentationContexts, ::Ifc4x3_tc1::IfcUnitAssignment* v9_UnitsInContext) : IfcContext(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_LongName) {set_attribute_value(5, (*v6_LongName)); } if (v7_Phase) {set_attribute_value(6, (*v7_Phase)); } if (v8_RepresentationContexts) {set_attribute_value(7, (*v8_RepresentationContexts)->generalize()); }set_attribute_value(8, v9_UnitsInContext ? v9_UnitsInContext->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcProjectLibrary


const IfcParse::entity& Ifc4x3_tc1::IfcProjectLibrary::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[811]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProjectLibrary::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[811]); }
Ifc4x3_tc1::IfcProjectLibrary::IfcProjectLibrary(IfcEntityInstanceData&& e) : IfcContext(std::move(e)) { }
Ifc4x3_tc1::IfcProjectLibrary::IfcProjectLibrary(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< std::string > v7_Phase, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationContext >::ptr > v8_RepresentationContexts, ::Ifc4x3_tc1::IfcUnitAssignment* v9_UnitsInContext) : IfcContext(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_LongName) {set_attribute_value(5, (*v6_LongName)); } if (v7_Phase) {set_attribute_value(6, (*v7_Phase)); } if (v8_RepresentationContexts) {set_attribute_value(7, (*v8_RepresentationContexts)->generalize()); }set_attribute_value(8, v9_UnitsInContext ? v9_UnitsInContext->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcProjectOrder
boost::optional< ::Ifc4x3_tc1::IfcProjectOrderTypeEnum::Value > Ifc4x3_tc1::IfcProjectOrder::PredefinedType() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcProjectOrderTypeEnum::FromString(data_.get_attribute_value(6)); }
void Ifc4x3_tc1::IfcProjectOrder::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcProjectOrderTypeEnum::Value > v) { if (v) {set_attribute_value(6, EnumerationReference(&::Ifc4x3_tc1::IfcProjectOrderTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(6);} }
boost::optional< std::string > Ifc4x3_tc1::IfcProjectOrder::Status() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcProjectOrder::setStatus(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< std::string > Ifc4x3_tc1::IfcProjectOrder::LongDescription() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcProjectOrder::setLongDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcProjectOrder::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[812]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProjectOrder::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[812]); }
Ifc4x3_tc1::IfcProjectOrder::IfcProjectOrder(IfcEntityInstanceData&& e) : IfcControl(std::move(e)) { }
Ifc4x3_tc1::IfcProjectOrder::IfcProjectOrder(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_tc1::IfcProjectOrderTypeEnum::Value > v7_PredefinedType, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_LongDescription) : IfcControl(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_PredefinedType) {set_attribute_value(6, (EnumerationReference(&::Ifc4x3_tc1::IfcProjectOrderTypeEnum::Class(),(size_t)*v7_PredefinedType))); } if (v8_Status) {set_attribute_value(7, (*v8_Status)); } if (v9_LongDescription) {set_attribute_value(8, (*v9_LongDescription)); }; populate_derived(); }

// Function implementations for IfcProjectedCRS
boost::optional< std::string > Ifc4x3_tc1::IfcProjectedCRS::MapProjection() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcProjectedCRS::setMapProjection(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcProjectedCRS::MapZone() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcProjectedCRS::setMapZone(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
::Ifc4x3_tc1::IfcNamedUnit* Ifc4x3_tc1::IfcProjectedCRS::MapUnit() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcNamedUnit>(true); }
void Ifc4x3_tc1::IfcProjectedCRS::setMapUnit(::Ifc4x3_tc1::IfcNamedUnit* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcProjectedCRS::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[807]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProjectedCRS::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[807]); }
Ifc4x3_tc1::IfcProjectedCRS::IfcProjectedCRS(IfcEntityInstanceData&& e) : IfcCoordinateReferenceSystem(std::move(e)) { }
Ifc4x3_tc1::IfcProjectedCRS::IfcProjectedCRS(std::string v1_Name, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_GeodeticDatum, boost::optional< std::string > v4_VerticalDatum, boost::optional< std::string > v5_MapProjection, boost::optional< std::string > v6_MapZone, ::Ifc4x3_tc1::IfcNamedUnit* v7_MapUnit) : IfcCoordinateReferenceSystem(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); } if (v3_GeodeticDatum) {set_attribute_value(2, (*v3_GeodeticDatum)); } if (v4_VerticalDatum) {set_attribute_value(3, (*v4_VerticalDatum)); } if (v5_MapProjection) {set_attribute_value(4, (*v5_MapProjection)); } if (v6_MapZone) {set_attribute_value(5, (*v6_MapZone)); }set_attribute_value(6, v7_MapUnit ? v7_MapUnit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcProjectionElement
boost::optional< ::Ifc4x3_tc1::IfcProjectionElementTypeEnum::Value > Ifc4x3_tc1::IfcProjectionElement::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcProjectionElementTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcProjectionElement::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcProjectionElementTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcProjectionElementTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcProjectionElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[809]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProjectionElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[809]); }
Ifc4x3_tc1::IfcProjectionElement::IfcProjectionElement(IfcEntityInstanceData&& e) : IfcFeatureElementAddition(std::move(e)) { }
Ifc4x3_tc1::IfcProjectionElement::IfcProjectionElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcProjectionElementTypeEnum::Value > v9_PredefinedType) : IfcFeatureElementAddition(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcProjectionElementTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcProperty
std::string Ifc4x3_tc1::IfcProperty::Name() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcProperty::setName(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcProperty::Specification() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcProperty::setSpecification(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }

::Ifc4x3_tc1::IfcPropertySet::list::ptr Ifc4x3_tc1::IfcProperty::PartOfPset() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[823], 4)->as<IfcPropertySet>(); }
::Ifc4x3_tc1::IfcPropertyDependencyRelationship::list::ptr Ifc4x3_tc1::IfcProperty::PropertyForDependance() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[818], 2)->as<IfcPropertyDependencyRelationship>(); }
::Ifc4x3_tc1::IfcPropertyDependencyRelationship::list::ptr Ifc4x3_tc1::IfcProperty::PropertyDependsOn() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[818], 3)->as<IfcPropertyDependencyRelationship>(); }
::Ifc4x3_tc1::IfcComplexProperty::list::ptr Ifc4x3_tc1::IfcProperty::PartOfComplex() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[189], 3)->as<IfcComplexProperty>(); }
::Ifc4x3_tc1::IfcResourceConstraintRelationship::list::ptr Ifc4x3_tc1::IfcProperty::HasConstraints() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[954], 3)->as<IfcResourceConstraintRelationship>(); }
::Ifc4x3_tc1::IfcResourceApprovalRelationship::list::ptr Ifc4x3_tc1::IfcProperty::HasApprovals() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[953], 2)->as<IfcResourceApprovalRelationship>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcProperty::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[814]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProperty::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[814]); }
Ifc4x3_tc1::IfcProperty::IfcProperty(IfcEntityInstanceData&& e) : IfcPropertyAbstraction(std::move(e)) { }
Ifc4x3_tc1::IfcProperty::IfcProperty(std::string v1_Name, boost::optional< std::string > v2_Specification) : IfcPropertyAbstraction(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_Name)); if (v2_Specification) {set_attribute_value(1, (*v2_Specification)); }; populate_derived(); }

// Function implementations for IfcPropertyAbstraction

::Ifc4x3_tc1::IfcExternalReferenceRelationship::list::ptr Ifc4x3_tc1::IfcPropertyAbstraction::HasExternalReferences() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[427], 3)->as<IfcExternalReferenceRelationship>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcPropertyAbstraction::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[815]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertyAbstraction::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[815]); }
Ifc4x3_tc1::IfcPropertyAbstraction::IfcPropertyAbstraction(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcPropertyAbstraction::IfcPropertyAbstraction() : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcPropertyBoundedValue
::Ifc4x3_tc1::IfcValue* Ifc4x3_tc1::IfcPropertyBoundedValue::UpperBoundValue() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcValue>(true); }
void Ifc4x3_tc1::IfcPropertyBoundedValue::setUpperBoundValue(::Ifc4x3_tc1::IfcValue* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcValue* Ifc4x3_tc1::IfcPropertyBoundedValue::LowerBoundValue() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcValue>(true); }
void Ifc4x3_tc1::IfcPropertyBoundedValue::setLowerBoundValue(::Ifc4x3_tc1::IfcValue* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
::Ifc4x3_tc1::IfcUnit* Ifc4x3_tc1::IfcPropertyBoundedValue::Unit() const { if(data_.get_attribute_value(4).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcUnit>(true); }
void Ifc4x3_tc1::IfcPropertyBoundedValue::setUnit(::Ifc4x3_tc1::IfcUnit* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcValue* Ifc4x3_tc1::IfcPropertyBoundedValue::SetPointValue() const { if(data_.get_attribute_value(5).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcValue>(true); }
void Ifc4x3_tc1::IfcPropertyBoundedValue::setSetPointValue(::Ifc4x3_tc1::IfcValue* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcPropertyBoundedValue::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[816]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertyBoundedValue::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[816]); }
Ifc4x3_tc1::IfcPropertyBoundedValue::IfcPropertyBoundedValue(IfcEntityInstanceData&& e) : IfcSimpleProperty(std::move(e)) { }
Ifc4x3_tc1::IfcPropertyBoundedValue::IfcPropertyBoundedValue(std::string v1_Name, boost::optional< std::string > v2_Specification, ::Ifc4x3_tc1::IfcValue* v3_UpperBoundValue, ::Ifc4x3_tc1::IfcValue* v4_LowerBoundValue, ::Ifc4x3_tc1::IfcUnit* v5_Unit, ::Ifc4x3_tc1::IfcValue* v6_SetPointValue) : IfcSimpleProperty(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_Name)); if (v2_Specification) {set_attribute_value(1, (*v2_Specification)); }set_attribute_value(2, v3_UpperBoundValue ? v3_UpperBoundValue->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_LowerBoundValue ? v4_LowerBoundValue->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, v5_Unit ? v5_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_SetPointValue ? v6_SetPointValue->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPropertyDefinition

::Ifc4x3_tc1::IfcRelDeclares::list::ptr Ifc4x3_tc1::IfcPropertyDefinition::HasContext() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[927], 5)->as<IfcRelDeclares>(); }
::Ifc4x3_tc1::IfcRelAssociates::list::ptr Ifc4x3_tc1::IfcPropertyDefinition::HasAssociations() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[906], 4)->as<IfcRelAssociates>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcPropertyDefinition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[817]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertyDefinition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[817]); }
Ifc4x3_tc1::IfcPropertyDefinition::IfcPropertyDefinition(IfcEntityInstanceData&& e) : IfcRoot(std::move(e)) { }
Ifc4x3_tc1::IfcPropertyDefinition::IfcPropertyDefinition(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcRoot(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }; populate_derived(); }

// Function implementations for IfcPropertyDependencyRelationship
::Ifc4x3_tc1::IfcProperty* Ifc4x3_tc1::IfcPropertyDependencyRelationship::DependingProperty() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcProperty>(true); }
void Ifc4x3_tc1::IfcPropertyDependencyRelationship::setDependingProperty(::Ifc4x3_tc1::IfcProperty* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcProperty* Ifc4x3_tc1::IfcPropertyDependencyRelationship::DependantProperty() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcProperty>(true); }
void Ifc4x3_tc1::IfcPropertyDependencyRelationship::setDependantProperty(::Ifc4x3_tc1::IfcProperty* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcPropertyDependencyRelationship::Expression() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcPropertyDependencyRelationship::setExpression(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPropertyDependencyRelationship::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[818]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertyDependencyRelationship::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[818]); }
Ifc4x3_tc1::IfcPropertyDependencyRelationship::IfcPropertyDependencyRelationship(IfcEntityInstanceData&& e) : IfcResourceLevelRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcPropertyDependencyRelationship::IfcPropertyDependencyRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcProperty* v3_DependingProperty, ::Ifc4x3_tc1::IfcProperty* v4_DependantProperty, boost::optional< std::string > v5_Expression) : IfcResourceLevelRelationship(IfcEntityInstanceData(storage_t(5))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_DependingProperty ? v3_DependingProperty->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_DependantProperty ? v4_DependantProperty->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_Expression) {set_attribute_value(4, (*v5_Expression)); }; populate_derived(); }

// Function implementations for IfcPropertyEnumeratedValue
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > Ifc4x3_tc1::IfcPropertyEnumeratedValue::EnumerationValues() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcValue >(); }
void Ifc4x3_tc1::IfcPropertyEnumeratedValue::setEnumerationValues(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > v) { if (v) {set_attribute_value(2, (*v)->generalize());} else {unset_attribute_value(2);} }
::Ifc4x3_tc1::IfcPropertyEnumeration* Ifc4x3_tc1::IfcPropertyEnumeratedValue::EnumerationReference() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcPropertyEnumeration>(true); }
void Ifc4x3_tc1::IfcPropertyEnumeratedValue::setEnumerationReference(::Ifc4x3_tc1::IfcPropertyEnumeration* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcPropertyEnumeratedValue::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[819]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertyEnumeratedValue::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[819]); }
Ifc4x3_tc1::IfcPropertyEnumeratedValue::IfcPropertyEnumeratedValue(IfcEntityInstanceData&& e) : IfcSimpleProperty(std::move(e)) { }
Ifc4x3_tc1::IfcPropertyEnumeratedValue::IfcPropertyEnumeratedValue(std::string v1_Name, boost::optional< std::string > v2_Specification, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > v3_EnumerationValues, ::Ifc4x3_tc1::IfcPropertyEnumeration* v4_EnumerationReference) : IfcSimpleProperty(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_Name)); if (v2_Specification) {set_attribute_value(1, (*v2_Specification)); } if (v3_EnumerationValues) {set_attribute_value(2, (*v3_EnumerationValues)->generalize()); }set_attribute_value(3, v4_EnumerationReference ? v4_EnumerationReference->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPropertyEnumeration
std::string Ifc4x3_tc1::IfcPropertyEnumeration::Name() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcPropertyEnumeration::setName(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr Ifc4x3_tc1::IfcPropertyEnumeration::EnumerationValues() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcValue >(); }
void Ifc4x3_tc1::IfcPropertyEnumeration::setEnumerationValues(aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcUnit* Ifc4x3_tc1::IfcPropertyEnumeration::Unit() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcUnit>(true); }
void Ifc4x3_tc1::IfcPropertyEnumeration::setUnit(::Ifc4x3_tc1::IfcUnit* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcPropertyEnumeration::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[820]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertyEnumeration::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[820]); }
Ifc4x3_tc1::IfcPropertyEnumeration::IfcPropertyEnumeration(IfcEntityInstanceData&& e) : IfcPropertyAbstraction(std::move(e)) { }
Ifc4x3_tc1::IfcPropertyEnumeration::IfcPropertyEnumeration(std::string v1_Name, aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr v2_EnumerationValues, ::Ifc4x3_tc1::IfcUnit* v3_Unit) : IfcPropertyAbstraction(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_Name));set_attribute_value(1, (v2_EnumerationValues)->generalize());set_attribute_value(2, v3_Unit ? v3_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPropertyListValue
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > Ifc4x3_tc1::IfcPropertyListValue::ListValues() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcValue >(); }
void Ifc4x3_tc1::IfcPropertyListValue::setListValues(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > v) { if (v) {set_attribute_value(2, (*v)->generalize());} else {unset_attribute_value(2);} }
::Ifc4x3_tc1::IfcUnit* Ifc4x3_tc1::IfcPropertyListValue::Unit() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcUnit>(true); }
void Ifc4x3_tc1::IfcPropertyListValue::setUnit(::Ifc4x3_tc1::IfcUnit* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcPropertyListValue::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[821]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertyListValue::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[821]); }
Ifc4x3_tc1::IfcPropertyListValue::IfcPropertyListValue(IfcEntityInstanceData&& e) : IfcSimpleProperty(std::move(e)) { }
Ifc4x3_tc1::IfcPropertyListValue::IfcPropertyListValue(std::string v1_Name, boost::optional< std::string > v2_Specification, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > v3_ListValues, ::Ifc4x3_tc1::IfcUnit* v4_Unit) : IfcSimpleProperty(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_Name)); if (v2_Specification) {set_attribute_value(1, (*v2_Specification)); } if (v3_ListValues) {set_attribute_value(2, (*v3_ListValues)->generalize()); }set_attribute_value(3, v4_Unit ? v4_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPropertyReferenceValue
boost::optional< std::string > Ifc4x3_tc1::IfcPropertyReferenceValue::UsageName() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcPropertyReferenceValue::setUsageName(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
::Ifc4x3_tc1::IfcObjectReferenceSelect* Ifc4x3_tc1::IfcPropertyReferenceValue::PropertyReference() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcObjectReferenceSelect>(true); }
void Ifc4x3_tc1::IfcPropertyReferenceValue::setPropertyReference(::Ifc4x3_tc1::IfcObjectReferenceSelect* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcPropertyReferenceValue::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[822]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertyReferenceValue::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[822]); }
Ifc4x3_tc1::IfcPropertyReferenceValue::IfcPropertyReferenceValue(IfcEntityInstanceData&& e) : IfcSimpleProperty(std::move(e)) { }
Ifc4x3_tc1::IfcPropertyReferenceValue::IfcPropertyReferenceValue(std::string v1_Name, boost::optional< std::string > v2_Specification, boost::optional< std::string > v3_UsageName, ::Ifc4x3_tc1::IfcObjectReferenceSelect* v4_PropertyReference) : IfcSimpleProperty(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_Name)); if (v2_Specification) {set_attribute_value(1, (*v2_Specification)); } if (v3_UsageName) {set_attribute_value(2, (*v3_UsageName)); }set_attribute_value(3, v4_PropertyReference ? v4_PropertyReference->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPropertySet
aggregate_of< ::Ifc4x3_tc1::IfcProperty >::ptr Ifc4x3_tc1::IfcPropertySet::HasProperties() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(4); return es->as< ::Ifc4x3_tc1::IfcProperty >(); }
void Ifc4x3_tc1::IfcPropertySet::setHasProperties(aggregate_of< ::Ifc4x3_tc1::IfcProperty >::ptr v) { set_attribute_value(4, (v)->generalize());if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcPropertySet::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[823]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertySet::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[823]); }
Ifc4x3_tc1::IfcPropertySet::IfcPropertySet(IfcEntityInstanceData&& e) : IfcPropertySetDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcPropertySet::IfcPropertySet(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcProperty >::ptr v5_HasProperties) : IfcPropertySetDefinition(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_HasProperties)->generalize());; populate_derived(); }

// Function implementations for IfcPropertySetDefinition

::Ifc4x3_tc1::IfcTypeObject::list::ptr Ifc4x3_tc1::IfcPropertySetDefinition::DefinesType() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[1238], 5)->as<IfcTypeObject>(); }
::Ifc4x3_tc1::IfcRelDefinesByTemplate::list::ptr Ifc4x3_tc1::IfcPropertySetDefinition::IsDefinedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[932], 4)->as<IfcRelDefinesByTemplate>(); }
::Ifc4x3_tc1::IfcRelDefinesByProperties::list::ptr Ifc4x3_tc1::IfcPropertySetDefinition::DefinesOccurrence() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[931], 5)->as<IfcRelDefinesByProperties>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcPropertySetDefinition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[824]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertySetDefinition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[824]); }
Ifc4x3_tc1::IfcPropertySetDefinition::IfcPropertySetDefinition(IfcEntityInstanceData&& e) : IfcPropertyDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcPropertySetDefinition::IfcPropertySetDefinition(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcPropertyDefinition(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }; populate_derived(); }

// Function implementations for IfcPropertySetTemplate
boost::optional< ::Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::Value > Ifc4x3_tc1::IfcPropertySetTemplate::TemplateType() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::FromString(data_.get_attribute_value(4)); }
void Ifc4x3_tc1::IfcPropertySetTemplate::setTemplateType(boost::optional< ::Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::Value > v) { if (v) {set_attribute_value(4, EnumerationReference(&::Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcPropertySetTemplate::ApplicableEntity() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcPropertySetTemplate::setApplicableEntity(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
aggregate_of< ::Ifc4x3_tc1::IfcPropertyTemplate >::ptr Ifc4x3_tc1::IfcPropertySetTemplate::HasPropertyTemplates() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(6); return es->as< ::Ifc4x3_tc1::IfcPropertyTemplate >(); }
void Ifc4x3_tc1::IfcPropertySetTemplate::setHasPropertyTemplates(aggregate_of< ::Ifc4x3_tc1::IfcPropertyTemplate >::ptr v) { set_attribute_value(6, (v)->generalize());if constexpr (false)unset_attribute_value(6); }

::Ifc4x3_tc1::IfcRelDefinesByTemplate::list::ptr Ifc4x3_tc1::IfcPropertySetTemplate::Defines() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[932], 5)->as<IfcRelDefinesByTemplate>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcPropertySetTemplate::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[827]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertySetTemplate::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[827]); }
Ifc4x3_tc1::IfcPropertySetTemplate::IfcPropertySetTemplate(IfcEntityInstanceData&& e) : IfcPropertyTemplateDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcPropertySetTemplate::IfcPropertySetTemplate(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< ::Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::Value > v5_TemplateType, boost::optional< std::string > v6_ApplicableEntity, aggregate_of< ::Ifc4x3_tc1::IfcPropertyTemplate >::ptr v7_HasPropertyTemplates) : IfcPropertyTemplateDefinition(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_TemplateType) {set_attribute_value(4, (EnumerationReference(&::Ifc4x3_tc1::IfcPropertySetTemplateTypeEnum::Class(),(size_t)*v5_TemplateType))); } if (v6_ApplicableEntity) {set_attribute_value(5, (*v6_ApplicableEntity)); }set_attribute_value(6, (v7_HasPropertyTemplates)->generalize());; populate_derived(); }

// Function implementations for IfcPropertySingleValue
::Ifc4x3_tc1::IfcValue* Ifc4x3_tc1::IfcPropertySingleValue::NominalValue() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcValue>(true); }
void Ifc4x3_tc1::IfcPropertySingleValue::setNominalValue(::Ifc4x3_tc1::IfcValue* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcUnit* Ifc4x3_tc1::IfcPropertySingleValue::Unit() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcUnit>(true); }
void Ifc4x3_tc1::IfcPropertySingleValue::setUnit(::Ifc4x3_tc1::IfcUnit* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcPropertySingleValue::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[829]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertySingleValue::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[829]); }
Ifc4x3_tc1::IfcPropertySingleValue::IfcPropertySingleValue(IfcEntityInstanceData&& e) : IfcSimpleProperty(std::move(e)) { }
Ifc4x3_tc1::IfcPropertySingleValue::IfcPropertySingleValue(std::string v1_Name, boost::optional< std::string > v2_Specification, ::Ifc4x3_tc1::IfcValue* v3_NominalValue, ::Ifc4x3_tc1::IfcUnit* v4_Unit) : IfcSimpleProperty(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_Name)); if (v2_Specification) {set_attribute_value(1, (*v2_Specification)); }set_attribute_value(2, v3_NominalValue ? v3_NominalValue->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_Unit ? v4_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcPropertyTableValue
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > Ifc4x3_tc1::IfcPropertyTableValue::DefiningValues() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcValue >(); }
void Ifc4x3_tc1::IfcPropertyTableValue::setDefiningValues(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > v) { if (v) {set_attribute_value(2, (*v)->generalize());} else {unset_attribute_value(2);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > Ifc4x3_tc1::IfcPropertyTableValue::DefinedValues() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(3); return es->as< ::Ifc4x3_tc1::IfcValue >(); }
void Ifc4x3_tc1::IfcPropertyTableValue::setDefinedValues(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > v) { if (v) {set_attribute_value(3, (*v)->generalize());} else {unset_attribute_value(3);} }
boost::optional< std::string > Ifc4x3_tc1::IfcPropertyTableValue::Expression() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcPropertyTableValue::setExpression(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
::Ifc4x3_tc1::IfcUnit* Ifc4x3_tc1::IfcPropertyTableValue::DefiningUnit() const { if(data_.get_attribute_value(5).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcUnit>(true); }
void Ifc4x3_tc1::IfcPropertyTableValue::setDefiningUnit(::Ifc4x3_tc1::IfcUnit* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcUnit* Ifc4x3_tc1::IfcPropertyTableValue::DefinedUnit() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcUnit>(true); }
void Ifc4x3_tc1::IfcPropertyTableValue::setDefinedUnit(::Ifc4x3_tc1::IfcUnit* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
boost::optional< ::Ifc4x3_tc1::IfcCurveInterpolationEnum::Value > Ifc4x3_tc1::IfcPropertyTableValue::CurveInterpolation() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcCurveInterpolationEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcPropertyTableValue::setCurveInterpolation(boost::optional< ::Ifc4x3_tc1::IfcCurveInterpolationEnum::Value > v) { if (v) {set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcCurveInterpolationEnum::Class(), (size_t) *v));} else {unset_attribute_value(7);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPropertyTableValue::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[830]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertyTableValue::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[830]); }
Ifc4x3_tc1::IfcPropertyTableValue::IfcPropertyTableValue(IfcEntityInstanceData&& e) : IfcSimpleProperty(std::move(e)) { }
Ifc4x3_tc1::IfcPropertyTableValue::IfcPropertyTableValue(std::string v1_Name, boost::optional< std::string > v2_Specification, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > v3_DefiningValues, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > v4_DefinedValues, boost::optional< std::string > v5_Expression, ::Ifc4x3_tc1::IfcUnit* v6_DefiningUnit, ::Ifc4x3_tc1::IfcUnit* v7_DefinedUnit, boost::optional< ::Ifc4x3_tc1::IfcCurveInterpolationEnum::Value > v8_CurveInterpolation) : IfcSimpleProperty(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_Name)); if (v2_Specification) {set_attribute_value(1, (*v2_Specification)); } if (v3_DefiningValues) {set_attribute_value(2, (*v3_DefiningValues)->generalize()); } if (v4_DefinedValues) {set_attribute_value(3, (*v4_DefinedValues)->generalize()); } if (v5_Expression) {set_attribute_value(4, (*v5_Expression)); }set_attribute_value(5, v6_DefiningUnit ? v6_DefiningUnit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_DefinedUnit ? v7_DefinedUnit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_CurveInterpolation) {set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcCurveInterpolationEnum::Class(),(size_t)*v8_CurveInterpolation))); }; populate_derived(); }

// Function implementations for IfcPropertyTemplate

::Ifc4x3_tc1::IfcComplexPropertyTemplate::list::ptr Ifc4x3_tc1::IfcPropertyTemplate::PartOfComplexTemplate() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[190], 6)->as<IfcComplexPropertyTemplate>(); }
::Ifc4x3_tc1::IfcPropertySetTemplate::list::ptr Ifc4x3_tc1::IfcPropertyTemplate::PartOfPsetTemplate() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[827], 6)->as<IfcPropertySetTemplate>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcPropertyTemplate::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[831]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertyTemplate::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[831]); }
Ifc4x3_tc1::IfcPropertyTemplate::IfcPropertyTemplate(IfcEntityInstanceData&& e) : IfcPropertyTemplateDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcPropertyTemplate::IfcPropertyTemplate(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcPropertyTemplateDefinition(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }; populate_derived(); }

// Function implementations for IfcPropertyTemplateDefinition


const IfcParse::entity& Ifc4x3_tc1::IfcPropertyTemplateDefinition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[832]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPropertyTemplateDefinition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[832]); }
Ifc4x3_tc1::IfcPropertyTemplateDefinition::IfcPropertyTemplateDefinition(IfcEntityInstanceData&& e) : IfcPropertyDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcPropertyTemplateDefinition::IfcPropertyTemplateDefinition(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcPropertyDefinition(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }; populate_derived(); }

// Function implementations for IfcProtectiveDevice
boost::optional< ::Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Value > Ifc4x3_tc1::IfcProtectiveDevice::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcProtectiveDevice::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcProtectiveDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[833]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProtectiveDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[833]); }
Ifc4x3_tc1::IfcProtectiveDevice::IfcProtectiveDevice(IfcEntityInstanceData&& e) : IfcFlowController(std::move(e)) { }
Ifc4x3_tc1::IfcProtectiveDevice::IfcProtectiveDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Value > v9_PredefinedType) : IfcFlowController(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcProtectiveDeviceTrippingUnit
boost::optional< ::Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Value > Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnit::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnit::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnit::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[834]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnit::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[834]); }
Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnit::IfcProtectiveDeviceTrippingUnit(IfcEntityInstanceData&& e) : IfcDistributionControlElement(std::move(e)) { }
Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnit::IfcProtectiveDeviceTrippingUnit(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcProtectiveDeviceTrippingUnitType
::Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Value Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitType::setPredefinedType(::Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[835]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[835]); }
Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitType::IfcProtectiveDeviceTrippingUnitType(IfcEntityInstanceData&& e) : IfcDistributionControlElementType(std::move(e)) { }
Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitType::IfcProtectiveDeviceTrippingUnitType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcProtectiveDeviceTrippingUnitTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcProtectiveDeviceType
::Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Value Ifc4x3_tc1::IfcProtectiveDeviceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcProtectiveDeviceType::setPredefinedType(::Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcProtectiveDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[837]); }
const IfcParse::entity& Ifc4x3_tc1::IfcProtectiveDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[837]); }
Ifc4x3_tc1::IfcProtectiveDeviceType::IfcProtectiveDeviceType(IfcEntityInstanceData&& e) : IfcFlowControllerType(std::move(e)) { }
Ifc4x3_tc1::IfcProtectiveDeviceType::IfcProtectiveDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcProtectiveDeviceTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcPump
boost::optional< ::Ifc4x3_tc1::IfcPumpTypeEnum::Value > Ifc4x3_tc1::IfcPump::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcPumpTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcPump::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcPumpTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcPumpTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcPump::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[839]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPump::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[839]); }
Ifc4x3_tc1::IfcPump::IfcPump(IfcEntityInstanceData&& e) : IfcFlowMovingDevice(std::move(e)) { }
Ifc4x3_tc1::IfcPump::IfcPump(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcPumpTypeEnum::Value > v9_PredefinedType) : IfcFlowMovingDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcPumpTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcPumpType
::Ifc4x3_tc1::IfcPumpTypeEnum::Value Ifc4x3_tc1::IfcPumpType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcPumpTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcPumpType::setPredefinedType(::Ifc4x3_tc1::IfcPumpTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcPumpTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcPumpType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[840]); }
const IfcParse::entity& Ifc4x3_tc1::IfcPumpType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[840]); }
Ifc4x3_tc1::IfcPumpType::IfcPumpType(IfcEntityInstanceData&& e) : IfcFlowMovingDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcPumpType::IfcPumpType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcPumpTypeEnum::Value v10_PredefinedType) : IfcFlowMovingDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcPumpTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcQuantityArea
double Ifc4x3_tc1::IfcQuantityArea::AreaValue() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcQuantityArea::setAreaValue(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcQuantityArea::Formula() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcQuantityArea::setFormula(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcQuantityArea::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[842]); }
const IfcParse::entity& Ifc4x3_tc1::IfcQuantityArea::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[842]); }
Ifc4x3_tc1::IfcQuantityArea::IfcQuantityArea(IfcEntityInstanceData&& e) : IfcPhysicalSimpleQuantity(std::move(e)) { }
Ifc4x3_tc1::IfcQuantityArea::IfcQuantityArea(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcNamedUnit* v3_Unit, double v4_AreaValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_Unit ? v3_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_AreaValue)); if (v5_Formula) {set_attribute_value(4, (*v5_Formula)); }; populate_derived(); }

// Function implementations for IfcQuantityCount
int Ifc4x3_tc1::IfcQuantityCount::CountValue() const {  int v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcQuantityCount::setCountValue(int v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcQuantityCount::Formula() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcQuantityCount::setFormula(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcQuantityCount::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[843]); }
const IfcParse::entity& Ifc4x3_tc1::IfcQuantityCount::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[843]); }
Ifc4x3_tc1::IfcQuantityCount::IfcQuantityCount(IfcEntityInstanceData&& e) : IfcPhysicalSimpleQuantity(std::move(e)) { }
Ifc4x3_tc1::IfcQuantityCount::IfcQuantityCount(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcNamedUnit* v3_Unit, int v4_CountValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_Unit ? v3_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_CountValue)); if (v5_Formula) {set_attribute_value(4, (*v5_Formula)); }; populate_derived(); }

// Function implementations for IfcQuantityLength
double Ifc4x3_tc1::IfcQuantityLength::LengthValue() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcQuantityLength::setLengthValue(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcQuantityLength::Formula() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcQuantityLength::setFormula(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcQuantityLength::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[844]); }
const IfcParse::entity& Ifc4x3_tc1::IfcQuantityLength::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[844]); }
Ifc4x3_tc1::IfcQuantityLength::IfcQuantityLength(IfcEntityInstanceData&& e) : IfcPhysicalSimpleQuantity(std::move(e)) { }
Ifc4x3_tc1::IfcQuantityLength::IfcQuantityLength(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcNamedUnit* v3_Unit, double v4_LengthValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_Unit ? v3_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_LengthValue)); if (v5_Formula) {set_attribute_value(4, (*v5_Formula)); }; populate_derived(); }

// Function implementations for IfcQuantityNumber
double Ifc4x3_tc1::IfcQuantityNumber::NumberValue() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcQuantityNumber::setNumberValue(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcQuantityNumber::Formula() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcQuantityNumber::setFormula(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcQuantityNumber::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[845]); }
const IfcParse::entity& Ifc4x3_tc1::IfcQuantityNumber::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[845]); }
Ifc4x3_tc1::IfcQuantityNumber::IfcQuantityNumber(IfcEntityInstanceData&& e) : IfcPhysicalSimpleQuantity(std::move(e)) { }
Ifc4x3_tc1::IfcQuantityNumber::IfcQuantityNumber(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcNamedUnit* v3_Unit, double v4_NumberValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_Unit ? v3_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_NumberValue)); if (v5_Formula) {set_attribute_value(4, (*v5_Formula)); }; populate_derived(); }

// Function implementations for IfcQuantitySet


const IfcParse::entity& Ifc4x3_tc1::IfcQuantitySet::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[846]); }
const IfcParse::entity& Ifc4x3_tc1::IfcQuantitySet::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[846]); }
Ifc4x3_tc1::IfcQuantitySet::IfcQuantitySet(IfcEntityInstanceData&& e) : IfcPropertySetDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcQuantitySet::IfcQuantitySet(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcPropertySetDefinition(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }; populate_derived(); }

// Function implementations for IfcQuantityTime
double Ifc4x3_tc1::IfcQuantityTime::TimeValue() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcQuantityTime::setTimeValue(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcQuantityTime::Formula() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcQuantityTime::setFormula(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcQuantityTime::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[847]); }
const IfcParse::entity& Ifc4x3_tc1::IfcQuantityTime::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[847]); }
Ifc4x3_tc1::IfcQuantityTime::IfcQuantityTime(IfcEntityInstanceData&& e) : IfcPhysicalSimpleQuantity(std::move(e)) { }
Ifc4x3_tc1::IfcQuantityTime::IfcQuantityTime(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcNamedUnit* v3_Unit, double v4_TimeValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_Unit ? v3_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_TimeValue)); if (v5_Formula) {set_attribute_value(4, (*v5_Formula)); }; populate_derived(); }

// Function implementations for IfcQuantityVolume
double Ifc4x3_tc1::IfcQuantityVolume::VolumeValue() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcQuantityVolume::setVolumeValue(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcQuantityVolume::Formula() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcQuantityVolume::setFormula(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcQuantityVolume::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[848]); }
const IfcParse::entity& Ifc4x3_tc1::IfcQuantityVolume::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[848]); }
Ifc4x3_tc1::IfcQuantityVolume::IfcQuantityVolume(IfcEntityInstanceData&& e) : IfcPhysicalSimpleQuantity(std::move(e)) { }
Ifc4x3_tc1::IfcQuantityVolume::IfcQuantityVolume(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcNamedUnit* v3_Unit, double v4_VolumeValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_Unit ? v3_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_VolumeValue)); if (v5_Formula) {set_attribute_value(4, (*v5_Formula)); }; populate_derived(); }

// Function implementations for IfcQuantityWeight
double Ifc4x3_tc1::IfcQuantityWeight::WeightValue() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcQuantityWeight::setWeightValue(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcQuantityWeight::Formula() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcQuantityWeight::setFormula(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcQuantityWeight::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[849]); }
const IfcParse::entity& Ifc4x3_tc1::IfcQuantityWeight::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[849]); }
Ifc4x3_tc1::IfcQuantityWeight::IfcQuantityWeight(IfcEntityInstanceData&& e) : IfcPhysicalSimpleQuantity(std::move(e)) { }
Ifc4x3_tc1::IfcQuantityWeight::IfcQuantityWeight(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcNamedUnit* v3_Unit, double v4_WeightValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_Unit ? v3_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_WeightValue)); if (v5_Formula) {set_attribute_value(4, (*v5_Formula)); }; populate_derived(); }

// Function implementations for IfcRail
boost::optional< ::Ifc4x3_tc1::IfcRailTypeEnum::Value > Ifc4x3_tc1::IfcRail::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcRailTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcRail::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcRailTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcRailTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRail::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[851]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRail::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[851]); }
Ifc4x3_tc1::IfcRail::IfcRail(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcRail::IfcRail(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcRailTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcRailTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcRailType
::Ifc4x3_tc1::IfcRailTypeEnum::Value Ifc4x3_tc1::IfcRailType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcRailTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcRailType::setPredefinedType(::Ifc4x3_tc1::IfcRailTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcRailTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcRailType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[855]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRailType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[855]); }
Ifc4x3_tc1::IfcRailType::IfcRailType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcRailType::IfcRailType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcRailTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcRailTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcRailing
boost::optional< ::Ifc4x3_tc1::IfcRailingTypeEnum::Value > Ifc4x3_tc1::IfcRailing::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcRailingTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcRailing::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcRailingTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcRailingTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRailing::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[852]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRailing::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[852]); }
Ifc4x3_tc1::IfcRailing::IfcRailing(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcRailing::IfcRailing(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcRailingTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcRailingTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcRailingType
::Ifc4x3_tc1::IfcRailingTypeEnum::Value Ifc4x3_tc1::IfcRailingType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcRailingTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcRailingType::setPredefinedType(::Ifc4x3_tc1::IfcRailingTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcRailingTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcRailingType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[853]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRailingType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[853]); }
Ifc4x3_tc1::IfcRailingType::IfcRailingType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcRailingType::IfcRailingType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcRailingTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcRailingTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcRailway
boost::optional< ::Ifc4x3_tc1::IfcRailwayTypeEnum::Value > Ifc4x3_tc1::IfcRailway::PredefinedType() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcRailwayTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcRailway::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcRailwayTypeEnum::Value > v) { if (v) {set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcRailwayTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRailway::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[857]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRailway::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[857]); }
Ifc4x3_tc1::IfcRailway::IfcRailway(IfcEntityInstanceData&& e) : IfcFacility(std::move(e)) { }
Ifc4x3_tc1::IfcRailway::IfcRailway(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_tc1::IfcRailwayTypeEnum::Value > v10_PredefinedType) : IfcFacility(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); } if (v10_PredefinedType) {set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcRailwayTypeEnum::Class(),(size_t)*v10_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcRailwayPart
boost::optional< ::Ifc4x3_tc1::IfcRailwayPartTypeEnum::Value > Ifc4x3_tc1::IfcRailwayPart::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcRailwayPartTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcRailwayPart::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcRailwayPartTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcRailwayPartTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRailwayPart::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[858]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRailwayPart::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[858]); }
Ifc4x3_tc1::IfcRailwayPart::IfcRailwayPart(IfcEntityInstanceData&& e) : IfcFacilityPart(std::move(e)) { }
Ifc4x3_tc1::IfcRailwayPart::IfcRailwayPart(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_tc1::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_tc1::IfcRailwayPartTypeEnum::Value > v11_PredefinedType) : IfcFacilityPart(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcFacilityUsageEnum::Class(),(size_t)v10_UsageType))); if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcRailwayPartTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcRamp
boost::optional< ::Ifc4x3_tc1::IfcRampTypeEnum::Value > Ifc4x3_tc1::IfcRamp::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcRampTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcRamp::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcRampTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcRampTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRamp::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[861]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRamp::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[861]); }
Ifc4x3_tc1::IfcRamp::IfcRamp(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcRamp::IfcRamp(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcRampTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcRampTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcRampFlight
boost::optional< ::Ifc4x3_tc1::IfcRampFlightTypeEnum::Value > Ifc4x3_tc1::IfcRampFlight::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcRampFlightTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcRampFlight::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcRampFlightTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcRampFlightTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRampFlight::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[862]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRampFlight::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[862]); }
Ifc4x3_tc1::IfcRampFlight::IfcRampFlight(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcRampFlight::IfcRampFlight(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcRampFlightTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcRampFlightTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcRampFlightType
::Ifc4x3_tc1::IfcRampFlightTypeEnum::Value Ifc4x3_tc1::IfcRampFlightType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcRampFlightTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcRampFlightType::setPredefinedType(::Ifc4x3_tc1::IfcRampFlightTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcRampFlightTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcRampFlightType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[863]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRampFlightType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[863]); }
Ifc4x3_tc1::IfcRampFlightType::IfcRampFlightType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcRampFlightType::IfcRampFlightType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcRampFlightTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcRampFlightTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcRampType
::Ifc4x3_tc1::IfcRampTypeEnum::Value Ifc4x3_tc1::IfcRampType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcRampTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcRampType::setPredefinedType(::Ifc4x3_tc1::IfcRampTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcRampTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcRampType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[865]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRampType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[865]); }
Ifc4x3_tc1::IfcRampType::IfcRampType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcRampType::IfcRampType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcRampTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcRampTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcRationalBSplineCurveWithKnots
std::vector< double > /*[2:?]*/ Ifc4x3_tc1::IfcRationalBSplineCurveWithKnots::WeightsData() const {  std::vector< double > /*[2:?]*/ v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcRationalBSplineCurveWithKnots::setWeightsData(std::vector< double > /*[2:?]*/ v) { set_attribute_value(8, v);if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcRationalBSplineCurveWithKnots::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[868]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRationalBSplineCurveWithKnots::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[868]); }
Ifc4x3_tc1::IfcRationalBSplineCurveWithKnots::IfcRationalBSplineCurveWithKnots(IfcEntityInstanceData&& e) : IfcBSplineCurveWithKnots(std::move(e)) { }
Ifc4x3_tc1::IfcRationalBSplineCurveWithKnots::IfcRationalBSplineCurveWithKnots(int v1_Degree, aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr v2_ControlPointsList, ::Ifc4x3_tc1::IfcBSplineCurveForm::Value v3_CurveForm, boost::logic::tribool v4_ClosedCurve, boost::logic::tribool v5_SelfIntersect, std::vector< int > /*[2:?]*/ v6_KnotMultiplicities, std::vector< double > /*[2:?]*/ v7_Knots, ::Ifc4x3_tc1::IfcKnotType::Value v8_KnotSpec, std::vector< double > /*[2:?]*/ v9_WeightsData) : IfcBSplineCurveWithKnots(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_Degree));set_attribute_value(1, (v2_ControlPointsList)->generalize());set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcBSplineCurveForm::Class(),(size_t)v3_CurveForm)));set_attribute_value(3, (v4_ClosedCurve));set_attribute_value(4, (v5_SelfIntersect));set_attribute_value(5, (v6_KnotMultiplicities));set_attribute_value(6, (v7_Knots));set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcKnotType::Class(),(size_t)v8_KnotSpec)));set_attribute_value(8, (v9_WeightsData));; populate_derived(); }

// Function implementations for IfcRationalBSplineSurfaceWithKnots
std::vector< std::vector< double > > Ifc4x3_tc1::IfcRationalBSplineSurfaceWithKnots::WeightsData() const {  std::vector< std::vector< double > > v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcRationalBSplineSurfaceWithKnots::setWeightsData(std::vector< std::vector< double > > v) { set_attribute_value(12, v);if constexpr (false)unset_attribute_value(12); }


const IfcParse::entity& Ifc4x3_tc1::IfcRationalBSplineSurfaceWithKnots::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[869]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRationalBSplineSurfaceWithKnots::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[869]); }
Ifc4x3_tc1::IfcRationalBSplineSurfaceWithKnots::IfcRationalBSplineSurfaceWithKnots(IfcEntityInstanceData&& e) : IfcBSplineSurfaceWithKnots(std::move(e)) { }
Ifc4x3_tc1::IfcRationalBSplineSurfaceWithKnots::IfcRationalBSplineSurfaceWithKnots(int v1_UDegree, int v2_VDegree, aggregate_of_aggregate_of< ::Ifc4x3_tc1::IfcCartesianPoint >::ptr v3_ControlPointsList, ::Ifc4x3_tc1::IfcBSplineSurfaceForm::Value v4_SurfaceForm, boost::logic::tribool v5_UClosed, boost::logic::tribool v6_VClosed, boost::logic::tribool v7_SelfIntersect, std::vector< int > /*[2:?]*/ v8_UMultiplicities, std::vector< int > /*[2:?]*/ v9_VMultiplicities, std::vector< double > /*[2:?]*/ v10_UKnots, std::vector< double > /*[2:?]*/ v11_VKnots, ::Ifc4x3_tc1::IfcKnotType::Value v12_KnotSpec, std::vector< std::vector< double > > v13_WeightsData) : IfcBSplineSurfaceWithKnots(IfcEntityInstanceData(storage_t(13))) { set_attribute_value(0, (v1_UDegree));set_attribute_value(1, (v2_VDegree));set_attribute_value(2, (v3_ControlPointsList)->generalize());set_attribute_value(3, (EnumerationReference(&::Ifc4x3_tc1::IfcBSplineSurfaceForm::Class(),(size_t)v4_SurfaceForm)));set_attribute_value(4, (v5_UClosed));set_attribute_value(5, (v6_VClosed));set_attribute_value(6, (v7_SelfIntersect));set_attribute_value(7, (v8_UMultiplicities));set_attribute_value(8, (v9_VMultiplicities));set_attribute_value(9, (v10_UKnots));set_attribute_value(10, (v11_VKnots));set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcKnotType::Class(),(size_t)v12_KnotSpec)));set_attribute_value(12, (v13_WeightsData));; populate_derived(); }

// Function implementations for IfcRectangleHollowProfileDef
double Ifc4x3_tc1::IfcRectangleHollowProfileDef::WallThickness() const {  double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcRectangleHollowProfileDef::setWallThickness(double v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
boost::optional< double > Ifc4x3_tc1::IfcRectangleHollowProfileDef::InnerFilletRadius() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcRectangleHollowProfileDef::setInnerFilletRadius(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< double > Ifc4x3_tc1::IfcRectangleHollowProfileDef::OuterFilletRadius() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcRectangleHollowProfileDef::setOuterFilletRadius(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRectangleHollowProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[871]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRectangleHollowProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[871]); }
Ifc4x3_tc1::IfcRectangleHollowProfileDef::IfcRectangleHollowProfileDef(IfcEntityInstanceData&& e) : IfcRectangleProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcRectangleHollowProfileDef::IfcRectangleHollowProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_XDim, double v5_YDim, double v6_WallThickness, boost::optional< double > v7_InnerFilletRadius, boost::optional< double > v8_OuterFilletRadius) : IfcRectangleProfileDef(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_XDim));set_attribute_value(4, (v5_YDim));set_attribute_value(5, (v6_WallThickness)); if (v7_InnerFilletRadius) {set_attribute_value(6, (*v7_InnerFilletRadius)); } if (v8_OuterFilletRadius) {set_attribute_value(7, (*v8_OuterFilletRadius)); }; populate_derived(); }

// Function implementations for IfcRectangleProfileDef
double Ifc4x3_tc1::IfcRectangleProfileDef::XDim() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcRectangleProfileDef::setXDim(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcRectangleProfileDef::YDim() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcRectangleProfileDef::setYDim(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcRectangleProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[872]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRectangleProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[872]); }
Ifc4x3_tc1::IfcRectangleProfileDef::IfcRectangleProfileDef(IfcEntityInstanceData&& e) : IfcParameterizedProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcRectangleProfileDef::IfcRectangleProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_XDim, double v5_YDim) : IfcParameterizedProfileDef(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_XDim));set_attribute_value(4, (v5_YDim));; populate_derived(); }

// Function implementations for IfcRectangularPyramid
double Ifc4x3_tc1::IfcRectangularPyramid::XLength() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcRectangularPyramid::setXLength(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
double Ifc4x3_tc1::IfcRectangularPyramid::YLength() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcRectangularPyramid::setYLength(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
double Ifc4x3_tc1::IfcRectangularPyramid::Height() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcRectangularPyramid::setHeight(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcRectangularPyramid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[873]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRectangularPyramid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[873]); }
Ifc4x3_tc1::IfcRectangularPyramid::IfcRectangularPyramid(IfcEntityInstanceData&& e) : IfcCsgPrimitive3D(std::move(e)) { }
Ifc4x3_tc1::IfcRectangularPyramid::IfcRectangularPyramid(::Ifc4x3_tc1::IfcAxis2Placement3D* v1_Position, double v2_XLength, double v3_YLength, double v4_Height) : IfcCsgPrimitive3D(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_XLength));set_attribute_value(2, (v3_YLength));set_attribute_value(3, (v4_Height));; populate_derived(); }

// Function implementations for IfcRectangularTrimmedSurface
::Ifc4x3_tc1::IfcSurface* Ifc4x3_tc1::IfcRectangularTrimmedSurface::BasisSurface() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcSurface>(true); }
void Ifc4x3_tc1::IfcRectangularTrimmedSurface::setBasisSurface(::Ifc4x3_tc1::IfcSurface* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
double Ifc4x3_tc1::IfcRectangularTrimmedSurface::U1() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcRectangularTrimmedSurface::setU1(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
double Ifc4x3_tc1::IfcRectangularTrimmedSurface::V1() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcRectangularTrimmedSurface::setV1(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
double Ifc4x3_tc1::IfcRectangularTrimmedSurface::U2() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcRectangularTrimmedSurface::setU2(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcRectangularTrimmedSurface::V2() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcRectangularTrimmedSurface::setV2(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
bool Ifc4x3_tc1::IfcRectangularTrimmedSurface::Usense() const {  bool v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcRectangularTrimmedSurface::setUsense(bool v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
bool Ifc4x3_tc1::IfcRectangularTrimmedSurface::Vsense() const {  bool v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcRectangularTrimmedSurface::setVsense(bool v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcRectangularTrimmedSurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[874]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRectangularTrimmedSurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[874]); }
Ifc4x3_tc1::IfcRectangularTrimmedSurface::IfcRectangularTrimmedSurface(IfcEntityInstanceData&& e) : IfcBoundedSurface(std::move(e)) { }
Ifc4x3_tc1::IfcRectangularTrimmedSurface::IfcRectangularTrimmedSurface(::Ifc4x3_tc1::IfcSurface* v1_BasisSurface, double v2_U1, double v3_V1, double v4_U2, double v5_V2, bool v6_Usense, bool v7_Vsense) : IfcBoundedSurface(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, v1_BasisSurface ? v1_BasisSurface->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_U1));set_attribute_value(2, (v3_V1));set_attribute_value(3, (v4_U2));set_attribute_value(4, (v5_V2));set_attribute_value(5, (v6_Usense));set_attribute_value(6, (v7_Vsense));; populate_derived(); }

// Function implementations for IfcRecurrencePattern
::Ifc4x3_tc1::IfcRecurrenceTypeEnum::Value Ifc4x3_tc1::IfcRecurrencePattern::RecurrenceType() const {  return ::Ifc4x3_tc1::IfcRecurrenceTypeEnum::FromString(data_.get_attribute_value(0)); }
void Ifc4x3_tc1::IfcRecurrencePattern::setRecurrenceType(::Ifc4x3_tc1::IfcRecurrenceTypeEnum::Value v) { set_attribute_value(0, EnumerationReference(&::Ifc4x3_tc1::IfcRecurrenceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(0); }
boost::optional< std::vector< int > /*[1:?]*/ > Ifc4x3_tc1::IfcRecurrencePattern::DayComponent() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::vector< int > /*[1:?]*/ v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcRecurrencePattern::setDayComponent(boost::optional< std::vector< int > /*[1:?]*/ > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::vector< int > /*[1:?]*/ > Ifc4x3_tc1::IfcRecurrencePattern::WeekdayComponent() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::vector< int > /*[1:?]*/ v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcRecurrencePattern::setWeekdayComponent(boost::optional< std::vector< int > /*[1:?]*/ > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< std::vector< int > /*[1:?]*/ > Ifc4x3_tc1::IfcRecurrencePattern::MonthComponent() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::vector< int > /*[1:?]*/ v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcRecurrencePattern::setMonthComponent(boost::optional< std::vector< int > /*[1:?]*/ > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< int > Ifc4x3_tc1::IfcRecurrencePattern::Position() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } int v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcRecurrencePattern::setPosition(boost::optional< int > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< int > Ifc4x3_tc1::IfcRecurrencePattern::Interval() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } int v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcRecurrencePattern::setInterval(boost::optional< int > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< int > Ifc4x3_tc1::IfcRecurrencePattern::Occurrences() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } int v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcRecurrencePattern::setOccurrences(boost::optional< int > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcTimePeriod >::ptr > Ifc4x3_tc1::IfcRecurrencePattern::TimePeriods() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(7); return es->as< ::Ifc4x3_tc1::IfcTimePeriod >(); }
void Ifc4x3_tc1::IfcRecurrencePattern::setTimePeriods(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcTimePeriod >::ptr > v) { if (v) {set_attribute_value(7, (*v)->generalize());} else {unset_attribute_value(7);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRecurrencePattern::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[875]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRecurrencePattern::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[875]); }
Ifc4x3_tc1::IfcRecurrencePattern::IfcRecurrencePattern(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcRecurrencePattern::IfcRecurrencePattern(::Ifc4x3_tc1::IfcRecurrenceTypeEnum::Value v1_RecurrenceType, boost::optional< std::vector< int > /*[1:?]*/ > v2_DayComponent, boost::optional< std::vector< int > /*[1:?]*/ > v3_WeekdayComponent, boost::optional< std::vector< int > /*[1:?]*/ > v4_MonthComponent, boost::optional< int > v5_Position, boost::optional< int > v6_Interval, boost::optional< int > v7_Occurrences, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcTimePeriod >::ptr > v8_TimePeriods) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcRecurrenceTypeEnum::Class(),(size_t)v1_RecurrenceType))); if (v2_DayComponent) {set_attribute_value(1, (*v2_DayComponent)); } if (v3_WeekdayComponent) {set_attribute_value(2, (*v3_WeekdayComponent)); } if (v4_MonthComponent) {set_attribute_value(3, (*v4_MonthComponent)); } if (v5_Position) {set_attribute_value(4, (*v5_Position)); } if (v6_Interval) {set_attribute_value(5, (*v6_Interval)); } if (v7_Occurrences) {set_attribute_value(6, (*v7_Occurrences)); } if (v8_TimePeriods) {set_attribute_value(7, (*v8_TimePeriods)->generalize()); }; populate_derived(); }

// Function implementations for IfcReference
boost::optional< std::string > Ifc4x3_tc1::IfcReference::TypeIdentifier() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcReference::setTypeIdentifier(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcReference::AttributeIdentifier() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcReference::setAttributeIdentifier(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcReference::InstanceName() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcReference::setInstanceName(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< std::vector< int > /*[1:?]*/ > Ifc4x3_tc1::IfcReference::ListPositions() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::vector< int > /*[1:?]*/ v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcReference::setListPositions(boost::optional< std::vector< int > /*[1:?]*/ > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
::Ifc4x3_tc1::IfcReference* Ifc4x3_tc1::IfcReference::InnerReference() const { if(data_.get_attribute_value(4).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcReference>(true); }
void Ifc4x3_tc1::IfcReference::setInnerReference(::Ifc4x3_tc1::IfcReference* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcReference::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[877]); }
const IfcParse::entity& Ifc4x3_tc1::IfcReference::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[877]); }
Ifc4x3_tc1::IfcReference::IfcReference(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcReference::IfcReference(boost::optional< std::string > v1_TypeIdentifier, boost::optional< std::string > v2_AttributeIdentifier, boost::optional< std::string > v3_InstanceName, boost::optional< std::vector< int > /*[1:?]*/ > v4_ListPositions, ::Ifc4x3_tc1::IfcReference* v5_InnerReference) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(5))) {  if (v1_TypeIdentifier) {set_attribute_value(0, (*v1_TypeIdentifier)); } if (v2_AttributeIdentifier) {set_attribute_value(1, (*v2_AttributeIdentifier)); } if (v3_InstanceName) {set_attribute_value(2, (*v3_InstanceName)); } if (v4_ListPositions) {set_attribute_value(3, (*v4_ListPositions)); }set_attribute_value(4, v5_InnerReference ? v5_InnerReference->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcReferent
boost::optional< ::Ifc4x3_tc1::IfcReferentTypeEnum::Value > Ifc4x3_tc1::IfcReferent::PredefinedType() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcReferentTypeEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcReferent::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcReferentTypeEnum::Value > v) { if (v) {set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcReferentTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(7);} }


const IfcParse::entity& Ifc4x3_tc1::IfcReferent::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[878]); }
const IfcParse::entity& Ifc4x3_tc1::IfcReferent::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[878]); }
Ifc4x3_tc1::IfcReferent::IfcReferent(IfcEntityInstanceData&& e) : IfcPositioningElement(std::move(e)) { }
Ifc4x3_tc1::IfcReferent::IfcReferent(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< ::Ifc4x3_tc1::IfcReferentTypeEnum::Value > v8_PredefinedType) : IfcPositioningElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_PredefinedType) {set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcReferentTypeEnum::Class(),(size_t)*v8_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcRegularTimeSeries
double Ifc4x3_tc1::IfcRegularTimeSeries::TimeStep() const {  double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcRegularTimeSeries::setTimeStep(double v) { set_attribute_value(8, v);if constexpr (false)unset_attribute_value(8); }
aggregate_of< ::Ifc4x3_tc1::IfcTimeSeriesValue >::ptr Ifc4x3_tc1::IfcRegularTimeSeries::Values() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(9); return es->as< ::Ifc4x3_tc1::IfcTimeSeriesValue >(); }
void Ifc4x3_tc1::IfcRegularTimeSeries::setValues(aggregate_of< ::Ifc4x3_tc1::IfcTimeSeriesValue >::ptr v) { set_attribute_value(9, (v)->generalize());if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcRegularTimeSeries::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[881]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRegularTimeSeries::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[881]); }
Ifc4x3_tc1::IfcRegularTimeSeries::IfcRegularTimeSeries(IfcEntityInstanceData&& e) : IfcTimeSeries(std::move(e)) { }
Ifc4x3_tc1::IfcRegularTimeSeries::IfcRegularTimeSeries(std::string v1_Name, boost::optional< std::string > v2_Description, std::string v3_StartTime, std::string v4_EndTime, ::Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Value v5_TimeSeriesDataType, ::Ifc4x3_tc1::IfcDataOriginEnum::Value v6_DataOrigin, boost::optional< std::string > v7_UserDefinedDataOrigin, ::Ifc4x3_tc1::IfcUnit* v8_Unit, double v9_TimeStep, aggregate_of< ::Ifc4x3_tc1::IfcTimeSeriesValue >::ptr v10_Values) : IfcTimeSeries(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_StartTime));set_attribute_value(3, (v4_EndTime));set_attribute_value(4, (EnumerationReference(&::Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Class(),(size_t)v5_TimeSeriesDataType)));set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcDataOriginEnum::Class(),(size_t)v6_DataOrigin))); if (v7_UserDefinedDataOrigin) {set_attribute_value(6, (*v7_UserDefinedDataOrigin)); }set_attribute_value(7, v8_Unit ? v8_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (v9_TimeStep));set_attribute_value(9, (v10_Values)->generalize());; populate_derived(); }

// Function implementations for IfcReinforcedSoil
boost::optional< ::Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::Value > Ifc4x3_tc1::IfcReinforcedSoil::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcReinforcedSoil::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcReinforcedSoil::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[882]); }
const IfcParse::entity& Ifc4x3_tc1::IfcReinforcedSoil::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[882]); }
Ifc4x3_tc1::IfcReinforcedSoil::IfcReinforcedSoil(IfcEntityInstanceData&& e) : IfcEarthworksElement(std::move(e)) { }
Ifc4x3_tc1::IfcReinforcedSoil::IfcReinforcedSoil(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::Value > v9_PredefinedType) : IfcEarthworksElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcReinforcedSoilTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcReinforcementBarProperties
double Ifc4x3_tc1::IfcReinforcementBarProperties::TotalCrossSectionArea() const {  double v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcReinforcementBarProperties::setTotalCrossSectionArea(double v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
std::string Ifc4x3_tc1::IfcReinforcementBarProperties::SteelGrade() const {  std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcReinforcementBarProperties::setSteelGrade(std::string v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< ::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Value > Ifc4x3_tc1::IfcReinforcementBarProperties::BarSurface() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::FromString(data_.get_attribute_value(2)); }
void Ifc4x3_tc1::IfcReinforcementBarProperties::setBarSurface(boost::optional< ::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Value > v) { if (v) {set_attribute_value(2, EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Class(), (size_t) *v));} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcementBarProperties::EffectiveDepth() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcReinforcementBarProperties::setEffectiveDepth(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcementBarProperties::NominalBarDiameter() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcReinforcementBarProperties::setNominalBarDiameter(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< int > Ifc4x3_tc1::IfcReinforcementBarProperties::BarCount() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } int v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcReinforcementBarProperties::setBarCount(boost::optional< int > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }


const IfcParse::entity& Ifc4x3_tc1::IfcReinforcementBarProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[884]); }
const IfcParse::entity& Ifc4x3_tc1::IfcReinforcementBarProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[884]); }
Ifc4x3_tc1::IfcReinforcementBarProperties::IfcReinforcementBarProperties(IfcEntityInstanceData&& e) : IfcPreDefinedProperties(std::move(e)) { }
Ifc4x3_tc1::IfcReinforcementBarProperties::IfcReinforcementBarProperties(double v1_TotalCrossSectionArea, std::string v2_SteelGrade, boost::optional< ::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Value > v3_BarSurface, boost::optional< double > v4_EffectiveDepth, boost::optional< double > v5_NominalBarDiameter, boost::optional< int > v6_BarCount) : IfcPreDefinedProperties(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_TotalCrossSectionArea));set_attribute_value(1, (v2_SteelGrade)); if (v3_BarSurface) {set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Class(),(size_t)*v3_BarSurface))); } if (v4_EffectiveDepth) {set_attribute_value(3, (*v4_EffectiveDepth)); } if (v5_NominalBarDiameter) {set_attribute_value(4, (*v5_NominalBarDiameter)); } if (v6_BarCount) {set_attribute_value(5, (*v6_BarCount)); }; populate_derived(); }

// Function implementations for IfcReinforcementDefinitionProperties
boost::optional< std::string > Ifc4x3_tc1::IfcReinforcementDefinitionProperties::DefinitionType() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcReinforcementDefinitionProperties::setDefinitionType(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
aggregate_of< ::Ifc4x3_tc1::IfcSectionReinforcementProperties >::ptr Ifc4x3_tc1::IfcReinforcementDefinitionProperties::ReinforcementSectionDefinitions() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(5); return es->as< ::Ifc4x3_tc1::IfcSectionReinforcementProperties >(); }
void Ifc4x3_tc1::IfcReinforcementDefinitionProperties::setReinforcementSectionDefinitions(aggregate_of< ::Ifc4x3_tc1::IfcSectionReinforcementProperties >::ptr v) { set_attribute_value(5, (v)->generalize());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcReinforcementDefinitionProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[885]); }
const IfcParse::entity& Ifc4x3_tc1::IfcReinforcementDefinitionProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[885]); }
Ifc4x3_tc1::IfcReinforcementDefinitionProperties::IfcReinforcementDefinitionProperties(IfcEntityInstanceData&& e) : IfcPreDefinedPropertySet(std::move(e)) { }
Ifc4x3_tc1::IfcReinforcementDefinitionProperties::IfcReinforcementDefinitionProperties(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_DefinitionType, aggregate_of< ::Ifc4x3_tc1::IfcSectionReinforcementProperties >::ptr v6_ReinforcementSectionDefinitions) : IfcPreDefinedPropertySet(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_DefinitionType) {set_attribute_value(4, (*v5_DefinitionType)); }set_attribute_value(5, (v6_ReinforcementSectionDefinitions)->generalize());; populate_derived(); }

// Function implementations for IfcReinforcingBar
boost::optional< double > Ifc4x3_tc1::IfcReinforcingBar::NominalDiameter() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcReinforcingBar::setNominalDiameter(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingBar::CrossSectionArea() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcReinforcingBar::setCrossSectionArea(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingBar::BarLength() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcReinforcingBar::setBarLength(boost::optional< double > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< ::Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Value > Ifc4x3_tc1::IfcReinforcingBar::PredefinedType() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcReinforcingBarTypeEnum::FromString(data_.get_attribute_value(12)); }
void Ifc4x3_tc1::IfcReinforcingBar::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Value > v) { if (v) {set_attribute_value(12, EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(12);} }
boost::optional< ::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Value > Ifc4x3_tc1::IfcReinforcingBar::BarSurface() const { if(data_.get_attribute_value(13).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::FromString(data_.get_attribute_value(13)); }
void Ifc4x3_tc1::IfcReinforcingBar::setBarSurface(boost::optional< ::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Value > v) { if (v) {set_attribute_value(13, EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Class(), (size_t) *v));} else {unset_attribute_value(13);} }


const IfcParse::entity& Ifc4x3_tc1::IfcReinforcingBar::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[886]); }
const IfcParse::entity& Ifc4x3_tc1::IfcReinforcingBar::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[886]); }
Ifc4x3_tc1::IfcReinforcingBar::IfcReinforcingBar(IfcEntityInstanceData&& e) : IfcReinforcingElement(std::move(e)) { }
Ifc4x3_tc1::IfcReinforcingBar::IfcReinforcingBar(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< double > v10_NominalDiameter, boost::optional< double > v11_CrossSectionArea, boost::optional< double > v12_BarLength, boost::optional< ::Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Value > v13_PredefinedType, boost::optional< ::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Value > v14_BarSurface) : IfcReinforcingElement(IfcEntityInstanceData(storage_t(14))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_SteelGrade) {set_attribute_value(8, (*v9_SteelGrade)); } if (v10_NominalDiameter) {set_attribute_value(9, (*v10_NominalDiameter)); } if (v11_CrossSectionArea) {set_attribute_value(10, (*v11_CrossSectionArea)); } if (v12_BarLength) {set_attribute_value(11, (*v12_BarLength)); } if (v13_PredefinedType) {set_attribute_value(12, (EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Class(),(size_t)*v13_PredefinedType))); } if (v14_BarSurface) {set_attribute_value(13, (EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Class(),(size_t)*v14_BarSurface))); }; populate_derived(); }

// Function implementations for IfcReinforcingBarType
::Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Value Ifc4x3_tc1::IfcReinforcingBarType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcReinforcingBarTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcReinforcingBarType::setPredefinedType(::Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingBarType::NominalDiameter() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcReinforcingBarType::setNominalDiameter(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingBarType::CrossSectionArea() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcReinforcingBarType::setCrossSectionArea(boost::optional< double > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingBarType::BarLength() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } double v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcReinforcingBarType::setBarLength(boost::optional< double > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }
boost::optional< ::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Value > Ifc4x3_tc1::IfcReinforcingBarType::BarSurface() const { if(data_.get_attribute_value(13).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::FromString(data_.get_attribute_value(13)); }
void Ifc4x3_tc1::IfcReinforcingBarType::setBarSurface(boost::optional< ::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Value > v) { if (v) {set_attribute_value(13, EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Class(), (size_t) *v));} else {unset_attribute_value(13);} }
boost::optional< std::string > Ifc4x3_tc1::IfcReinforcingBarType::BendingShapeCode() const { if(data_.get_attribute_value(14).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(14); return v; }
void Ifc4x3_tc1::IfcReinforcingBarType::setBendingShapeCode(boost::optional< std::string > v) { if (v) {set_attribute_value(14, *v);} else {unset_attribute_value(14);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcBendingParameterSelect >::ptr > Ifc4x3_tc1::IfcReinforcingBarType::BendingParameters() const { if(data_.get_attribute_value(15).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(15); return es->as< ::Ifc4x3_tc1::IfcBendingParameterSelect >(); }
void Ifc4x3_tc1::IfcReinforcingBarType::setBendingParameters(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcBendingParameterSelect >::ptr > v) { if (v) {set_attribute_value(15, (*v)->generalize());} else {unset_attribute_value(15);} }


const IfcParse::entity& Ifc4x3_tc1::IfcReinforcingBarType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[889]); }
const IfcParse::entity& Ifc4x3_tc1::IfcReinforcingBarType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[889]); }
Ifc4x3_tc1::IfcReinforcingBarType::IfcReinforcingBarType(IfcEntityInstanceData&& e) : IfcReinforcingElementType(std::move(e)) { }
Ifc4x3_tc1::IfcReinforcingBarType::IfcReinforcingBarType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Value v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_CrossSectionArea, boost::optional< double > v13_BarLength, boost::optional< ::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Value > v14_BarSurface, boost::optional< std::string > v15_BendingShapeCode, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcBendingParameterSelect >::ptr > v16_BendingParameters) : IfcReinforcingElementType(IfcEntityInstanceData(storage_t(16))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingBarTypeEnum::Class(),(size_t)v10_PredefinedType))); if (v11_NominalDiameter) {set_attribute_value(10, (*v11_NominalDiameter)); } if (v12_CrossSectionArea) {set_attribute_value(11, (*v12_CrossSectionArea)); } if (v13_BarLength) {set_attribute_value(12, (*v13_BarLength)); } if (v14_BarSurface) {set_attribute_value(13, (EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingBarSurfaceEnum::Class(),(size_t)*v14_BarSurface))); } if (v15_BendingShapeCode) {set_attribute_value(14, (*v15_BendingShapeCode)); } if (v16_BendingParameters) {set_attribute_value(15, (*v16_BendingParameters)->generalize()); }; populate_derived(); }

// Function implementations for IfcReinforcingElement
boost::optional< std::string > Ifc4x3_tc1::IfcReinforcingElement::SteelGrade() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcReinforcingElement::setSteelGrade(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcReinforcingElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[891]); }
const IfcParse::entity& Ifc4x3_tc1::IfcReinforcingElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[891]); }
Ifc4x3_tc1::IfcReinforcingElement::IfcReinforcingElement(IfcEntityInstanceData&& e) : IfcElementComponent(std::move(e)) { }
Ifc4x3_tc1::IfcReinforcingElement::IfcReinforcingElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade) : IfcElementComponent(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_SteelGrade) {set_attribute_value(8, (*v9_SteelGrade)); }; populate_derived(); }

// Function implementations for IfcReinforcingElementType


const IfcParse::entity& Ifc4x3_tc1::IfcReinforcingElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[892]); }
const IfcParse::entity& Ifc4x3_tc1::IfcReinforcingElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[892]); }
Ifc4x3_tc1::IfcReinforcingElementType::IfcReinforcingElementType(IfcEntityInstanceData&& e) : IfcElementComponentType(std::move(e)) { }
Ifc4x3_tc1::IfcReinforcingElementType::IfcReinforcingElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementComponentType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcReinforcingMesh
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMesh::MeshLength() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcReinforcingMesh::setMeshLength(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMesh::MeshWidth() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcReinforcingMesh::setMeshWidth(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMesh::LongitudinalBarNominalDiameter() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcReinforcingMesh::setLongitudinalBarNominalDiameter(boost::optional< double > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMesh::TransverseBarNominalDiameter() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } double v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcReinforcingMesh::setTransverseBarNominalDiameter(boost::optional< double > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMesh::LongitudinalBarCrossSectionArea() const { if(data_.get_attribute_value(13).isNull()) { return boost::none; } double v = data_.get_attribute_value(13); return v; }
void Ifc4x3_tc1::IfcReinforcingMesh::setLongitudinalBarCrossSectionArea(boost::optional< double > v) { if (v) {set_attribute_value(13, *v);} else {unset_attribute_value(13);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMesh::TransverseBarCrossSectionArea() const { if(data_.get_attribute_value(14).isNull()) { return boost::none; } double v = data_.get_attribute_value(14); return v; }
void Ifc4x3_tc1::IfcReinforcingMesh::setTransverseBarCrossSectionArea(boost::optional< double > v) { if (v) {set_attribute_value(14, *v);} else {unset_attribute_value(14);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMesh::LongitudinalBarSpacing() const { if(data_.get_attribute_value(15).isNull()) { return boost::none; } double v = data_.get_attribute_value(15); return v; }
void Ifc4x3_tc1::IfcReinforcingMesh::setLongitudinalBarSpacing(boost::optional< double > v) { if (v) {set_attribute_value(15, *v);} else {unset_attribute_value(15);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMesh::TransverseBarSpacing() const { if(data_.get_attribute_value(16).isNull()) { return boost::none; } double v = data_.get_attribute_value(16); return v; }
void Ifc4x3_tc1::IfcReinforcingMesh::setTransverseBarSpacing(boost::optional< double > v) { if (v) {set_attribute_value(16, *v);} else {unset_attribute_value(16);} }
boost::optional< ::Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Value > Ifc4x3_tc1::IfcReinforcingMesh::PredefinedType() const { if(data_.get_attribute_value(17).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::FromString(data_.get_attribute_value(17)); }
void Ifc4x3_tc1::IfcReinforcingMesh::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Value > v) { if (v) {set_attribute_value(17, EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(17);} }


const IfcParse::entity& Ifc4x3_tc1::IfcReinforcingMesh::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[893]); }
const IfcParse::entity& Ifc4x3_tc1::IfcReinforcingMesh::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[893]); }
Ifc4x3_tc1::IfcReinforcingMesh::IfcReinforcingMesh(IfcEntityInstanceData&& e) : IfcReinforcingElement(std::move(e)) { }
Ifc4x3_tc1::IfcReinforcingMesh::IfcReinforcingMesh(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< double > v10_MeshLength, boost::optional< double > v11_MeshWidth, boost::optional< double > v12_LongitudinalBarNominalDiameter, boost::optional< double > v13_TransverseBarNominalDiameter, boost::optional< double > v14_LongitudinalBarCrossSectionArea, boost::optional< double > v15_TransverseBarCrossSectionArea, boost::optional< double > v16_LongitudinalBarSpacing, boost::optional< double > v17_TransverseBarSpacing, boost::optional< ::Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Value > v18_PredefinedType) : IfcReinforcingElement(IfcEntityInstanceData(storage_t(18))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_SteelGrade) {set_attribute_value(8, (*v9_SteelGrade)); } if (v10_MeshLength) {set_attribute_value(9, (*v10_MeshLength)); } if (v11_MeshWidth) {set_attribute_value(10, (*v11_MeshWidth)); } if (v12_LongitudinalBarNominalDiameter) {set_attribute_value(11, (*v12_LongitudinalBarNominalDiameter)); } if (v13_TransverseBarNominalDiameter) {set_attribute_value(12, (*v13_TransverseBarNominalDiameter)); } if (v14_LongitudinalBarCrossSectionArea) {set_attribute_value(13, (*v14_LongitudinalBarCrossSectionArea)); } if (v15_TransverseBarCrossSectionArea) {set_attribute_value(14, (*v15_TransverseBarCrossSectionArea)); } if (v16_LongitudinalBarSpacing) {set_attribute_value(15, (*v16_LongitudinalBarSpacing)); } if (v17_TransverseBarSpacing) {set_attribute_value(16, (*v17_TransverseBarSpacing)); } if (v18_PredefinedType) {set_attribute_value(17, (EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Class(),(size_t)*v18_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcReinforcingMeshType
::Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Value Ifc4x3_tc1::IfcReinforcingMeshType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcReinforcingMeshType::setPredefinedType(::Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMeshType::MeshLength() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcReinforcingMeshType::setMeshLength(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMeshType::MeshWidth() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcReinforcingMeshType::setMeshWidth(boost::optional< double > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMeshType::LongitudinalBarNominalDiameter() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } double v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcReinforcingMeshType::setLongitudinalBarNominalDiameter(boost::optional< double > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMeshType::TransverseBarNominalDiameter() const { if(data_.get_attribute_value(13).isNull()) { return boost::none; } double v = data_.get_attribute_value(13); return v; }
void Ifc4x3_tc1::IfcReinforcingMeshType::setTransverseBarNominalDiameter(boost::optional< double > v) { if (v) {set_attribute_value(13, *v);} else {unset_attribute_value(13);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMeshType::LongitudinalBarCrossSectionArea() const { if(data_.get_attribute_value(14).isNull()) { return boost::none; } double v = data_.get_attribute_value(14); return v; }
void Ifc4x3_tc1::IfcReinforcingMeshType::setLongitudinalBarCrossSectionArea(boost::optional< double > v) { if (v) {set_attribute_value(14, *v);} else {unset_attribute_value(14);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMeshType::TransverseBarCrossSectionArea() const { if(data_.get_attribute_value(15).isNull()) { return boost::none; } double v = data_.get_attribute_value(15); return v; }
void Ifc4x3_tc1::IfcReinforcingMeshType::setTransverseBarCrossSectionArea(boost::optional< double > v) { if (v) {set_attribute_value(15, *v);} else {unset_attribute_value(15);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMeshType::LongitudinalBarSpacing() const { if(data_.get_attribute_value(16).isNull()) { return boost::none; } double v = data_.get_attribute_value(16); return v; }
void Ifc4x3_tc1::IfcReinforcingMeshType::setLongitudinalBarSpacing(boost::optional< double > v) { if (v) {set_attribute_value(16, *v);} else {unset_attribute_value(16);} }
boost::optional< double > Ifc4x3_tc1::IfcReinforcingMeshType::TransverseBarSpacing() const { if(data_.get_attribute_value(17).isNull()) { return boost::none; } double v = data_.get_attribute_value(17); return v; }
void Ifc4x3_tc1::IfcReinforcingMeshType::setTransverseBarSpacing(boost::optional< double > v) { if (v) {set_attribute_value(17, *v);} else {unset_attribute_value(17);} }
boost::optional< std::string > Ifc4x3_tc1::IfcReinforcingMeshType::BendingShapeCode() const { if(data_.get_attribute_value(18).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(18); return v; }
void Ifc4x3_tc1::IfcReinforcingMeshType::setBendingShapeCode(boost::optional< std::string > v) { if (v) {set_attribute_value(18, *v);} else {unset_attribute_value(18);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcBendingParameterSelect >::ptr > Ifc4x3_tc1::IfcReinforcingMeshType::BendingParameters() const { if(data_.get_attribute_value(19).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(19); return es->as< ::Ifc4x3_tc1::IfcBendingParameterSelect >(); }
void Ifc4x3_tc1::IfcReinforcingMeshType::setBendingParameters(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcBendingParameterSelect >::ptr > v) { if (v) {set_attribute_value(19, (*v)->generalize());} else {unset_attribute_value(19);} }


const IfcParse::entity& Ifc4x3_tc1::IfcReinforcingMeshType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[894]); }
const IfcParse::entity& Ifc4x3_tc1::IfcReinforcingMeshType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[894]); }
Ifc4x3_tc1::IfcReinforcingMeshType::IfcReinforcingMeshType(IfcEntityInstanceData&& e) : IfcReinforcingElementType(std::move(e)) { }
Ifc4x3_tc1::IfcReinforcingMeshType::IfcReinforcingMeshType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Value v10_PredefinedType, boost::optional< double > v11_MeshLength, boost::optional< double > v12_MeshWidth, boost::optional< double > v13_LongitudinalBarNominalDiameter, boost::optional< double > v14_TransverseBarNominalDiameter, boost::optional< double > v15_LongitudinalBarCrossSectionArea, boost::optional< double > v16_TransverseBarCrossSectionArea, boost::optional< double > v17_LongitudinalBarSpacing, boost::optional< double > v18_TransverseBarSpacing, boost::optional< std::string > v19_BendingShapeCode, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcBendingParameterSelect >::ptr > v20_BendingParameters) : IfcReinforcingElementType(IfcEntityInstanceData(storage_t(20))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingMeshTypeEnum::Class(),(size_t)v10_PredefinedType))); if (v11_MeshLength) {set_attribute_value(10, (*v11_MeshLength)); } if (v12_MeshWidth) {set_attribute_value(11, (*v12_MeshWidth)); } if (v13_LongitudinalBarNominalDiameter) {set_attribute_value(12, (*v13_LongitudinalBarNominalDiameter)); } if (v14_TransverseBarNominalDiameter) {set_attribute_value(13, (*v14_TransverseBarNominalDiameter)); } if (v15_LongitudinalBarCrossSectionArea) {set_attribute_value(14, (*v15_LongitudinalBarCrossSectionArea)); } if (v16_TransverseBarCrossSectionArea) {set_attribute_value(15, (*v16_TransverseBarCrossSectionArea)); } if (v17_LongitudinalBarSpacing) {set_attribute_value(16, (*v17_LongitudinalBarSpacing)); } if (v18_TransverseBarSpacing) {set_attribute_value(17, (*v18_TransverseBarSpacing)); } if (v19_BendingShapeCode) {set_attribute_value(18, (*v19_BendingShapeCode)); } if (v20_BendingParameters) {set_attribute_value(19, (*v20_BendingParameters)->generalize()); }; populate_derived(); }

// Function implementations for IfcRelAdheresToElement
::Ifc4x3_tc1::IfcElement* Ifc4x3_tc1::IfcRelAdheresToElement::RelatingElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcElement>(true); }
void Ifc4x3_tc1::IfcRelAdheresToElement::setRelatingElement(::Ifc4x3_tc1::IfcElement* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
aggregate_of< ::Ifc4x3_tc1::IfcSurfaceFeature >::ptr Ifc4x3_tc1::IfcRelAdheresToElement::RelatedSurfaceFeatures() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(5); return es->as< ::Ifc4x3_tc1::IfcSurfaceFeature >(); }
void Ifc4x3_tc1::IfcRelAdheresToElement::setRelatedSurfaceFeatures(aggregate_of< ::Ifc4x3_tc1::IfcSurfaceFeature >::ptr v) { set_attribute_value(5, (v)->generalize());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAdheresToElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[896]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAdheresToElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[896]); }
Ifc4x3_tc1::IfcRelAdheresToElement::IfcRelAdheresToElement(IfcEntityInstanceData&& e) : IfcRelDecomposes(std::move(e)) { }
Ifc4x3_tc1::IfcRelAdheresToElement::IfcRelAdheresToElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcElement* v5_RelatingElement, aggregate_of< ::Ifc4x3_tc1::IfcSurfaceFeature >::ptr v6_RelatedSurfaceFeatures) : IfcRelDecomposes(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingElement ? v5_RelatingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, (v6_RelatedSurfaceFeatures)->generalize());; populate_derived(); }

// Function implementations for IfcRelAggregates
::Ifc4x3_tc1::IfcObjectDefinition* Ifc4x3_tc1::IfcRelAggregates::RelatingObject() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcObjectDefinition>(true); }
void Ifc4x3_tc1::IfcRelAggregates::setRelatingObject(::Ifc4x3_tc1::IfcObjectDefinition* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr Ifc4x3_tc1::IfcRelAggregates::RelatedObjects() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(5); return es->as< ::Ifc4x3_tc1::IfcObjectDefinition >(); }
void Ifc4x3_tc1::IfcRelAggregates::setRelatedObjects(aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v) { set_attribute_value(5, (v)->generalize());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAggregates::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[897]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAggregates::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[897]); }
Ifc4x3_tc1::IfcRelAggregates::IfcRelAggregates(IfcEntityInstanceData&& e) : IfcRelDecomposes(std::move(e)) { }
Ifc4x3_tc1::IfcRelAggregates::IfcRelAggregates(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcObjectDefinition* v5_RelatingObject, aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v6_RelatedObjects) : IfcRelDecomposes(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingObject ? v5_RelatingObject->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, (v6_RelatedObjects)->generalize());; populate_derived(); }

// Function implementations for IfcRelAssigns
aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr Ifc4x3_tc1::IfcRelAssigns::RelatedObjects() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(4); return es->as< ::Ifc4x3_tc1::IfcObjectDefinition >(); }
void Ifc4x3_tc1::IfcRelAssigns::setRelatedObjects(aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v) { set_attribute_value(4, (v)->generalize());if constexpr (false)unset_attribute_value(4); }
boost::optional< bool > Ifc4x3_tc1::IfcRelAssigns::RelatedObjectsType() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } bool v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcRelAssigns::setRelatedObjectsType(boost::optional< bool > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssigns::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[898]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssigns::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[898]); }
Ifc4x3_tc1::IfcRelAssigns::IfcRelAssigns(IfcEntityInstanceData&& e) : IfcRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssigns::IfcRelAssigns(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType) : IfcRelationship(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize()); if (v6_RelatedObjectsType) {set_attribute_value(5, (*v6_RelatedObjectsType)); }; populate_derived(); }

// Function implementations for IfcRelAssignsToActor
::Ifc4x3_tc1::IfcActor* Ifc4x3_tc1::IfcRelAssignsToActor::RelatingActor() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcActor>(true); }
void Ifc4x3_tc1::IfcRelAssignsToActor::setRelatingActor(::Ifc4x3_tc1::IfcActor* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
::Ifc4x3_tc1::IfcActorRole* Ifc4x3_tc1::IfcRelAssignsToActor::ActingRole() const { if(data_.get_attribute_value(7).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(7)))->as<::Ifc4x3_tc1::IfcActorRole>(true); }
void Ifc4x3_tc1::IfcRelAssignsToActor::setActingRole(::Ifc4x3_tc1::IfcActorRole* v) { set_attribute_value(7, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(7); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToActor::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[899]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToActor::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[899]); }
Ifc4x3_tc1::IfcRelAssignsToActor::IfcRelAssignsToActor(IfcEntityInstanceData&& e) : IfcRelAssigns(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssignsToActor::IfcRelAssignsToActor(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_tc1::IfcActor* v7_RelatingActor, ::Ifc4x3_tc1::IfcActorRole* v8_ActingRole) : IfcRelAssigns(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize()); if (v6_RelatedObjectsType) {set_attribute_value(5, (*v6_RelatedObjectsType)); }set_attribute_value(6, v7_RelatingActor ? v7_RelatingActor->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_ActingRole ? v8_ActingRole->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelAssignsToControl
::Ifc4x3_tc1::IfcControl* Ifc4x3_tc1::IfcRelAssignsToControl::RelatingControl() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcControl>(true); }
void Ifc4x3_tc1::IfcRelAssignsToControl::setRelatingControl(::Ifc4x3_tc1::IfcControl* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToControl::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[900]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToControl::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[900]); }
Ifc4x3_tc1::IfcRelAssignsToControl::IfcRelAssignsToControl(IfcEntityInstanceData&& e) : IfcRelAssigns(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssignsToControl::IfcRelAssignsToControl(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_tc1::IfcControl* v7_RelatingControl) : IfcRelAssigns(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize()); if (v6_RelatedObjectsType) {set_attribute_value(5, (*v6_RelatedObjectsType)); }set_attribute_value(6, v7_RelatingControl ? v7_RelatingControl->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelAssignsToGroup
::Ifc4x3_tc1::IfcGroup* Ifc4x3_tc1::IfcRelAssignsToGroup::RelatingGroup() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcGroup>(true); }
void Ifc4x3_tc1::IfcRelAssignsToGroup::setRelatingGroup(::Ifc4x3_tc1::IfcGroup* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToGroup::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[901]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToGroup::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[901]); }
Ifc4x3_tc1::IfcRelAssignsToGroup::IfcRelAssignsToGroup(IfcEntityInstanceData&& e) : IfcRelAssigns(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssignsToGroup::IfcRelAssignsToGroup(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_tc1::IfcGroup* v7_RelatingGroup) : IfcRelAssigns(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize()); if (v6_RelatedObjectsType) {set_attribute_value(5, (*v6_RelatedObjectsType)); }set_attribute_value(6, v7_RelatingGroup ? v7_RelatingGroup->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelAssignsToGroupByFactor
double Ifc4x3_tc1::IfcRelAssignsToGroupByFactor::Factor() const {  double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcRelAssignsToGroupByFactor::setFactor(double v) { set_attribute_value(7, v);if constexpr (false)unset_attribute_value(7); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToGroupByFactor::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[902]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToGroupByFactor::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[902]); }
Ifc4x3_tc1::IfcRelAssignsToGroupByFactor::IfcRelAssignsToGroupByFactor(IfcEntityInstanceData&& e) : IfcRelAssignsToGroup(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssignsToGroupByFactor::IfcRelAssignsToGroupByFactor(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_tc1::IfcGroup* v7_RelatingGroup, double v8_Factor) : IfcRelAssignsToGroup(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize()); if (v6_RelatedObjectsType) {set_attribute_value(5, (*v6_RelatedObjectsType)); }set_attribute_value(6, v7_RelatingGroup ? v7_RelatingGroup->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (v8_Factor));; populate_derived(); }

// Function implementations for IfcRelAssignsToProcess
::Ifc4x3_tc1::IfcProcessSelect* Ifc4x3_tc1::IfcRelAssignsToProcess::RelatingProcess() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcProcessSelect>(true); }
void Ifc4x3_tc1::IfcRelAssignsToProcess::setRelatingProcess(::Ifc4x3_tc1::IfcProcessSelect* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
::Ifc4x3_tc1::IfcMeasureWithUnit* Ifc4x3_tc1::IfcRelAssignsToProcess::QuantityInProcess() const { if(data_.get_attribute_value(7).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(7)))->as<::Ifc4x3_tc1::IfcMeasureWithUnit>(true); }
void Ifc4x3_tc1::IfcRelAssignsToProcess::setQuantityInProcess(::Ifc4x3_tc1::IfcMeasureWithUnit* v) { set_attribute_value(7, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(7); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToProcess::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[903]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToProcess::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[903]); }
Ifc4x3_tc1::IfcRelAssignsToProcess::IfcRelAssignsToProcess(IfcEntityInstanceData&& e) : IfcRelAssigns(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssignsToProcess::IfcRelAssignsToProcess(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_tc1::IfcProcessSelect* v7_RelatingProcess, ::Ifc4x3_tc1::IfcMeasureWithUnit* v8_QuantityInProcess) : IfcRelAssigns(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize()); if (v6_RelatedObjectsType) {set_attribute_value(5, (*v6_RelatedObjectsType)); }set_attribute_value(6, v7_RelatingProcess ? v7_RelatingProcess->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_QuantityInProcess ? v8_QuantityInProcess->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelAssignsToProduct
::Ifc4x3_tc1::IfcProductSelect* Ifc4x3_tc1::IfcRelAssignsToProduct::RelatingProduct() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcProductSelect>(true); }
void Ifc4x3_tc1::IfcRelAssignsToProduct::setRelatingProduct(::Ifc4x3_tc1::IfcProductSelect* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToProduct::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[904]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToProduct::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[904]); }
Ifc4x3_tc1::IfcRelAssignsToProduct::IfcRelAssignsToProduct(IfcEntityInstanceData&& e) : IfcRelAssigns(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssignsToProduct::IfcRelAssignsToProduct(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_tc1::IfcProductSelect* v7_RelatingProduct) : IfcRelAssigns(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize()); if (v6_RelatedObjectsType) {set_attribute_value(5, (*v6_RelatedObjectsType)); }set_attribute_value(6, v7_RelatingProduct ? v7_RelatingProduct->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelAssignsToResource
::Ifc4x3_tc1::IfcResourceSelect* Ifc4x3_tc1::IfcRelAssignsToResource::RelatingResource() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcResourceSelect>(true); }
void Ifc4x3_tc1::IfcRelAssignsToResource::setRelatingResource(::Ifc4x3_tc1::IfcResourceSelect* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToResource::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[905]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssignsToResource::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[905]); }
Ifc4x3_tc1::IfcRelAssignsToResource::IfcRelAssignsToResource(IfcEntityInstanceData&& e) : IfcRelAssigns(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssignsToResource::IfcRelAssignsToResource(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_tc1::IfcResourceSelect* v7_RelatingResource) : IfcRelAssigns(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize()); if (v6_RelatedObjectsType) {set_attribute_value(5, (*v6_RelatedObjectsType)); }set_attribute_value(6, v7_RelatingResource ? v7_RelatingResource->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelAssociates
aggregate_of< ::Ifc4x3_tc1::IfcDefinitionSelect >::ptr Ifc4x3_tc1::IfcRelAssociates::RelatedObjects() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(4); return es->as< ::Ifc4x3_tc1::IfcDefinitionSelect >(); }
void Ifc4x3_tc1::IfcRelAssociates::setRelatedObjects(aggregate_of< ::Ifc4x3_tc1::IfcDefinitionSelect >::ptr v) { set_attribute_value(4, (v)->generalize());if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociates::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[906]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociates::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[906]); }
Ifc4x3_tc1::IfcRelAssociates::IfcRelAssociates(IfcEntityInstanceData&& e) : IfcRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssociates::IfcRelAssociates(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcDefinitionSelect >::ptr v5_RelatedObjects) : IfcRelationship(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize());; populate_derived(); }

// Function implementations for IfcRelAssociatesApproval
::Ifc4x3_tc1::IfcApproval* Ifc4x3_tc1::IfcRelAssociatesApproval::RelatingApproval() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcApproval>(true); }
void Ifc4x3_tc1::IfcRelAssociatesApproval::setRelatingApproval(::Ifc4x3_tc1::IfcApproval* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesApproval::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[907]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesApproval::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[907]); }
Ifc4x3_tc1::IfcRelAssociatesApproval::IfcRelAssociatesApproval(IfcEntityInstanceData&& e) : IfcRelAssociates(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssociatesApproval::IfcRelAssociatesApproval(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_tc1::IfcApproval* v6_RelatingApproval) : IfcRelAssociates(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize());set_attribute_value(5, v6_RelatingApproval ? v6_RelatingApproval->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelAssociatesClassification
::Ifc4x3_tc1::IfcClassificationSelect* Ifc4x3_tc1::IfcRelAssociatesClassification::RelatingClassification() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcClassificationSelect>(true); }
void Ifc4x3_tc1::IfcRelAssociatesClassification::setRelatingClassification(::Ifc4x3_tc1::IfcClassificationSelect* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesClassification::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[908]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesClassification::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[908]); }
Ifc4x3_tc1::IfcRelAssociatesClassification::IfcRelAssociatesClassification(IfcEntityInstanceData&& e) : IfcRelAssociates(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssociatesClassification::IfcRelAssociatesClassification(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_tc1::IfcClassificationSelect* v6_RelatingClassification) : IfcRelAssociates(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize());set_attribute_value(5, v6_RelatingClassification ? v6_RelatingClassification->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelAssociatesConstraint
boost::optional< std::string > Ifc4x3_tc1::IfcRelAssociatesConstraint::Intent() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcRelAssociatesConstraint::setIntent(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
::Ifc4x3_tc1::IfcConstraint* Ifc4x3_tc1::IfcRelAssociatesConstraint::RelatingConstraint() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcConstraint>(true); }
void Ifc4x3_tc1::IfcRelAssociatesConstraint::setRelatingConstraint(::Ifc4x3_tc1::IfcConstraint* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesConstraint::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[909]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesConstraint::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[909]); }
Ifc4x3_tc1::IfcRelAssociatesConstraint::IfcRelAssociatesConstraint(IfcEntityInstanceData&& e) : IfcRelAssociates(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssociatesConstraint::IfcRelAssociatesConstraint(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcDefinitionSelect >::ptr v5_RelatedObjects, boost::optional< std::string > v6_Intent, ::Ifc4x3_tc1::IfcConstraint* v7_RelatingConstraint) : IfcRelAssociates(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize()); if (v6_Intent) {set_attribute_value(5, (*v6_Intent)); }set_attribute_value(6, v7_RelatingConstraint ? v7_RelatingConstraint->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelAssociatesDocument
::Ifc4x3_tc1::IfcDocumentSelect* Ifc4x3_tc1::IfcRelAssociatesDocument::RelatingDocument() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcDocumentSelect>(true); }
void Ifc4x3_tc1::IfcRelAssociatesDocument::setRelatingDocument(::Ifc4x3_tc1::IfcDocumentSelect* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesDocument::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[910]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesDocument::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[910]); }
Ifc4x3_tc1::IfcRelAssociatesDocument::IfcRelAssociatesDocument(IfcEntityInstanceData&& e) : IfcRelAssociates(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssociatesDocument::IfcRelAssociatesDocument(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_tc1::IfcDocumentSelect* v6_RelatingDocument) : IfcRelAssociates(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize());set_attribute_value(5, v6_RelatingDocument ? v6_RelatingDocument->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelAssociatesLibrary
::Ifc4x3_tc1::IfcLibrarySelect* Ifc4x3_tc1::IfcRelAssociatesLibrary::RelatingLibrary() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcLibrarySelect>(true); }
void Ifc4x3_tc1::IfcRelAssociatesLibrary::setRelatingLibrary(::Ifc4x3_tc1::IfcLibrarySelect* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesLibrary::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[911]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesLibrary::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[911]); }
Ifc4x3_tc1::IfcRelAssociatesLibrary::IfcRelAssociatesLibrary(IfcEntityInstanceData&& e) : IfcRelAssociates(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssociatesLibrary::IfcRelAssociatesLibrary(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_tc1::IfcLibrarySelect* v6_RelatingLibrary) : IfcRelAssociates(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize());set_attribute_value(5, v6_RelatingLibrary ? v6_RelatingLibrary->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelAssociatesMaterial
::Ifc4x3_tc1::IfcMaterialSelect* Ifc4x3_tc1::IfcRelAssociatesMaterial::RelatingMaterial() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcMaterialSelect>(true); }
void Ifc4x3_tc1::IfcRelAssociatesMaterial::setRelatingMaterial(::Ifc4x3_tc1::IfcMaterialSelect* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesMaterial::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[912]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesMaterial::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[912]); }
Ifc4x3_tc1::IfcRelAssociatesMaterial::IfcRelAssociatesMaterial(IfcEntityInstanceData&& e) : IfcRelAssociates(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssociatesMaterial::IfcRelAssociatesMaterial(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_tc1::IfcMaterialSelect* v6_RelatingMaterial) : IfcRelAssociates(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize());set_attribute_value(5, v6_RelatingMaterial ? v6_RelatingMaterial->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelAssociatesProfileDef
::Ifc4x3_tc1::IfcProfileDef* Ifc4x3_tc1::IfcRelAssociatesProfileDef::RelatingProfileDef() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcProfileDef>(true); }
void Ifc4x3_tc1::IfcRelAssociatesProfileDef::setRelatingProfileDef(::Ifc4x3_tc1::IfcProfileDef* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[913]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelAssociatesProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[913]); }
Ifc4x3_tc1::IfcRelAssociatesProfileDef::IfcRelAssociatesProfileDef(IfcEntityInstanceData&& e) : IfcRelAssociates(std::move(e)) { }
Ifc4x3_tc1::IfcRelAssociatesProfileDef::IfcRelAssociatesProfileDef(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_tc1::IfcProfileDef* v6_RelatingProfileDef) : IfcRelAssociates(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize());set_attribute_value(5, v6_RelatingProfileDef ? v6_RelatingProfileDef->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelConnects


const IfcParse::entity& Ifc4x3_tc1::IfcRelConnects::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[915]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelConnects::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[915]); }
Ifc4x3_tc1::IfcRelConnects::IfcRelConnects(IfcEntityInstanceData&& e) : IfcRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcRelConnects::IfcRelConnects(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcRelationship(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }; populate_derived(); }

// Function implementations for IfcRelConnectsElements
::Ifc4x3_tc1::IfcConnectionGeometry* Ifc4x3_tc1::IfcRelConnectsElements::ConnectionGeometry() const { if(data_.get_attribute_value(4).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcConnectionGeometry>(true); }
void Ifc4x3_tc1::IfcRelConnectsElements::setConnectionGeometry(::Ifc4x3_tc1::IfcConnectionGeometry* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcElement* Ifc4x3_tc1::IfcRelConnectsElements::RelatingElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcElement>(true); }
void Ifc4x3_tc1::IfcRelConnectsElements::setRelatingElement(::Ifc4x3_tc1::IfcElement* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcElement* Ifc4x3_tc1::IfcRelConnectsElements::RelatedElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcElement>(true); }
void Ifc4x3_tc1::IfcRelConnectsElements::setRelatedElement(::Ifc4x3_tc1::IfcElement* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsElements::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[916]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsElements::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[916]); }
Ifc4x3_tc1::IfcRelConnectsElements::IfcRelConnectsElements(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelConnectsElements::IfcRelConnectsElements(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcConnectionGeometry* v5_ConnectionGeometry, ::Ifc4x3_tc1::IfcElement* v6_RelatingElement, ::Ifc4x3_tc1::IfcElement* v7_RelatedElement) : IfcRelConnects(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_ConnectionGeometry ? v5_ConnectionGeometry->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatingElement ? v6_RelatingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_RelatedElement ? v7_RelatedElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelConnectsPathElements
std::vector< int > /*[0:?]*/ Ifc4x3_tc1::IfcRelConnectsPathElements::RelatingPriorities() const {  std::vector< int > /*[0:?]*/ v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcRelConnectsPathElements::setRelatingPriorities(std::vector< int > /*[0:?]*/ v) { set_attribute_value(7, v);if constexpr (false)unset_attribute_value(7); }
std::vector< int > /*[0:?]*/ Ifc4x3_tc1::IfcRelConnectsPathElements::RelatedPriorities() const {  std::vector< int > /*[0:?]*/ v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcRelConnectsPathElements::setRelatedPriorities(std::vector< int > /*[0:?]*/ v) { set_attribute_value(8, v);if constexpr (false)unset_attribute_value(8); }
::Ifc4x3_tc1::IfcConnectionTypeEnum::Value Ifc4x3_tc1::IfcRelConnectsPathElements::RelatedConnectionType() const {  return ::Ifc4x3_tc1::IfcConnectionTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcRelConnectsPathElements::setRelatedConnectionType(::Ifc4x3_tc1::IfcConnectionTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcConnectionTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }
::Ifc4x3_tc1::IfcConnectionTypeEnum::Value Ifc4x3_tc1::IfcRelConnectsPathElements::RelatingConnectionType() const {  return ::Ifc4x3_tc1::IfcConnectionTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcRelConnectsPathElements::setRelatingConnectionType(::Ifc4x3_tc1::IfcConnectionTypeEnum::Value v) { set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcConnectionTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(10); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsPathElements::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[917]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsPathElements::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[917]); }
Ifc4x3_tc1::IfcRelConnectsPathElements::IfcRelConnectsPathElements(IfcEntityInstanceData&& e) : IfcRelConnectsElements(std::move(e)) { }
Ifc4x3_tc1::IfcRelConnectsPathElements::IfcRelConnectsPathElements(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcConnectionGeometry* v5_ConnectionGeometry, ::Ifc4x3_tc1::IfcElement* v6_RelatingElement, ::Ifc4x3_tc1::IfcElement* v7_RelatedElement, std::vector< int > /*[0:?]*/ v8_RelatingPriorities, std::vector< int > /*[0:?]*/ v9_RelatedPriorities, ::Ifc4x3_tc1::IfcConnectionTypeEnum::Value v10_RelatedConnectionType, ::Ifc4x3_tc1::IfcConnectionTypeEnum::Value v11_RelatingConnectionType) : IfcRelConnectsElements(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_ConnectionGeometry ? v5_ConnectionGeometry->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatingElement ? v6_RelatingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_RelatedElement ? v7_RelatedElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (v8_RelatingPriorities));set_attribute_value(8, (v9_RelatedPriorities));set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcConnectionTypeEnum::Class(),(size_t)v10_RelatedConnectionType)));set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcConnectionTypeEnum::Class(),(size_t)v11_RelatingConnectionType)));; populate_derived(); }

// Function implementations for IfcRelConnectsPortToElement
::Ifc4x3_tc1::IfcPort* Ifc4x3_tc1::IfcRelConnectsPortToElement::RelatingPort() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcPort>(true); }
void Ifc4x3_tc1::IfcRelConnectsPortToElement::setRelatingPort(::Ifc4x3_tc1::IfcPort* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcDistributionElement* Ifc4x3_tc1::IfcRelConnectsPortToElement::RelatedElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcDistributionElement>(true); }
void Ifc4x3_tc1::IfcRelConnectsPortToElement::setRelatedElement(::Ifc4x3_tc1::IfcDistributionElement* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsPortToElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[919]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsPortToElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[919]); }
Ifc4x3_tc1::IfcRelConnectsPortToElement::IfcRelConnectsPortToElement(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelConnectsPortToElement::IfcRelConnectsPortToElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcPort* v5_RelatingPort, ::Ifc4x3_tc1::IfcDistributionElement* v6_RelatedElement) : IfcRelConnects(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingPort ? v5_RelatingPort->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatedElement ? v6_RelatedElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelConnectsPorts
::Ifc4x3_tc1::IfcPort* Ifc4x3_tc1::IfcRelConnectsPorts::RelatingPort() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcPort>(true); }
void Ifc4x3_tc1::IfcRelConnectsPorts::setRelatingPort(::Ifc4x3_tc1::IfcPort* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcPort* Ifc4x3_tc1::IfcRelConnectsPorts::RelatedPort() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcPort>(true); }
void Ifc4x3_tc1::IfcRelConnectsPorts::setRelatedPort(::Ifc4x3_tc1::IfcPort* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcElement* Ifc4x3_tc1::IfcRelConnectsPorts::RealizingElement() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcElement>(true); }
void Ifc4x3_tc1::IfcRelConnectsPorts::setRealizingElement(::Ifc4x3_tc1::IfcElement* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsPorts::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[918]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsPorts::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[918]); }
Ifc4x3_tc1::IfcRelConnectsPorts::IfcRelConnectsPorts(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelConnectsPorts::IfcRelConnectsPorts(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcPort* v5_RelatingPort, ::Ifc4x3_tc1::IfcPort* v6_RelatedPort, ::Ifc4x3_tc1::IfcElement* v7_RealizingElement) : IfcRelConnects(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingPort ? v5_RelatingPort->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatedPort ? v6_RelatedPort->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_RealizingElement ? v7_RealizingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelConnectsStructuralActivity
::Ifc4x3_tc1::IfcStructuralActivityAssignmentSelect* Ifc4x3_tc1::IfcRelConnectsStructuralActivity::RelatingElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcStructuralActivityAssignmentSelect>(true); }
void Ifc4x3_tc1::IfcRelConnectsStructuralActivity::setRelatingElement(::Ifc4x3_tc1::IfcStructuralActivityAssignmentSelect* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcStructuralActivity* Ifc4x3_tc1::IfcRelConnectsStructuralActivity::RelatedStructuralActivity() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcStructuralActivity>(true); }
void Ifc4x3_tc1::IfcRelConnectsStructuralActivity::setRelatedStructuralActivity(::Ifc4x3_tc1::IfcStructuralActivity* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsStructuralActivity::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[920]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsStructuralActivity::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[920]); }
Ifc4x3_tc1::IfcRelConnectsStructuralActivity::IfcRelConnectsStructuralActivity(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelConnectsStructuralActivity::IfcRelConnectsStructuralActivity(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcStructuralActivityAssignmentSelect* v5_RelatingElement, ::Ifc4x3_tc1::IfcStructuralActivity* v6_RelatedStructuralActivity) : IfcRelConnects(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingElement ? v5_RelatingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatedStructuralActivity ? v6_RelatedStructuralActivity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelConnectsStructuralMember
::Ifc4x3_tc1::IfcStructuralMember* Ifc4x3_tc1::IfcRelConnectsStructuralMember::RelatingStructuralMember() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcStructuralMember>(true); }
void Ifc4x3_tc1::IfcRelConnectsStructuralMember::setRelatingStructuralMember(::Ifc4x3_tc1::IfcStructuralMember* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcStructuralConnection* Ifc4x3_tc1::IfcRelConnectsStructuralMember::RelatedStructuralConnection() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcStructuralConnection>(true); }
void Ifc4x3_tc1::IfcRelConnectsStructuralMember::setRelatedStructuralConnection(::Ifc4x3_tc1::IfcStructuralConnection* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcBoundaryCondition* Ifc4x3_tc1::IfcRelConnectsStructuralMember::AppliedCondition() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcBoundaryCondition>(true); }
void Ifc4x3_tc1::IfcRelConnectsStructuralMember::setAppliedCondition(::Ifc4x3_tc1::IfcBoundaryCondition* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
::Ifc4x3_tc1::IfcStructuralConnectionCondition* Ifc4x3_tc1::IfcRelConnectsStructuralMember::AdditionalConditions() const { if(data_.get_attribute_value(7).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(7)))->as<::Ifc4x3_tc1::IfcStructuralConnectionCondition>(true); }
void Ifc4x3_tc1::IfcRelConnectsStructuralMember::setAdditionalConditions(::Ifc4x3_tc1::IfcStructuralConnectionCondition* v) { set_attribute_value(7, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(7); }
boost::optional< double > Ifc4x3_tc1::IfcRelConnectsStructuralMember::SupportedLength() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcRelConnectsStructuralMember::setSupportedLength(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
::Ifc4x3_tc1::IfcAxis2Placement3D* Ifc4x3_tc1::IfcRelConnectsStructuralMember::ConditionCoordinateSystem() const { if(data_.get_attribute_value(9).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(9)))->as<::Ifc4x3_tc1::IfcAxis2Placement3D>(true); }
void Ifc4x3_tc1::IfcRelConnectsStructuralMember::setConditionCoordinateSystem(::Ifc4x3_tc1::IfcAxis2Placement3D* v) { set_attribute_value(9, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsStructuralMember::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[921]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsStructuralMember::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[921]); }
Ifc4x3_tc1::IfcRelConnectsStructuralMember::IfcRelConnectsStructuralMember(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelConnectsStructuralMember::IfcRelConnectsStructuralMember(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcStructuralMember* v5_RelatingStructuralMember, ::Ifc4x3_tc1::IfcStructuralConnection* v6_RelatedStructuralConnection, ::Ifc4x3_tc1::IfcBoundaryCondition* v7_AppliedCondition, ::Ifc4x3_tc1::IfcStructuralConnectionCondition* v8_AdditionalConditions, boost::optional< double > v9_SupportedLength, ::Ifc4x3_tc1::IfcAxis2Placement3D* v10_ConditionCoordinateSystem) : IfcRelConnects(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingStructuralMember ? v5_RelatingStructuralMember->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatedStructuralConnection ? v6_RelatedStructuralConnection->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_AppliedCondition ? v7_AppliedCondition->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AdditionalConditions ? v8_AdditionalConditions->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v9_SupportedLength) {set_attribute_value(8, (*v9_SupportedLength)); }set_attribute_value(9, v10_ConditionCoordinateSystem ? v10_ConditionCoordinateSystem->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelConnectsWithEccentricity
::Ifc4x3_tc1::IfcConnectionGeometry* Ifc4x3_tc1::IfcRelConnectsWithEccentricity::ConnectionConstraint() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(10)))->as<::Ifc4x3_tc1::IfcConnectionGeometry>(true); }
void Ifc4x3_tc1::IfcRelConnectsWithEccentricity::setConnectionConstraint(::Ifc4x3_tc1::IfcConnectionGeometry* v) { set_attribute_value(10, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(10); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsWithEccentricity::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[922]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsWithEccentricity::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[922]); }
Ifc4x3_tc1::IfcRelConnectsWithEccentricity::IfcRelConnectsWithEccentricity(IfcEntityInstanceData&& e) : IfcRelConnectsStructuralMember(std::move(e)) { }
Ifc4x3_tc1::IfcRelConnectsWithEccentricity::IfcRelConnectsWithEccentricity(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcStructuralMember* v5_RelatingStructuralMember, ::Ifc4x3_tc1::IfcStructuralConnection* v6_RelatedStructuralConnection, ::Ifc4x3_tc1::IfcBoundaryCondition* v7_AppliedCondition, ::Ifc4x3_tc1::IfcStructuralConnectionCondition* v8_AdditionalConditions, boost::optional< double > v9_SupportedLength, ::Ifc4x3_tc1::IfcAxis2Placement3D* v10_ConditionCoordinateSystem, ::Ifc4x3_tc1::IfcConnectionGeometry* v11_ConnectionConstraint) : IfcRelConnectsStructuralMember(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingStructuralMember ? v5_RelatingStructuralMember->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatedStructuralConnection ? v6_RelatedStructuralConnection->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_AppliedCondition ? v7_AppliedCondition->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AdditionalConditions ? v8_AdditionalConditions->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v9_SupportedLength) {set_attribute_value(8, (*v9_SupportedLength)); }set_attribute_value(9, v10_ConditionCoordinateSystem ? v10_ConditionCoordinateSystem->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(10, v11_ConnectionConstraint ? v11_ConnectionConstraint->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelConnectsWithRealizingElements
aggregate_of< ::Ifc4x3_tc1::IfcElement >::ptr Ifc4x3_tc1::IfcRelConnectsWithRealizingElements::RealizingElements() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(7); return es->as< ::Ifc4x3_tc1::IfcElement >(); }
void Ifc4x3_tc1::IfcRelConnectsWithRealizingElements::setRealizingElements(aggregate_of< ::Ifc4x3_tc1::IfcElement >::ptr v) { set_attribute_value(7, (v)->generalize());if constexpr (false)unset_attribute_value(7); }
boost::optional< std::string > Ifc4x3_tc1::IfcRelConnectsWithRealizingElements::ConnectionType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcRelConnectsWithRealizingElements::setConnectionType(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsWithRealizingElements::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[923]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelConnectsWithRealizingElements::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[923]); }
Ifc4x3_tc1::IfcRelConnectsWithRealizingElements::IfcRelConnectsWithRealizingElements(IfcEntityInstanceData&& e) : IfcRelConnectsElements(std::move(e)) { }
Ifc4x3_tc1::IfcRelConnectsWithRealizingElements::IfcRelConnectsWithRealizingElements(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcConnectionGeometry* v5_ConnectionGeometry, ::Ifc4x3_tc1::IfcElement* v6_RelatingElement, ::Ifc4x3_tc1::IfcElement* v7_RelatedElement, aggregate_of< ::Ifc4x3_tc1::IfcElement >::ptr v8_RealizingElements, boost::optional< std::string > v9_ConnectionType) : IfcRelConnectsElements(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_ConnectionGeometry ? v5_ConnectionGeometry->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatingElement ? v6_RelatingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_RelatedElement ? v7_RelatedElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (v8_RealizingElements)->generalize()); if (v9_ConnectionType) {set_attribute_value(8, (*v9_ConnectionType)); }; populate_derived(); }

// Function implementations for IfcRelContainedInSpatialStructure
aggregate_of< ::Ifc4x3_tc1::IfcProduct >::ptr Ifc4x3_tc1::IfcRelContainedInSpatialStructure::RelatedElements() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(4); return es->as< ::Ifc4x3_tc1::IfcProduct >(); }
void Ifc4x3_tc1::IfcRelContainedInSpatialStructure::setRelatedElements(aggregate_of< ::Ifc4x3_tc1::IfcProduct >::ptr v) { set_attribute_value(4, (v)->generalize());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcSpatialElement* Ifc4x3_tc1::IfcRelContainedInSpatialStructure::RelatingStructure() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcSpatialElement>(true); }
void Ifc4x3_tc1::IfcRelContainedInSpatialStructure::setRelatingStructure(::Ifc4x3_tc1::IfcSpatialElement* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelContainedInSpatialStructure::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[924]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelContainedInSpatialStructure::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[924]); }
Ifc4x3_tc1::IfcRelContainedInSpatialStructure::IfcRelContainedInSpatialStructure(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelContainedInSpatialStructure::IfcRelContainedInSpatialStructure(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcProduct >::ptr v5_RelatedElements, ::Ifc4x3_tc1::IfcSpatialElement* v6_RelatingStructure) : IfcRelConnects(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedElements)->generalize());set_attribute_value(5, v6_RelatingStructure ? v6_RelatingStructure->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelCoversBldgElements
::Ifc4x3_tc1::IfcElement* Ifc4x3_tc1::IfcRelCoversBldgElements::RelatingBuildingElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcElement>(true); }
void Ifc4x3_tc1::IfcRelCoversBldgElements::setRelatingBuildingElement(::Ifc4x3_tc1::IfcElement* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
aggregate_of< ::Ifc4x3_tc1::IfcCovering >::ptr Ifc4x3_tc1::IfcRelCoversBldgElements::RelatedCoverings() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(5); return es->as< ::Ifc4x3_tc1::IfcCovering >(); }
void Ifc4x3_tc1::IfcRelCoversBldgElements::setRelatedCoverings(aggregate_of< ::Ifc4x3_tc1::IfcCovering >::ptr v) { set_attribute_value(5, (v)->generalize());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelCoversBldgElements::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[925]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelCoversBldgElements::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[925]); }
Ifc4x3_tc1::IfcRelCoversBldgElements::IfcRelCoversBldgElements(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelCoversBldgElements::IfcRelCoversBldgElements(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcElement* v5_RelatingBuildingElement, aggregate_of< ::Ifc4x3_tc1::IfcCovering >::ptr v6_RelatedCoverings) : IfcRelConnects(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingBuildingElement ? v5_RelatingBuildingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, (v6_RelatedCoverings)->generalize());; populate_derived(); }

// Function implementations for IfcRelCoversSpaces
::Ifc4x3_tc1::IfcSpace* Ifc4x3_tc1::IfcRelCoversSpaces::RelatingSpace() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcSpace>(true); }
void Ifc4x3_tc1::IfcRelCoversSpaces::setRelatingSpace(::Ifc4x3_tc1::IfcSpace* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
aggregate_of< ::Ifc4x3_tc1::IfcCovering >::ptr Ifc4x3_tc1::IfcRelCoversSpaces::RelatedCoverings() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(5); return es->as< ::Ifc4x3_tc1::IfcCovering >(); }
void Ifc4x3_tc1::IfcRelCoversSpaces::setRelatedCoverings(aggregate_of< ::Ifc4x3_tc1::IfcCovering >::ptr v) { set_attribute_value(5, (v)->generalize());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelCoversSpaces::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[926]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelCoversSpaces::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[926]); }
Ifc4x3_tc1::IfcRelCoversSpaces::IfcRelCoversSpaces(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelCoversSpaces::IfcRelCoversSpaces(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcSpace* v5_RelatingSpace, aggregate_of< ::Ifc4x3_tc1::IfcCovering >::ptr v6_RelatedCoverings) : IfcRelConnects(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingSpace ? v5_RelatingSpace->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, (v6_RelatedCoverings)->generalize());; populate_derived(); }

// Function implementations for IfcRelDeclares
::Ifc4x3_tc1::IfcContext* Ifc4x3_tc1::IfcRelDeclares::RelatingContext() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcContext>(true); }
void Ifc4x3_tc1::IfcRelDeclares::setRelatingContext(::Ifc4x3_tc1::IfcContext* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
aggregate_of< ::Ifc4x3_tc1::IfcDefinitionSelect >::ptr Ifc4x3_tc1::IfcRelDeclares::RelatedDefinitions() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(5); return es->as< ::Ifc4x3_tc1::IfcDefinitionSelect >(); }
void Ifc4x3_tc1::IfcRelDeclares::setRelatedDefinitions(aggregate_of< ::Ifc4x3_tc1::IfcDefinitionSelect >::ptr v) { set_attribute_value(5, (v)->generalize());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelDeclares::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[927]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelDeclares::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[927]); }
Ifc4x3_tc1::IfcRelDeclares::IfcRelDeclares(IfcEntityInstanceData&& e) : IfcRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcRelDeclares::IfcRelDeclares(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcContext* v5_RelatingContext, aggregate_of< ::Ifc4x3_tc1::IfcDefinitionSelect >::ptr v6_RelatedDefinitions) : IfcRelationship(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingContext ? v5_RelatingContext->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, (v6_RelatedDefinitions)->generalize());; populate_derived(); }

// Function implementations for IfcRelDecomposes


const IfcParse::entity& Ifc4x3_tc1::IfcRelDecomposes::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[928]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelDecomposes::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[928]); }
Ifc4x3_tc1::IfcRelDecomposes::IfcRelDecomposes(IfcEntityInstanceData&& e) : IfcRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcRelDecomposes::IfcRelDecomposes(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcRelationship(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }; populate_derived(); }

// Function implementations for IfcRelDefines


const IfcParse::entity& Ifc4x3_tc1::IfcRelDefines::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[929]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelDefines::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[929]); }
Ifc4x3_tc1::IfcRelDefines::IfcRelDefines(IfcEntityInstanceData&& e) : IfcRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcRelDefines::IfcRelDefines(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcRelationship(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }; populate_derived(); }

// Function implementations for IfcRelDefinesByObject
aggregate_of< ::Ifc4x3_tc1::IfcObject >::ptr Ifc4x3_tc1::IfcRelDefinesByObject::RelatedObjects() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(4); return es->as< ::Ifc4x3_tc1::IfcObject >(); }
void Ifc4x3_tc1::IfcRelDefinesByObject::setRelatedObjects(aggregate_of< ::Ifc4x3_tc1::IfcObject >::ptr v) { set_attribute_value(4, (v)->generalize());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcObject* Ifc4x3_tc1::IfcRelDefinesByObject::RelatingObject() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcObject>(true); }
void Ifc4x3_tc1::IfcRelDefinesByObject::setRelatingObject(::Ifc4x3_tc1::IfcObject* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelDefinesByObject::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[930]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelDefinesByObject::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[930]); }
Ifc4x3_tc1::IfcRelDefinesByObject::IfcRelDefinesByObject(IfcEntityInstanceData&& e) : IfcRelDefines(std::move(e)) { }
Ifc4x3_tc1::IfcRelDefinesByObject::IfcRelDefinesByObject(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcObject >::ptr v5_RelatedObjects, ::Ifc4x3_tc1::IfcObject* v6_RelatingObject) : IfcRelDefines(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize());set_attribute_value(5, v6_RelatingObject ? v6_RelatingObject->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelDefinesByProperties
aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr Ifc4x3_tc1::IfcRelDefinesByProperties::RelatedObjects() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(4); return es->as< ::Ifc4x3_tc1::IfcObjectDefinition >(); }
void Ifc4x3_tc1::IfcRelDefinesByProperties::setRelatedObjects(aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v) { set_attribute_value(4, (v)->generalize());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcPropertySetDefinitionSelect* Ifc4x3_tc1::IfcRelDefinesByProperties::RelatingPropertyDefinition() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcPropertySetDefinitionSelect>(true); }
void Ifc4x3_tc1::IfcRelDefinesByProperties::setRelatingPropertyDefinition(::Ifc4x3_tc1::IfcPropertySetDefinitionSelect* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelDefinesByProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[931]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelDefinesByProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[931]); }
Ifc4x3_tc1::IfcRelDefinesByProperties::IfcRelDefinesByProperties(IfcEntityInstanceData&& e) : IfcRelDefines(std::move(e)) { }
Ifc4x3_tc1::IfcRelDefinesByProperties::IfcRelDefinesByProperties(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v5_RelatedObjects, ::Ifc4x3_tc1::IfcPropertySetDefinitionSelect* v6_RelatingPropertyDefinition) : IfcRelDefines(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize());set_attribute_value(5, v6_RelatingPropertyDefinition ? v6_RelatingPropertyDefinition->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelDefinesByTemplate
aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr Ifc4x3_tc1::IfcRelDefinesByTemplate::RelatedPropertySets() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(4); return es->as< ::Ifc4x3_tc1::IfcPropertySetDefinition >(); }
void Ifc4x3_tc1::IfcRelDefinesByTemplate::setRelatedPropertySets(aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr v) { set_attribute_value(4, (v)->generalize());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcPropertySetTemplate* Ifc4x3_tc1::IfcRelDefinesByTemplate::RelatingTemplate() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcPropertySetTemplate>(true); }
void Ifc4x3_tc1::IfcRelDefinesByTemplate::setRelatingTemplate(::Ifc4x3_tc1::IfcPropertySetTemplate* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelDefinesByTemplate::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[932]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelDefinesByTemplate::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[932]); }
Ifc4x3_tc1::IfcRelDefinesByTemplate::IfcRelDefinesByTemplate(IfcEntityInstanceData&& e) : IfcRelDefines(std::move(e)) { }
Ifc4x3_tc1::IfcRelDefinesByTemplate::IfcRelDefinesByTemplate(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr v5_RelatedPropertySets, ::Ifc4x3_tc1::IfcPropertySetTemplate* v6_RelatingTemplate) : IfcRelDefines(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedPropertySets)->generalize());set_attribute_value(5, v6_RelatingTemplate ? v6_RelatingTemplate->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelDefinesByType
aggregate_of< ::Ifc4x3_tc1::IfcObject >::ptr Ifc4x3_tc1::IfcRelDefinesByType::RelatedObjects() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(4); return es->as< ::Ifc4x3_tc1::IfcObject >(); }
void Ifc4x3_tc1::IfcRelDefinesByType::setRelatedObjects(aggregate_of< ::Ifc4x3_tc1::IfcObject >::ptr v) { set_attribute_value(4, (v)->generalize());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcTypeObject* Ifc4x3_tc1::IfcRelDefinesByType::RelatingType() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcTypeObject>(true); }
void Ifc4x3_tc1::IfcRelDefinesByType::setRelatingType(::Ifc4x3_tc1::IfcTypeObject* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelDefinesByType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[933]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelDefinesByType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[933]); }
Ifc4x3_tc1::IfcRelDefinesByType::IfcRelDefinesByType(IfcEntityInstanceData&& e) : IfcRelDefines(std::move(e)) { }
Ifc4x3_tc1::IfcRelDefinesByType::IfcRelDefinesByType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcObject >::ptr v5_RelatedObjects, ::Ifc4x3_tc1::IfcTypeObject* v6_RelatingType) : IfcRelDefines(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedObjects)->generalize());set_attribute_value(5, v6_RelatingType ? v6_RelatingType->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelFillsElement
::Ifc4x3_tc1::IfcOpeningElement* Ifc4x3_tc1::IfcRelFillsElement::RelatingOpeningElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcOpeningElement>(true); }
void Ifc4x3_tc1::IfcRelFillsElement::setRelatingOpeningElement(::Ifc4x3_tc1::IfcOpeningElement* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcElement* Ifc4x3_tc1::IfcRelFillsElement::RelatedBuildingElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcElement>(true); }
void Ifc4x3_tc1::IfcRelFillsElement::setRelatedBuildingElement(::Ifc4x3_tc1::IfcElement* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelFillsElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[934]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelFillsElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[934]); }
Ifc4x3_tc1::IfcRelFillsElement::IfcRelFillsElement(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelFillsElement::IfcRelFillsElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcOpeningElement* v5_RelatingOpeningElement, ::Ifc4x3_tc1::IfcElement* v6_RelatedBuildingElement) : IfcRelConnects(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingOpeningElement ? v5_RelatingOpeningElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatedBuildingElement ? v6_RelatedBuildingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelFlowControlElements
aggregate_of< ::Ifc4x3_tc1::IfcDistributionControlElement >::ptr Ifc4x3_tc1::IfcRelFlowControlElements::RelatedControlElements() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(4); return es->as< ::Ifc4x3_tc1::IfcDistributionControlElement >(); }
void Ifc4x3_tc1::IfcRelFlowControlElements::setRelatedControlElements(aggregate_of< ::Ifc4x3_tc1::IfcDistributionControlElement >::ptr v) { set_attribute_value(4, (v)->generalize());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcDistributionFlowElement* Ifc4x3_tc1::IfcRelFlowControlElements::RelatingFlowElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcDistributionFlowElement>(true); }
void Ifc4x3_tc1::IfcRelFlowControlElements::setRelatingFlowElement(::Ifc4x3_tc1::IfcDistributionFlowElement* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelFlowControlElements::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[935]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelFlowControlElements::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[935]); }
Ifc4x3_tc1::IfcRelFlowControlElements::IfcRelFlowControlElements(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelFlowControlElements::IfcRelFlowControlElements(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcDistributionControlElement >::ptr v5_RelatedControlElements, ::Ifc4x3_tc1::IfcDistributionFlowElement* v6_RelatingFlowElement) : IfcRelConnects(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedControlElements)->generalize());set_attribute_value(5, v6_RelatingFlowElement ? v6_RelatingFlowElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelInterferesElements
::Ifc4x3_tc1::IfcInterferenceSelect* Ifc4x3_tc1::IfcRelInterferesElements::RelatingElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcInterferenceSelect>(true); }
void Ifc4x3_tc1::IfcRelInterferesElements::setRelatingElement(::Ifc4x3_tc1::IfcInterferenceSelect* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcInterferenceSelect* Ifc4x3_tc1::IfcRelInterferesElements::RelatedElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcInterferenceSelect>(true); }
void Ifc4x3_tc1::IfcRelInterferesElements::setRelatedElement(::Ifc4x3_tc1::IfcInterferenceSelect* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcConnectionGeometry* Ifc4x3_tc1::IfcRelInterferesElements::InterferenceGeometry() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcConnectionGeometry>(true); }
void Ifc4x3_tc1::IfcRelInterferesElements::setInterferenceGeometry(::Ifc4x3_tc1::IfcConnectionGeometry* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
boost::optional< std::string > Ifc4x3_tc1::IfcRelInterferesElements::InterferenceType() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcRelInterferesElements::setInterferenceType(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::logic::tribool Ifc4x3_tc1::IfcRelInterferesElements::ImpliedOrder() const {  boost::logic::tribool v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcRelInterferesElements::setImpliedOrder(boost::logic::tribool v) { set_attribute_value(8, v);if constexpr (false)unset_attribute_value(8); }
::Ifc4x3_tc1::IfcSpatialZone* Ifc4x3_tc1::IfcRelInterferesElements::InterferenceSpace() const { if(data_.get_attribute_value(9).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(9)))->as<::Ifc4x3_tc1::IfcSpatialZone>(true); }
void Ifc4x3_tc1::IfcRelInterferesElements::setInterferenceSpace(::Ifc4x3_tc1::IfcSpatialZone* v) { set_attribute_value(9, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelInterferesElements::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[936]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelInterferesElements::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[936]); }
Ifc4x3_tc1::IfcRelInterferesElements::IfcRelInterferesElements(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelInterferesElements::IfcRelInterferesElements(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcInterferenceSelect* v5_RelatingElement, ::Ifc4x3_tc1::IfcInterferenceSelect* v6_RelatedElement, ::Ifc4x3_tc1::IfcConnectionGeometry* v7_InterferenceGeometry, boost::optional< std::string > v8_InterferenceType, boost::logic::tribool v9_ImpliedOrder, ::Ifc4x3_tc1::IfcSpatialZone* v10_InterferenceSpace) : IfcRelConnects(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingElement ? v5_RelatingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatedElement ? v6_RelatedElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_InterferenceGeometry ? v7_InterferenceGeometry->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_InterferenceType) {set_attribute_value(7, (*v8_InterferenceType)); }set_attribute_value(8, (v9_ImpliedOrder));set_attribute_value(9, v10_InterferenceSpace ? v10_InterferenceSpace->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelNests
::Ifc4x3_tc1::IfcObjectDefinition* Ifc4x3_tc1::IfcRelNests::RelatingObject() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcObjectDefinition>(true); }
void Ifc4x3_tc1::IfcRelNests::setRelatingObject(::Ifc4x3_tc1::IfcObjectDefinition* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr Ifc4x3_tc1::IfcRelNests::RelatedObjects() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(5); return es->as< ::Ifc4x3_tc1::IfcObjectDefinition >(); }
void Ifc4x3_tc1::IfcRelNests::setRelatedObjects(aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v) { set_attribute_value(5, (v)->generalize());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelNests::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[937]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelNests::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[937]); }
Ifc4x3_tc1::IfcRelNests::IfcRelNests(IfcEntityInstanceData&& e) : IfcRelDecomposes(std::move(e)) { }
Ifc4x3_tc1::IfcRelNests::IfcRelNests(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcObjectDefinition* v5_RelatingObject, aggregate_of< ::Ifc4x3_tc1::IfcObjectDefinition >::ptr v6_RelatedObjects) : IfcRelDecomposes(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingObject ? v5_RelatingObject->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, (v6_RelatedObjects)->generalize());; populate_derived(); }

// Function implementations for IfcRelPositions
::Ifc4x3_tc1::IfcPositioningElement* Ifc4x3_tc1::IfcRelPositions::RelatingPositioningElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcPositioningElement>(true); }
void Ifc4x3_tc1::IfcRelPositions::setRelatingPositioningElement(::Ifc4x3_tc1::IfcPositioningElement* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
aggregate_of< ::Ifc4x3_tc1::IfcProduct >::ptr Ifc4x3_tc1::IfcRelPositions::RelatedProducts() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(5); return es->as< ::Ifc4x3_tc1::IfcProduct >(); }
void Ifc4x3_tc1::IfcRelPositions::setRelatedProducts(aggregate_of< ::Ifc4x3_tc1::IfcProduct >::ptr v) { set_attribute_value(5, (v)->generalize());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelPositions::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[938]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelPositions::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[938]); }
Ifc4x3_tc1::IfcRelPositions::IfcRelPositions(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelPositions::IfcRelPositions(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcPositioningElement* v5_RelatingPositioningElement, aggregate_of< ::Ifc4x3_tc1::IfcProduct >::ptr v6_RelatedProducts) : IfcRelConnects(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingPositioningElement ? v5_RelatingPositioningElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, (v6_RelatedProducts)->generalize());; populate_derived(); }

// Function implementations for IfcRelProjectsElement
::Ifc4x3_tc1::IfcElement* Ifc4x3_tc1::IfcRelProjectsElement::RelatingElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcElement>(true); }
void Ifc4x3_tc1::IfcRelProjectsElement::setRelatingElement(::Ifc4x3_tc1::IfcElement* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcFeatureElementAddition* Ifc4x3_tc1::IfcRelProjectsElement::RelatedFeatureElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcFeatureElementAddition>(true); }
void Ifc4x3_tc1::IfcRelProjectsElement::setRelatedFeatureElement(::Ifc4x3_tc1::IfcFeatureElementAddition* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelProjectsElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[939]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelProjectsElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[939]); }
Ifc4x3_tc1::IfcRelProjectsElement::IfcRelProjectsElement(IfcEntityInstanceData&& e) : IfcRelDecomposes(std::move(e)) { }
Ifc4x3_tc1::IfcRelProjectsElement::IfcRelProjectsElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcElement* v5_RelatingElement, ::Ifc4x3_tc1::IfcFeatureElementAddition* v6_RelatedFeatureElement) : IfcRelDecomposes(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingElement ? v5_RelatingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatedFeatureElement ? v6_RelatedFeatureElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelReferencedInSpatialStructure
aggregate_of< ::Ifc4x3_tc1::IfcSpatialReferenceSelect >::ptr Ifc4x3_tc1::IfcRelReferencedInSpatialStructure::RelatedElements() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(4); return es->as< ::Ifc4x3_tc1::IfcSpatialReferenceSelect >(); }
void Ifc4x3_tc1::IfcRelReferencedInSpatialStructure::setRelatedElements(aggregate_of< ::Ifc4x3_tc1::IfcSpatialReferenceSelect >::ptr v) { set_attribute_value(4, (v)->generalize());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcSpatialElement* Ifc4x3_tc1::IfcRelReferencedInSpatialStructure::RelatingStructure() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcSpatialElement>(true); }
void Ifc4x3_tc1::IfcRelReferencedInSpatialStructure::setRelatingStructure(::Ifc4x3_tc1::IfcSpatialElement* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelReferencedInSpatialStructure::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[940]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelReferencedInSpatialStructure::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[940]); }
Ifc4x3_tc1::IfcRelReferencedInSpatialStructure::IfcRelReferencedInSpatialStructure(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelReferencedInSpatialStructure::IfcRelReferencedInSpatialStructure(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_tc1::IfcSpatialReferenceSelect >::ptr v5_RelatedElements, ::Ifc4x3_tc1::IfcSpatialElement* v6_RelatingStructure) : IfcRelConnects(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (v5_RelatedElements)->generalize());set_attribute_value(5, v6_RelatingStructure ? v6_RelatingStructure->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelSequence
::Ifc4x3_tc1::IfcProcess* Ifc4x3_tc1::IfcRelSequence::RelatingProcess() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcProcess>(true); }
void Ifc4x3_tc1::IfcRelSequence::setRelatingProcess(::Ifc4x3_tc1::IfcProcess* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcProcess* Ifc4x3_tc1::IfcRelSequence::RelatedProcess() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcProcess>(true); }
void Ifc4x3_tc1::IfcRelSequence::setRelatedProcess(::Ifc4x3_tc1::IfcProcess* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcLagTime* Ifc4x3_tc1::IfcRelSequence::TimeLag() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcLagTime>(true); }
void Ifc4x3_tc1::IfcRelSequence::setTimeLag(::Ifc4x3_tc1::IfcLagTime* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
boost::optional< ::Ifc4x3_tc1::IfcSequenceEnum::Value > Ifc4x3_tc1::IfcRelSequence::SequenceType() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSequenceEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcRelSequence::setSequenceType(boost::optional< ::Ifc4x3_tc1::IfcSequenceEnum::Value > v) { if (v) {set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcSequenceEnum::Class(), (size_t) *v));} else {unset_attribute_value(7);} }
boost::optional< std::string > Ifc4x3_tc1::IfcRelSequence::UserDefinedSequenceType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcRelSequence::setUserDefinedSequenceType(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRelSequence::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[941]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelSequence::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[941]); }
Ifc4x3_tc1::IfcRelSequence::IfcRelSequence(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelSequence::IfcRelSequence(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcProcess* v5_RelatingProcess, ::Ifc4x3_tc1::IfcProcess* v6_RelatedProcess, ::Ifc4x3_tc1::IfcLagTime* v7_TimeLag, boost::optional< ::Ifc4x3_tc1::IfcSequenceEnum::Value > v8_SequenceType, boost::optional< std::string > v9_UserDefinedSequenceType) : IfcRelConnects(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingProcess ? v5_RelatingProcess->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatedProcess ? v6_RelatedProcess->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_TimeLag ? v7_TimeLag->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_SequenceType) {set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcSequenceEnum::Class(),(size_t)*v8_SequenceType))); } if (v9_UserDefinedSequenceType) {set_attribute_value(8, (*v9_UserDefinedSequenceType)); }; populate_derived(); }

// Function implementations for IfcRelServicesBuildings
::Ifc4x3_tc1::IfcSystem* Ifc4x3_tc1::IfcRelServicesBuildings::RelatingSystem() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcSystem>(true); }
void Ifc4x3_tc1::IfcRelServicesBuildings::setRelatingSystem(::Ifc4x3_tc1::IfcSystem* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
aggregate_of< ::Ifc4x3_tc1::IfcSpatialElement >::ptr Ifc4x3_tc1::IfcRelServicesBuildings::RelatedBuildings() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(5); return es->as< ::Ifc4x3_tc1::IfcSpatialElement >(); }
void Ifc4x3_tc1::IfcRelServicesBuildings::setRelatedBuildings(aggregate_of< ::Ifc4x3_tc1::IfcSpatialElement >::ptr v) { set_attribute_value(5, (v)->generalize());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelServicesBuildings::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[942]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelServicesBuildings::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[942]); }
Ifc4x3_tc1::IfcRelServicesBuildings::IfcRelServicesBuildings(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelServicesBuildings::IfcRelServicesBuildings(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcSystem* v5_RelatingSystem, aggregate_of< ::Ifc4x3_tc1::IfcSpatialElement >::ptr v6_RelatedBuildings) : IfcRelConnects(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingSystem ? v5_RelatingSystem->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, (v6_RelatedBuildings)->generalize());; populate_derived(); }

// Function implementations for IfcRelSpaceBoundary
::Ifc4x3_tc1::IfcSpaceBoundarySelect* Ifc4x3_tc1::IfcRelSpaceBoundary::RelatingSpace() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcSpaceBoundarySelect>(true); }
void Ifc4x3_tc1::IfcRelSpaceBoundary::setRelatingSpace(::Ifc4x3_tc1::IfcSpaceBoundarySelect* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcElement* Ifc4x3_tc1::IfcRelSpaceBoundary::RelatedBuildingElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcElement>(true); }
void Ifc4x3_tc1::IfcRelSpaceBoundary::setRelatedBuildingElement(::Ifc4x3_tc1::IfcElement* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcConnectionGeometry* Ifc4x3_tc1::IfcRelSpaceBoundary::ConnectionGeometry() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcConnectionGeometry>(true); }
void Ifc4x3_tc1::IfcRelSpaceBoundary::setConnectionGeometry(::Ifc4x3_tc1::IfcConnectionGeometry* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
::Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Value Ifc4x3_tc1::IfcRelSpaceBoundary::PhysicalOrVirtualBoundary() const {  return ::Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcRelSpaceBoundary::setPhysicalOrVirtualBoundary(::Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Value v) { set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(7); }
::Ifc4x3_tc1::IfcInternalOrExternalEnum::Value Ifc4x3_tc1::IfcRelSpaceBoundary::InternalOrExternalBoundary() const {  return ::Ifc4x3_tc1::IfcInternalOrExternalEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcRelSpaceBoundary::setInternalOrExternalBoundary(::Ifc4x3_tc1::IfcInternalOrExternalEnum::Value v) { set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcInternalOrExternalEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelSpaceBoundary::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[943]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelSpaceBoundary::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[943]); }
Ifc4x3_tc1::IfcRelSpaceBoundary::IfcRelSpaceBoundary(IfcEntityInstanceData&& e) : IfcRelConnects(std::move(e)) { }
Ifc4x3_tc1::IfcRelSpaceBoundary::IfcRelSpaceBoundary(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcSpaceBoundarySelect* v5_RelatingSpace, ::Ifc4x3_tc1::IfcElement* v6_RelatedBuildingElement, ::Ifc4x3_tc1::IfcConnectionGeometry* v7_ConnectionGeometry, ::Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Value v8_PhysicalOrVirtualBoundary, ::Ifc4x3_tc1::IfcInternalOrExternalEnum::Value v9_InternalOrExternalBoundary) : IfcRelConnects(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingSpace ? v5_RelatingSpace->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatedBuildingElement ? v6_RelatedBuildingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_ConnectionGeometry ? v7_ConnectionGeometry->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Class(),(size_t)v8_PhysicalOrVirtualBoundary)));set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcInternalOrExternalEnum::Class(),(size_t)v9_InternalOrExternalBoundary)));; populate_derived(); }

// Function implementations for IfcRelSpaceBoundary1stLevel
::Ifc4x3_tc1::IfcRelSpaceBoundary1stLevel* Ifc4x3_tc1::IfcRelSpaceBoundary1stLevel::ParentBoundary() const { if(data_.get_attribute_value(9).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(9)))->as<::Ifc4x3_tc1::IfcRelSpaceBoundary1stLevel>(true); }
void Ifc4x3_tc1::IfcRelSpaceBoundary1stLevel::setParentBoundary(::Ifc4x3_tc1::IfcRelSpaceBoundary1stLevel* v) { set_attribute_value(9, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(9); }

::Ifc4x3_tc1::IfcRelSpaceBoundary1stLevel::list::ptr Ifc4x3_tc1::IfcRelSpaceBoundary1stLevel::InnerBoundaries() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[944], 9)->as<IfcRelSpaceBoundary1stLevel>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcRelSpaceBoundary1stLevel::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[944]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelSpaceBoundary1stLevel::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[944]); }
Ifc4x3_tc1::IfcRelSpaceBoundary1stLevel::IfcRelSpaceBoundary1stLevel(IfcEntityInstanceData&& e) : IfcRelSpaceBoundary(std::move(e)) { }
Ifc4x3_tc1::IfcRelSpaceBoundary1stLevel::IfcRelSpaceBoundary1stLevel(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcSpaceBoundarySelect* v5_RelatingSpace, ::Ifc4x3_tc1::IfcElement* v6_RelatedBuildingElement, ::Ifc4x3_tc1::IfcConnectionGeometry* v7_ConnectionGeometry, ::Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Value v8_PhysicalOrVirtualBoundary, ::Ifc4x3_tc1::IfcInternalOrExternalEnum::Value v9_InternalOrExternalBoundary, ::Ifc4x3_tc1::IfcRelSpaceBoundary1stLevel* v10_ParentBoundary) : IfcRelSpaceBoundary(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingSpace ? v5_RelatingSpace->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatedBuildingElement ? v6_RelatedBuildingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_ConnectionGeometry ? v7_ConnectionGeometry->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Class(),(size_t)v8_PhysicalOrVirtualBoundary)));set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcInternalOrExternalEnum::Class(),(size_t)v9_InternalOrExternalBoundary)));set_attribute_value(9, v10_ParentBoundary ? v10_ParentBoundary->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelSpaceBoundary2ndLevel
::Ifc4x3_tc1::IfcRelSpaceBoundary2ndLevel* Ifc4x3_tc1::IfcRelSpaceBoundary2ndLevel::CorrespondingBoundary() const { if(data_.get_attribute_value(10).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(10)))->as<::Ifc4x3_tc1::IfcRelSpaceBoundary2ndLevel>(true); }
void Ifc4x3_tc1::IfcRelSpaceBoundary2ndLevel::setCorrespondingBoundary(::Ifc4x3_tc1::IfcRelSpaceBoundary2ndLevel* v) { set_attribute_value(10, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(10); }

::Ifc4x3_tc1::IfcRelSpaceBoundary2ndLevel::list::ptr Ifc4x3_tc1::IfcRelSpaceBoundary2ndLevel::Corresponds() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[945], 10)->as<IfcRelSpaceBoundary2ndLevel>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcRelSpaceBoundary2ndLevel::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[945]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelSpaceBoundary2ndLevel::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[945]); }
Ifc4x3_tc1::IfcRelSpaceBoundary2ndLevel::IfcRelSpaceBoundary2ndLevel(IfcEntityInstanceData&& e) : IfcRelSpaceBoundary1stLevel(std::move(e)) { }
Ifc4x3_tc1::IfcRelSpaceBoundary2ndLevel::IfcRelSpaceBoundary2ndLevel(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcSpaceBoundarySelect* v5_RelatingSpace, ::Ifc4x3_tc1::IfcElement* v6_RelatedBuildingElement, ::Ifc4x3_tc1::IfcConnectionGeometry* v7_ConnectionGeometry, ::Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Value v8_PhysicalOrVirtualBoundary, ::Ifc4x3_tc1::IfcInternalOrExternalEnum::Value v9_InternalOrExternalBoundary, ::Ifc4x3_tc1::IfcRelSpaceBoundary1stLevel* v10_ParentBoundary, ::Ifc4x3_tc1::IfcRelSpaceBoundary2ndLevel* v11_CorrespondingBoundary) : IfcRelSpaceBoundary1stLevel(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingSpace ? v5_RelatingSpace->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatedBuildingElement ? v6_RelatedBuildingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_ConnectionGeometry ? v7_ConnectionGeometry->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcPhysicalOrVirtualEnum::Class(),(size_t)v8_PhysicalOrVirtualBoundary)));set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcInternalOrExternalEnum::Class(),(size_t)v9_InternalOrExternalBoundary)));set_attribute_value(9, v10_ParentBoundary ? v10_ParentBoundary->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(10, v11_CorrespondingBoundary ? v11_CorrespondingBoundary->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelVoidsElement
::Ifc4x3_tc1::IfcElement* Ifc4x3_tc1::IfcRelVoidsElement::RelatingBuildingElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcElement>(true); }
void Ifc4x3_tc1::IfcRelVoidsElement::setRelatingBuildingElement(::Ifc4x3_tc1::IfcElement* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcFeatureElementSubtraction* Ifc4x3_tc1::IfcRelVoidsElement::RelatedOpeningElement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcFeatureElementSubtraction>(true); }
void Ifc4x3_tc1::IfcRelVoidsElement::setRelatedOpeningElement(::Ifc4x3_tc1::IfcFeatureElementSubtraction* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRelVoidsElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[946]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelVoidsElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[946]); }
Ifc4x3_tc1::IfcRelVoidsElement::IfcRelVoidsElement(IfcEntityInstanceData&& e) : IfcRelDecomposes(std::move(e)) { }
Ifc4x3_tc1::IfcRelVoidsElement::IfcRelVoidsElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcElement* v5_RelatingBuildingElement, ::Ifc4x3_tc1::IfcFeatureElementSubtraction* v6_RelatedOpeningElement) : IfcRelDecomposes(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, v5_RelatingBuildingElement ? v5_RelatingBuildingElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_RelatedOpeningElement ? v6_RelatedOpeningElement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRelationship


const IfcParse::entity& Ifc4x3_tc1::IfcRelationship::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[914]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRelationship::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[914]); }
Ifc4x3_tc1::IfcRelationship::IfcRelationship(IfcEntityInstanceData&& e) : IfcRoot(std::move(e)) { }
Ifc4x3_tc1::IfcRelationship::IfcRelationship(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcRoot(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }; populate_derived(); }

// Function implementations for IfcReparametrisedCompositeCurveSegment
double Ifc4x3_tc1::IfcReparametrisedCompositeCurveSegment::ParamLength() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcReparametrisedCompositeCurveSegment::setParamLength(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcReparametrisedCompositeCurveSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[947]); }
const IfcParse::entity& Ifc4x3_tc1::IfcReparametrisedCompositeCurveSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[947]); }
Ifc4x3_tc1::IfcReparametrisedCompositeCurveSegment::IfcReparametrisedCompositeCurveSegment(IfcEntityInstanceData&& e) : IfcCompositeCurveSegment(std::move(e)) { }
Ifc4x3_tc1::IfcReparametrisedCompositeCurveSegment::IfcReparametrisedCompositeCurveSegment(::Ifc4x3_tc1::IfcTransitionCode::Value v1_Transition, bool v2_SameSense, ::Ifc4x3_tc1::IfcCurve* v3_ParentCurve, double v4_ParamLength) : IfcCompositeCurveSegment(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcTransitionCode::Class(),(size_t)v1_Transition)));set_attribute_value(1, (v2_SameSense));set_attribute_value(2, v3_ParentCurve ? v3_ParentCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_ParamLength));; populate_derived(); }

// Function implementations for IfcRepresentation
::Ifc4x3_tc1::IfcRepresentationContext* Ifc4x3_tc1::IfcRepresentation::ContextOfItems() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcRepresentationContext>(true); }
void Ifc4x3_tc1::IfcRepresentation::setContextOfItems(::Ifc4x3_tc1::IfcRepresentationContext* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcRepresentation::RepresentationIdentifier() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcRepresentation::setRepresentationIdentifier(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcRepresentation::RepresentationType() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcRepresentation::setRepresentationType(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
aggregate_of< ::Ifc4x3_tc1::IfcRepresentationItem >::ptr Ifc4x3_tc1::IfcRepresentation::Items() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(3); return es->as< ::Ifc4x3_tc1::IfcRepresentationItem >(); }
void Ifc4x3_tc1::IfcRepresentation::setItems(aggregate_of< ::Ifc4x3_tc1::IfcRepresentationItem >::ptr v) { set_attribute_value(3, (v)->generalize());if constexpr (false)unset_attribute_value(3); }

::Ifc4x3_tc1::IfcRepresentationMap::list::ptr Ifc4x3_tc1::IfcRepresentation::RepresentationMap() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[951], 1)->as<IfcRepresentationMap>(); }
::Ifc4x3_tc1::IfcPresentationLayerAssignment::list::ptr Ifc4x3_tc1::IfcRepresentation::LayerAssignments() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[789], 2)->as<IfcPresentationLayerAssignment>(); }
::Ifc4x3_tc1::IfcProductRepresentation::list::ptr Ifc4x3_tc1::IfcRepresentation::OfProductRepresentation() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[800], 2)->as<IfcProductRepresentation>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcRepresentation::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[948]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRepresentation::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[948]); }
Ifc4x3_tc1::IfcRepresentation::IfcRepresentation(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcRepresentation::IfcRepresentation(::Ifc4x3_tc1::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_tc1::IfcRepresentationItem >::ptr v4_Items) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_ContextOfItems ? v1_ContextOfItems->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_RepresentationIdentifier) {set_attribute_value(1, (*v2_RepresentationIdentifier)); } if (v3_RepresentationType) {set_attribute_value(2, (*v3_RepresentationType)); }set_attribute_value(3, (v4_Items)->generalize());; populate_derived(); }

// Function implementations for IfcRepresentationContext
boost::optional< std::string > Ifc4x3_tc1::IfcRepresentationContext::ContextIdentifier() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcRepresentationContext::setContextIdentifier(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcRepresentationContext::ContextType() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcRepresentationContext::setContextType(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }

::Ifc4x3_tc1::IfcRepresentation::list::ptr Ifc4x3_tc1::IfcRepresentationContext::RepresentationsInContext() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[948], 0)->as<IfcRepresentation>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcRepresentationContext::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[949]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRepresentationContext::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[949]); }
Ifc4x3_tc1::IfcRepresentationContext::IfcRepresentationContext(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcRepresentationContext::IfcRepresentationContext(boost::optional< std::string > v1_ContextIdentifier, boost::optional< std::string > v2_ContextType) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) {  if (v1_ContextIdentifier) {set_attribute_value(0, (*v1_ContextIdentifier)); } if (v2_ContextType) {set_attribute_value(1, (*v2_ContextType)); }; populate_derived(); }

// Function implementations for IfcRepresentationItem

::Ifc4x3_tc1::IfcPresentationLayerAssignment::list::ptr Ifc4x3_tc1::IfcRepresentationItem::LayerAssignment() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[789], 2)->as<IfcPresentationLayerAssignment>(); }
::Ifc4x3_tc1::IfcStyledItem::list::ptr Ifc4x3_tc1::IfcRepresentationItem::StyledByItem() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[1114], 0)->as<IfcStyledItem>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcRepresentationItem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[950]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRepresentationItem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[950]); }
Ifc4x3_tc1::IfcRepresentationItem::IfcRepresentationItem(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcRepresentationItem::IfcRepresentationItem() : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcRepresentationMap
::Ifc4x3_tc1::IfcAxis2Placement* Ifc4x3_tc1::IfcRepresentationMap::MappingOrigin() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcAxis2Placement>(true); }
void Ifc4x3_tc1::IfcRepresentationMap::setMappingOrigin(::Ifc4x3_tc1::IfcAxis2Placement* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcRepresentation* Ifc4x3_tc1::IfcRepresentationMap::MappedRepresentation() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcRepresentation>(true); }
void Ifc4x3_tc1::IfcRepresentationMap::setMappedRepresentation(::Ifc4x3_tc1::IfcRepresentation* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }

::Ifc4x3_tc1::IfcShapeAspect::list::ptr Ifc4x3_tc1::IfcRepresentationMap::HasShapeAspects() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[1003], 4)->as<IfcShapeAspect>(); }
::Ifc4x3_tc1::IfcMappedItem::list::ptr Ifc4x3_tc1::IfcRepresentationMap::MapUsage() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[626], 0)->as<IfcMappedItem>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcRepresentationMap::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[951]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRepresentationMap::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[951]); }
Ifc4x3_tc1::IfcRepresentationMap::IfcRepresentationMap(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcRepresentationMap::IfcRepresentationMap(::Ifc4x3_tc1::IfcAxis2Placement* v1_MappingOrigin, ::Ifc4x3_tc1::IfcRepresentation* v2_MappedRepresentation) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_MappingOrigin ? v1_MappingOrigin->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_MappedRepresentation ? v2_MappedRepresentation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcResource
boost::optional< std::string > Ifc4x3_tc1::IfcResource::Identification() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcResource::setIdentification(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcResource::LongDescription() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcResource::setLongDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }

::Ifc4x3_tc1::IfcRelAssignsToResource::list::ptr Ifc4x3_tc1::IfcResource::ResourceOf() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[905], 6)->as<IfcRelAssignsToResource>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcResource::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[952]); }
const IfcParse::entity& Ifc4x3_tc1::IfcResource::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[952]); }
Ifc4x3_tc1::IfcResource::IfcResource(IfcEntityInstanceData&& e) : IfcObject(std::move(e)) { }
Ifc4x3_tc1::IfcResource::IfcResource(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription) : IfcObject(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_LongDescription) {set_attribute_value(6, (*v7_LongDescription)); }; populate_derived(); }

// Function implementations for IfcResourceApprovalRelationship
aggregate_of< ::Ifc4x3_tc1::IfcResourceObjectSelect >::ptr Ifc4x3_tc1::IfcResourceApprovalRelationship::RelatedResourceObjects() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcResourceObjectSelect >(); }
void Ifc4x3_tc1::IfcResourceApprovalRelationship::setRelatedResourceObjects(aggregate_of< ::Ifc4x3_tc1::IfcResourceObjectSelect >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcApproval* Ifc4x3_tc1::IfcResourceApprovalRelationship::RelatingApproval() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcApproval>(true); }
void Ifc4x3_tc1::IfcResourceApprovalRelationship::setRelatingApproval(::Ifc4x3_tc1::IfcApproval* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcResourceApprovalRelationship::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[953]); }
const IfcParse::entity& Ifc4x3_tc1::IfcResourceApprovalRelationship::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[953]); }
Ifc4x3_tc1::IfcResourceApprovalRelationship::IfcResourceApprovalRelationship(IfcEntityInstanceData&& e) : IfcResourceLevelRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcResourceApprovalRelationship::IfcResourceApprovalRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_tc1::IfcResourceObjectSelect >::ptr v3_RelatedResourceObjects, ::Ifc4x3_tc1::IfcApproval* v4_RelatingApproval) : IfcResourceLevelRelationship(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_RelatedResourceObjects)->generalize());set_attribute_value(3, v4_RelatingApproval ? v4_RelatingApproval->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcResourceConstraintRelationship
::Ifc4x3_tc1::IfcConstraint* Ifc4x3_tc1::IfcResourceConstraintRelationship::RelatingConstraint() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcConstraint>(true); }
void Ifc4x3_tc1::IfcResourceConstraintRelationship::setRelatingConstraint(::Ifc4x3_tc1::IfcConstraint* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
aggregate_of< ::Ifc4x3_tc1::IfcResourceObjectSelect >::ptr Ifc4x3_tc1::IfcResourceConstraintRelationship::RelatedResourceObjects() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(3); return es->as< ::Ifc4x3_tc1::IfcResourceObjectSelect >(); }
void Ifc4x3_tc1::IfcResourceConstraintRelationship::setRelatedResourceObjects(aggregate_of< ::Ifc4x3_tc1::IfcResourceObjectSelect >::ptr v) { set_attribute_value(3, (v)->generalize());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcResourceConstraintRelationship::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[954]); }
const IfcParse::entity& Ifc4x3_tc1::IfcResourceConstraintRelationship::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[954]); }
Ifc4x3_tc1::IfcResourceConstraintRelationship::IfcResourceConstraintRelationship(IfcEntityInstanceData&& e) : IfcResourceLevelRelationship(std::move(e)) { }
Ifc4x3_tc1::IfcResourceConstraintRelationship::IfcResourceConstraintRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_tc1::IfcConstraint* v3_RelatingConstraint, aggregate_of< ::Ifc4x3_tc1::IfcResourceObjectSelect >::ptr v4_RelatedResourceObjects) : IfcResourceLevelRelationship(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, v3_RelatingConstraint ? v3_RelatingConstraint->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_RelatedResourceObjects)->generalize());; populate_derived(); }

// Function implementations for IfcResourceLevelRelationship
boost::optional< std::string > Ifc4x3_tc1::IfcResourceLevelRelationship::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcResourceLevelRelationship::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcResourceLevelRelationship::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcResourceLevelRelationship::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }


const IfcParse::entity& Ifc4x3_tc1::IfcResourceLevelRelationship::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[955]); }
const IfcParse::entity& Ifc4x3_tc1::IfcResourceLevelRelationship::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[955]); }
Ifc4x3_tc1::IfcResourceLevelRelationship::IfcResourceLevelRelationship(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcResourceLevelRelationship::IfcResourceLevelRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); }; populate_derived(); }

// Function implementations for IfcResourceTime
boost::optional< std::string > Ifc4x3_tc1::IfcResourceTime::ScheduleWork() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcResourceTime::setScheduleWork(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< double > Ifc4x3_tc1::IfcResourceTime::ScheduleUsage() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcResourceTime::setScheduleUsage(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcResourceTime::ScheduleStart() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcResourceTime::setScheduleStart(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcResourceTime::ScheduleFinish() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcResourceTime::setScheduleFinish(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< std::string > Ifc4x3_tc1::IfcResourceTime::ScheduleContour() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcResourceTime::setScheduleContour(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< std::string > Ifc4x3_tc1::IfcResourceTime::LevelingDelay() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcResourceTime::setLevelingDelay(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< bool > Ifc4x3_tc1::IfcResourceTime::IsOverAllocated() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } bool v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcResourceTime::setIsOverAllocated(boost::optional< bool > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< std::string > Ifc4x3_tc1::IfcResourceTime::StatusTime() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcResourceTime::setStatusTime(boost::optional< std::string > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< std::string > Ifc4x3_tc1::IfcResourceTime::ActualWork() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcResourceTime::setActualWork(boost::optional< std::string > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< double > Ifc4x3_tc1::IfcResourceTime::ActualUsage() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } double v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcResourceTime::setActualUsage(boost::optional< double > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }
boost::optional< std::string > Ifc4x3_tc1::IfcResourceTime::ActualStart() const { if(data_.get_attribute_value(13).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(13); return v; }
void Ifc4x3_tc1::IfcResourceTime::setActualStart(boost::optional< std::string > v) { if (v) {set_attribute_value(13, *v);} else {unset_attribute_value(13);} }
boost::optional< std::string > Ifc4x3_tc1::IfcResourceTime::ActualFinish() const { if(data_.get_attribute_value(14).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(14); return v; }
void Ifc4x3_tc1::IfcResourceTime::setActualFinish(boost::optional< std::string > v) { if (v) {set_attribute_value(14, *v);} else {unset_attribute_value(14);} }
boost::optional< std::string > Ifc4x3_tc1::IfcResourceTime::RemainingWork() const { if(data_.get_attribute_value(15).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(15); return v; }
void Ifc4x3_tc1::IfcResourceTime::setRemainingWork(boost::optional< std::string > v) { if (v) {set_attribute_value(15, *v);} else {unset_attribute_value(15);} }
boost::optional< double > Ifc4x3_tc1::IfcResourceTime::RemainingUsage() const { if(data_.get_attribute_value(16).isNull()) { return boost::none; } double v = data_.get_attribute_value(16); return v; }
void Ifc4x3_tc1::IfcResourceTime::setRemainingUsage(boost::optional< double > v) { if (v) {set_attribute_value(16, *v);} else {unset_attribute_value(16);} }
boost::optional< double > Ifc4x3_tc1::IfcResourceTime::Completion() const { if(data_.get_attribute_value(17).isNull()) { return boost::none; } double v = data_.get_attribute_value(17); return v; }
void Ifc4x3_tc1::IfcResourceTime::setCompletion(boost::optional< double > v) { if (v) {set_attribute_value(17, *v);} else {unset_attribute_value(17);} }


const IfcParse::entity& Ifc4x3_tc1::IfcResourceTime::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[958]); }
const IfcParse::entity& Ifc4x3_tc1::IfcResourceTime::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[958]); }
Ifc4x3_tc1::IfcResourceTime::IfcResourceTime(IfcEntityInstanceData&& e) : IfcSchedulingTime(std::move(e)) { }
Ifc4x3_tc1::IfcResourceTime::IfcResourceTime(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_tc1::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, boost::optional< std::string > v4_ScheduleWork, boost::optional< double > v5_ScheduleUsage, boost::optional< std::string > v6_ScheduleStart, boost::optional< std::string > v7_ScheduleFinish, boost::optional< std::string > v8_ScheduleContour, boost::optional< std::string > v9_LevelingDelay, boost::optional< bool > v10_IsOverAllocated, boost::optional< std::string > v11_StatusTime, boost::optional< std::string > v12_ActualWork, boost::optional< double > v13_ActualUsage, boost::optional< std::string > v14_ActualStart, boost::optional< std::string > v15_ActualFinish, boost::optional< std::string > v16_RemainingWork, boost::optional< double > v17_RemainingUsage, boost::optional< double > v18_Completion) : IfcSchedulingTime(IfcEntityInstanceData(storage_t(18))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_DataOrigin) {set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcDataOriginEnum::Class(),(size_t)*v2_DataOrigin))); } if (v3_UserDefinedDataOrigin) {set_attribute_value(2, (*v3_UserDefinedDataOrigin)); } if (v4_ScheduleWork) {set_attribute_value(3, (*v4_ScheduleWork)); } if (v5_ScheduleUsage) {set_attribute_value(4, (*v5_ScheduleUsage)); } if (v6_ScheduleStart) {set_attribute_value(5, (*v6_ScheduleStart)); } if (v7_ScheduleFinish) {set_attribute_value(6, (*v7_ScheduleFinish)); } if (v8_ScheduleContour) {set_attribute_value(7, (*v8_ScheduleContour)); } if (v9_LevelingDelay) {set_attribute_value(8, (*v9_LevelingDelay)); } if (v10_IsOverAllocated) {set_attribute_value(9, (*v10_IsOverAllocated)); } if (v11_StatusTime) {set_attribute_value(10, (*v11_StatusTime)); } if (v12_ActualWork) {set_attribute_value(11, (*v12_ActualWork)); } if (v13_ActualUsage) {set_attribute_value(12, (*v13_ActualUsage)); } if (v14_ActualStart) {set_attribute_value(13, (*v14_ActualStart)); } if (v15_ActualFinish) {set_attribute_value(14, (*v15_ActualFinish)); } if (v16_RemainingWork) {set_attribute_value(15, (*v16_RemainingWork)); } if (v17_RemainingUsage) {set_attribute_value(16, (*v17_RemainingUsage)); } if (v18_Completion) {set_attribute_value(17, (*v18_Completion)); }; populate_derived(); }

// Function implementations for IfcRevolvedAreaSolid
::Ifc4x3_tc1::IfcAxis1Placement* Ifc4x3_tc1::IfcRevolvedAreaSolid::Axis() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcAxis1Placement>(true); }
void Ifc4x3_tc1::IfcRevolvedAreaSolid::setAxis(::Ifc4x3_tc1::IfcAxis1Placement* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
double Ifc4x3_tc1::IfcRevolvedAreaSolid::Angle() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcRevolvedAreaSolid::setAngle(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcRevolvedAreaSolid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[959]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRevolvedAreaSolid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[959]); }
Ifc4x3_tc1::IfcRevolvedAreaSolid::IfcRevolvedAreaSolid(IfcEntityInstanceData&& e) : IfcSweptAreaSolid(std::move(e)) { }
Ifc4x3_tc1::IfcRevolvedAreaSolid::IfcRevolvedAreaSolid(::Ifc4x3_tc1::IfcProfileDef* v1_SweptArea, ::Ifc4x3_tc1::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_tc1::IfcAxis1Placement* v3_Axis, double v4_Angle) : IfcSweptAreaSolid(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_SweptArea ? v1_SweptArea->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Position ? v2_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_Axis ? v3_Axis->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Angle));; populate_derived(); }

// Function implementations for IfcRevolvedAreaSolidTapered
::Ifc4x3_tc1::IfcProfileDef* Ifc4x3_tc1::IfcRevolvedAreaSolidTapered::EndSweptArea() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcProfileDef>(true); }
void Ifc4x3_tc1::IfcRevolvedAreaSolidTapered::setEndSweptArea(::Ifc4x3_tc1::IfcProfileDef* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcRevolvedAreaSolidTapered::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[960]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRevolvedAreaSolidTapered::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[960]); }
Ifc4x3_tc1::IfcRevolvedAreaSolidTapered::IfcRevolvedAreaSolidTapered(IfcEntityInstanceData&& e) : IfcRevolvedAreaSolid(std::move(e)) { }
Ifc4x3_tc1::IfcRevolvedAreaSolidTapered::IfcRevolvedAreaSolidTapered(::Ifc4x3_tc1::IfcProfileDef* v1_SweptArea, ::Ifc4x3_tc1::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_tc1::IfcAxis1Placement* v3_Axis, double v4_Angle, ::Ifc4x3_tc1::IfcProfileDef* v5_EndSweptArea) : IfcRevolvedAreaSolid(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_SweptArea ? v1_SweptArea->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Position ? v2_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_Axis ? v3_Axis->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Angle));set_attribute_value(4, v5_EndSweptArea ? v5_EndSweptArea->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcRightCircularCone
double Ifc4x3_tc1::IfcRightCircularCone::Height() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcRightCircularCone::setHeight(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
double Ifc4x3_tc1::IfcRightCircularCone::BottomRadius() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcRightCircularCone::setBottomRadius(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcRightCircularCone::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[961]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRightCircularCone::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[961]); }
Ifc4x3_tc1::IfcRightCircularCone::IfcRightCircularCone(IfcEntityInstanceData&& e) : IfcCsgPrimitive3D(std::move(e)) { }
Ifc4x3_tc1::IfcRightCircularCone::IfcRightCircularCone(::Ifc4x3_tc1::IfcAxis2Placement3D* v1_Position, double v2_Height, double v3_BottomRadius) : IfcCsgPrimitive3D(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Height));set_attribute_value(2, (v3_BottomRadius));; populate_derived(); }

// Function implementations for IfcRightCircularCylinder
double Ifc4x3_tc1::IfcRightCircularCylinder::Height() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcRightCircularCylinder::setHeight(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
double Ifc4x3_tc1::IfcRightCircularCylinder::Radius() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcRightCircularCylinder::setRadius(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcRightCircularCylinder::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[962]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRightCircularCylinder::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[962]); }
Ifc4x3_tc1::IfcRightCircularCylinder::IfcRightCircularCylinder(IfcEntityInstanceData&& e) : IfcCsgPrimitive3D(std::move(e)) { }
Ifc4x3_tc1::IfcRightCircularCylinder::IfcRightCircularCylinder(::Ifc4x3_tc1::IfcAxis2Placement3D* v1_Position, double v2_Height, double v3_Radius) : IfcCsgPrimitive3D(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Height));set_attribute_value(2, (v3_Radius));; populate_derived(); }

// Function implementations for IfcRoad
boost::optional< ::Ifc4x3_tc1::IfcRoadTypeEnum::Value > Ifc4x3_tc1::IfcRoad::PredefinedType() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcRoadTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcRoad::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcRoadTypeEnum::Value > v) { if (v) {set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcRoadTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRoad::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[963]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRoad::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[963]); }
Ifc4x3_tc1::IfcRoad::IfcRoad(IfcEntityInstanceData&& e) : IfcFacility(std::move(e)) { }
Ifc4x3_tc1::IfcRoad::IfcRoad(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_tc1::IfcRoadTypeEnum::Value > v10_PredefinedType) : IfcFacility(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); } if (v10_PredefinedType) {set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcRoadTypeEnum::Class(),(size_t)*v10_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcRoadPart
boost::optional< ::Ifc4x3_tc1::IfcRoadPartTypeEnum::Value > Ifc4x3_tc1::IfcRoadPart::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcRoadPartTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcRoadPart::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcRoadPartTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcRoadPartTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRoadPart::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[964]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRoadPart::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[964]); }
Ifc4x3_tc1::IfcRoadPart::IfcRoadPart(IfcEntityInstanceData&& e) : IfcFacilityPart(std::move(e)) { }
Ifc4x3_tc1::IfcRoadPart::IfcRoadPart(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_tc1::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_tc1::IfcRoadPartTypeEnum::Value > v11_PredefinedType) : IfcFacilityPart(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcFacilityUsageEnum::Class(),(size_t)v10_UsageType))); if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcRoadPartTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcRoof
boost::optional< ::Ifc4x3_tc1::IfcRoofTypeEnum::Value > Ifc4x3_tc1::IfcRoof::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcRoofTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcRoof::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcRoofTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcRoofTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRoof::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[968]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRoof::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[968]); }
Ifc4x3_tc1::IfcRoof::IfcRoof(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcRoof::IfcRoof(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcRoofTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcRoofTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcRoofType
::Ifc4x3_tc1::IfcRoofTypeEnum::Value Ifc4x3_tc1::IfcRoofType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcRoofTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcRoofType::setPredefinedType(::Ifc4x3_tc1::IfcRoofTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcRoofTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcRoofType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[969]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRoofType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[969]); }
Ifc4x3_tc1::IfcRoofType::IfcRoofType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcRoofType::IfcRoofType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcRoofTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcRoofTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcRoot
std::string Ifc4x3_tc1::IfcRoot::GlobalId() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcRoot::setGlobalId(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcOwnerHistory* Ifc4x3_tc1::IfcRoot::OwnerHistory() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcOwnerHistory>(true); }
void Ifc4x3_tc1::IfcRoot::setOwnerHistory(::Ifc4x3_tc1::IfcOwnerHistory* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
boost::optional< std::string > Ifc4x3_tc1::IfcRoot::Name() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcRoot::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< std::string > Ifc4x3_tc1::IfcRoot::Description() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcRoot::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcRoot::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[971]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRoot::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[971]); }
Ifc4x3_tc1::IfcRoot::IfcRoot(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcRoot::IfcRoot(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }; populate_derived(); }

// Function implementations for IfcRoundedRectangleProfileDef
double Ifc4x3_tc1::IfcRoundedRectangleProfileDef::RoundingRadius() const {  double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcRoundedRectangleProfileDef::setRoundingRadius(double v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcRoundedRectangleProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[976]); }
const IfcParse::entity& Ifc4x3_tc1::IfcRoundedRectangleProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[976]); }
Ifc4x3_tc1::IfcRoundedRectangleProfileDef::IfcRoundedRectangleProfileDef(IfcEntityInstanceData&& e) : IfcRectangleProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcRoundedRectangleProfileDef::IfcRoundedRectangleProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_XDim, double v5_YDim, double v6_RoundingRadius) : IfcRectangleProfileDef(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_XDim));set_attribute_value(4, (v5_YDim));set_attribute_value(5, (v6_RoundingRadius));; populate_derived(); }

// Function implementations for IfcSIUnit
boost::optional< ::Ifc4x3_tc1::IfcSIPrefix::Value > Ifc4x3_tc1::IfcSIUnit::Prefix() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSIPrefix::FromString(data_.get_attribute_value(2)); }
void Ifc4x3_tc1::IfcSIUnit::setPrefix(boost::optional< ::Ifc4x3_tc1::IfcSIPrefix::Value > v) { if (v) {set_attribute_value(2, EnumerationReference(&::Ifc4x3_tc1::IfcSIPrefix::Class(), (size_t) *v));} else {unset_attribute_value(2);} }
::Ifc4x3_tc1::IfcSIUnitName::Value Ifc4x3_tc1::IfcSIUnit::Name() const {  return ::Ifc4x3_tc1::IfcSIUnitName::FromString(data_.get_attribute_value(3)); }
void Ifc4x3_tc1::IfcSIUnit::setName(::Ifc4x3_tc1::IfcSIUnitName::Value v) { set_attribute_value(3, EnumerationReference(&::Ifc4x3_tc1::IfcSIUnitName::Class(), (size_t) v));if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcSIUnit::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1022]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSIUnit::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1022]); }
Ifc4x3_tc1::IfcSIUnit::IfcSIUnit(IfcEntityInstanceData&& e) : IfcNamedUnit(std::move(e)) { }
Ifc4x3_tc1::IfcSIUnit::IfcSIUnit(::Ifc4x3_tc1::IfcUnitEnum::Value v2_UnitType, boost::optional< ::Ifc4x3_tc1::IfcSIPrefix::Value > v3_Prefix, ::Ifc4x3_tc1::IfcSIUnitName::Value v4_Name) : IfcNamedUnit(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcUnitEnum::Class(),(size_t)v2_UnitType))); if (v3_Prefix) {set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcSIPrefix::Class(),(size_t)*v3_Prefix))); }set_attribute_value(3, (EnumerationReference(&::Ifc4x3_tc1::IfcSIUnitName::Class(),(size_t)v4_Name)));; populate_derived(); }

// Function implementations for IfcSanitaryTerminal
boost::optional< ::Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Value > Ifc4x3_tc1::IfcSanitaryTerminal::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcSanitaryTerminal::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSanitaryTerminal::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[977]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSanitaryTerminal::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[977]); }
Ifc4x3_tc1::IfcSanitaryTerminal::IfcSanitaryTerminal(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcSanitaryTerminal::IfcSanitaryTerminal(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcSanitaryTerminalType
::Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Value Ifc4x3_tc1::IfcSanitaryTerminalType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcSanitaryTerminalType::setPredefinedType(::Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcSanitaryTerminalType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[978]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSanitaryTerminalType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[978]); }
Ifc4x3_tc1::IfcSanitaryTerminalType::IfcSanitaryTerminalType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcSanitaryTerminalType::IfcSanitaryTerminalType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcSanitaryTerminalTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcSchedulingTime
boost::optional< std::string > Ifc4x3_tc1::IfcSchedulingTime::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcSchedulingTime::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< ::Ifc4x3_tc1::IfcDataOriginEnum::Value > Ifc4x3_tc1::IfcSchedulingTime::DataOrigin() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcDataOriginEnum::FromString(data_.get_attribute_value(1)); }
void Ifc4x3_tc1::IfcSchedulingTime::setDataOrigin(boost::optional< ::Ifc4x3_tc1::IfcDataOriginEnum::Value > v) { if (v) {set_attribute_value(1, EnumerationReference(&::Ifc4x3_tc1::IfcDataOriginEnum::Class(), (size_t) *v));} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcSchedulingTime::UserDefinedDataOrigin() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcSchedulingTime::setUserDefinedDataOrigin(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSchedulingTime::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[980]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSchedulingTime::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[980]); }
Ifc4x3_tc1::IfcSchedulingTime::IfcSchedulingTime(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcSchedulingTime::IfcSchedulingTime(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_tc1::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(3))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_DataOrigin) {set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcDataOriginEnum::Class(),(size_t)*v2_DataOrigin))); } if (v3_UserDefinedDataOrigin) {set_attribute_value(2, (*v3_UserDefinedDataOrigin)); }; populate_derived(); }

// Function implementations for IfcSeamCurve


const IfcParse::entity& Ifc4x3_tc1::IfcSeamCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[981]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSeamCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[981]); }
Ifc4x3_tc1::IfcSeamCurve::IfcSeamCurve(IfcEntityInstanceData&& e) : IfcSurfaceCurve(std::move(e)) { }
Ifc4x3_tc1::IfcSeamCurve::IfcSeamCurve(::Ifc4x3_tc1::IfcCurve* v1_Curve3D, aggregate_of< ::Ifc4x3_tc1::IfcPcurve >::ptr v2_AssociatedGeometry, ::Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Value v3_MasterRepresentation) : IfcSurfaceCurve(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Curve3D ? v1_Curve3D->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_AssociatedGeometry)->generalize());set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Class(),(size_t)v3_MasterRepresentation)));; populate_derived(); }

// Function implementations for IfcSecondOrderPolynomialSpiral
double Ifc4x3_tc1::IfcSecondOrderPolynomialSpiral::QuadraticTerm() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcSecondOrderPolynomialSpiral::setQuadraticTerm(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< double > Ifc4x3_tc1::IfcSecondOrderPolynomialSpiral::LinearTerm() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcSecondOrderPolynomialSpiral::setLinearTerm(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcSecondOrderPolynomialSpiral::ConstantTerm() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcSecondOrderPolynomialSpiral::setConstantTerm(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSecondOrderPolynomialSpiral::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[982]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSecondOrderPolynomialSpiral::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[982]); }
Ifc4x3_tc1::IfcSecondOrderPolynomialSpiral::IfcSecondOrderPolynomialSpiral(IfcEntityInstanceData&& e) : IfcSpiral(std::move(e)) { }
Ifc4x3_tc1::IfcSecondOrderPolynomialSpiral::IfcSecondOrderPolynomialSpiral(::Ifc4x3_tc1::IfcAxis2Placement* v1_Position, double v2_QuadraticTerm, boost::optional< double > v3_LinearTerm, boost::optional< double > v4_ConstantTerm) : IfcSpiral(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_QuadraticTerm)); if (v3_LinearTerm) {set_attribute_value(2, (*v3_LinearTerm)); } if (v4_ConstantTerm) {set_attribute_value(3, (*v4_ConstantTerm)); }; populate_derived(); }

// Function implementations for IfcSectionProperties
::Ifc4x3_tc1::IfcSectionTypeEnum::Value Ifc4x3_tc1::IfcSectionProperties::SectionType() const {  return ::Ifc4x3_tc1::IfcSectionTypeEnum::FromString(data_.get_attribute_value(0)); }
void Ifc4x3_tc1::IfcSectionProperties::setSectionType(::Ifc4x3_tc1::IfcSectionTypeEnum::Value v) { set_attribute_value(0, EnumerationReference(&::Ifc4x3_tc1::IfcSectionTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcProfileDef* Ifc4x3_tc1::IfcSectionProperties::StartProfile() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcProfileDef>(true); }
void Ifc4x3_tc1::IfcSectionProperties::setStartProfile(::Ifc4x3_tc1::IfcProfileDef* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcProfileDef* Ifc4x3_tc1::IfcSectionProperties::EndProfile() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcProfileDef>(true); }
void Ifc4x3_tc1::IfcSectionProperties::setEndProfile(::Ifc4x3_tc1::IfcProfileDef* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcSectionProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[989]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSectionProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[989]); }
Ifc4x3_tc1::IfcSectionProperties::IfcSectionProperties(IfcEntityInstanceData&& e) : IfcPreDefinedProperties(std::move(e)) { }
Ifc4x3_tc1::IfcSectionProperties::IfcSectionProperties(::Ifc4x3_tc1::IfcSectionTypeEnum::Value v1_SectionType, ::Ifc4x3_tc1::IfcProfileDef* v2_StartProfile, ::Ifc4x3_tc1::IfcProfileDef* v3_EndProfile) : IfcPreDefinedProperties(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcSectionTypeEnum::Class(),(size_t)v1_SectionType)));set_attribute_value(1, v2_StartProfile ? v2_StartProfile->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_EndProfile ? v3_EndProfile->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcSectionReinforcementProperties
double Ifc4x3_tc1::IfcSectionReinforcementProperties::LongitudinalStartPosition() const {  double v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcSectionReinforcementProperties::setLongitudinalStartPosition(double v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
double Ifc4x3_tc1::IfcSectionReinforcementProperties::LongitudinalEndPosition() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcSectionReinforcementProperties::setLongitudinalEndPosition(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< double > Ifc4x3_tc1::IfcSectionReinforcementProperties::TransversePosition() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcSectionReinforcementProperties::setTransversePosition(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
::Ifc4x3_tc1::IfcReinforcingBarRoleEnum::Value Ifc4x3_tc1::IfcSectionReinforcementProperties::ReinforcementRole() const {  return ::Ifc4x3_tc1::IfcReinforcingBarRoleEnum::FromString(data_.get_attribute_value(3)); }
void Ifc4x3_tc1::IfcSectionReinforcementProperties::setReinforcementRole(::Ifc4x3_tc1::IfcReinforcingBarRoleEnum::Value v) { set_attribute_value(3, EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingBarRoleEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(3); }
::Ifc4x3_tc1::IfcSectionProperties* Ifc4x3_tc1::IfcSectionReinforcementProperties::SectionDefinition() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcSectionProperties>(true); }
void Ifc4x3_tc1::IfcSectionReinforcementProperties::setSectionDefinition(::Ifc4x3_tc1::IfcSectionProperties* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
aggregate_of< ::Ifc4x3_tc1::IfcReinforcementBarProperties >::ptr Ifc4x3_tc1::IfcSectionReinforcementProperties::CrossSectionReinforcementDefinitions() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(5); return es->as< ::Ifc4x3_tc1::IfcReinforcementBarProperties >(); }
void Ifc4x3_tc1::IfcSectionReinforcementProperties::setCrossSectionReinforcementDefinitions(aggregate_of< ::Ifc4x3_tc1::IfcReinforcementBarProperties >::ptr v) { set_attribute_value(5, (v)->generalize());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcSectionReinforcementProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[990]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSectionReinforcementProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[990]); }
Ifc4x3_tc1::IfcSectionReinforcementProperties::IfcSectionReinforcementProperties(IfcEntityInstanceData&& e) : IfcPreDefinedProperties(std::move(e)) { }
Ifc4x3_tc1::IfcSectionReinforcementProperties::IfcSectionReinforcementProperties(double v1_LongitudinalStartPosition, double v2_LongitudinalEndPosition, boost::optional< double > v3_TransversePosition, ::Ifc4x3_tc1::IfcReinforcingBarRoleEnum::Value v4_ReinforcementRole, ::Ifc4x3_tc1::IfcSectionProperties* v5_SectionDefinition, aggregate_of< ::Ifc4x3_tc1::IfcReinforcementBarProperties >::ptr v6_CrossSectionReinforcementDefinitions) : IfcPreDefinedProperties(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_LongitudinalStartPosition));set_attribute_value(1, (v2_LongitudinalEndPosition)); if (v3_TransversePosition) {set_attribute_value(2, (*v3_TransversePosition)); }set_attribute_value(3, (EnumerationReference(&::Ifc4x3_tc1::IfcReinforcingBarRoleEnum::Class(),(size_t)v4_ReinforcementRole)));set_attribute_value(4, v5_SectionDefinition ? v5_SectionDefinition->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, (v6_CrossSectionReinforcementDefinitions)->generalize());; populate_derived(); }

// Function implementations for IfcSectionedSolid
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcSectionedSolid::Directrix() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcSectionedSolid::setDirectrix(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
aggregate_of< ::Ifc4x3_tc1::IfcProfileDef >::ptr Ifc4x3_tc1::IfcSectionedSolid::CrossSections() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcProfileDef >(); }
void Ifc4x3_tc1::IfcSectionedSolid::setCrossSections(aggregate_of< ::Ifc4x3_tc1::IfcProfileDef >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcSectionedSolid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[984]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSectionedSolid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[984]); }
Ifc4x3_tc1::IfcSectionedSolid::IfcSectionedSolid(IfcEntityInstanceData&& e) : IfcSolidModel(std::move(e)) { }
Ifc4x3_tc1::IfcSectionedSolid::IfcSectionedSolid(::Ifc4x3_tc1::IfcCurve* v1_Directrix, aggregate_of< ::Ifc4x3_tc1::IfcProfileDef >::ptr v2_CrossSections) : IfcSolidModel(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Directrix ? v1_Directrix->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_CrossSections)->generalize());; populate_derived(); }

// Function implementations for IfcSectionedSolidHorizontal
aggregate_of< ::Ifc4x3_tc1::IfcAxis2PlacementLinear >::ptr Ifc4x3_tc1::IfcSectionedSolidHorizontal::CrossSectionPositions() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcAxis2PlacementLinear >(); }
void Ifc4x3_tc1::IfcSectionedSolidHorizontal::setCrossSectionPositions(aggregate_of< ::Ifc4x3_tc1::IfcAxis2PlacementLinear >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcSectionedSolidHorizontal::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[985]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSectionedSolidHorizontal::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[985]); }
Ifc4x3_tc1::IfcSectionedSolidHorizontal::IfcSectionedSolidHorizontal(IfcEntityInstanceData&& e) : IfcSectionedSolid(std::move(e)) { }
Ifc4x3_tc1::IfcSectionedSolidHorizontal::IfcSectionedSolidHorizontal(::Ifc4x3_tc1::IfcCurve* v1_Directrix, aggregate_of< ::Ifc4x3_tc1::IfcProfileDef >::ptr v2_CrossSections, aggregate_of< ::Ifc4x3_tc1::IfcAxis2PlacementLinear >::ptr v3_CrossSectionPositions) : IfcSectionedSolid(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Directrix ? v1_Directrix->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_CrossSections)->generalize());set_attribute_value(2, (v3_CrossSectionPositions)->generalize());; populate_derived(); }

// Function implementations for IfcSectionedSpine
::Ifc4x3_tc1::IfcCompositeCurve* Ifc4x3_tc1::IfcSectionedSpine::SpineCurve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCompositeCurve>(true); }
void Ifc4x3_tc1::IfcSectionedSpine::setSpineCurve(::Ifc4x3_tc1::IfcCompositeCurve* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
aggregate_of< ::Ifc4x3_tc1::IfcProfileDef >::ptr Ifc4x3_tc1::IfcSectionedSpine::CrossSections() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcProfileDef >(); }
void Ifc4x3_tc1::IfcSectionedSpine::setCrossSections(aggregate_of< ::Ifc4x3_tc1::IfcProfileDef >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }
aggregate_of< ::Ifc4x3_tc1::IfcAxis2Placement3D >::ptr Ifc4x3_tc1::IfcSectionedSpine::CrossSectionPositions() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcAxis2Placement3D >(); }
void Ifc4x3_tc1::IfcSectionedSpine::setCrossSectionPositions(aggregate_of< ::Ifc4x3_tc1::IfcAxis2Placement3D >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcSectionedSpine::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[986]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSectionedSpine::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[986]); }
Ifc4x3_tc1::IfcSectionedSpine::IfcSectionedSpine(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcSectionedSpine::IfcSectionedSpine(::Ifc4x3_tc1::IfcCompositeCurve* v1_SpineCurve, aggregate_of< ::Ifc4x3_tc1::IfcProfileDef >::ptr v2_CrossSections, aggregate_of< ::Ifc4x3_tc1::IfcAxis2Placement3D >::ptr v3_CrossSectionPositions) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_SpineCurve ? v1_SpineCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_CrossSections)->generalize());set_attribute_value(2, (v3_CrossSectionPositions)->generalize());; populate_derived(); }

// Function implementations for IfcSectionedSurface
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcSectionedSurface::Directrix() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcSectionedSurface::setDirectrix(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
aggregate_of< ::Ifc4x3_tc1::IfcAxis2PlacementLinear >::ptr Ifc4x3_tc1::IfcSectionedSurface::CrossSectionPositions() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcAxis2PlacementLinear >(); }
void Ifc4x3_tc1::IfcSectionedSurface::setCrossSectionPositions(aggregate_of< ::Ifc4x3_tc1::IfcAxis2PlacementLinear >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }
aggregate_of< ::Ifc4x3_tc1::IfcProfileDef >::ptr Ifc4x3_tc1::IfcSectionedSurface::CrossSections() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcProfileDef >(); }
void Ifc4x3_tc1::IfcSectionedSurface::setCrossSections(aggregate_of< ::Ifc4x3_tc1::IfcProfileDef >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcSectionedSurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[987]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSectionedSurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[987]); }
Ifc4x3_tc1::IfcSectionedSurface::IfcSectionedSurface(IfcEntityInstanceData&& e) : IfcSurface(std::move(e)) { }
Ifc4x3_tc1::IfcSectionedSurface::IfcSectionedSurface(::Ifc4x3_tc1::IfcCurve* v1_Directrix, aggregate_of< ::Ifc4x3_tc1::IfcAxis2PlacementLinear >::ptr v2_CrossSectionPositions, aggregate_of< ::Ifc4x3_tc1::IfcProfileDef >::ptr v3_CrossSections) : IfcSurface(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Directrix ? v1_Directrix->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_CrossSectionPositions)->generalize());set_attribute_value(2, (v3_CrossSections)->generalize());; populate_derived(); }

// Function implementations for IfcSegment
::Ifc4x3_tc1::IfcTransitionCode::Value Ifc4x3_tc1::IfcSegment::Transition() const {  return ::Ifc4x3_tc1::IfcTransitionCode::FromString(data_.get_attribute_value(0)); }
void Ifc4x3_tc1::IfcSegment::setTransition(::Ifc4x3_tc1::IfcTransitionCode::Value v) { set_attribute_value(0, EnumerationReference(&::Ifc4x3_tc1::IfcTransitionCode::Class(), (size_t) v));if constexpr (false)unset_attribute_value(0); }

::Ifc4x3_tc1::IfcCompositeCurve::list::ptr Ifc4x3_tc1::IfcSegment::UsingCurves() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[192], 0)->as<IfcCompositeCurve>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcSegment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[992]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSegment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[992]); }
Ifc4x3_tc1::IfcSegment::IfcSegment(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcSegment::IfcSegment(::Ifc4x3_tc1::IfcTransitionCode::Value v1_Transition) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcTransitionCode::Class(),(size_t)v1_Transition)));; populate_derived(); }

// Function implementations for IfcSegmentedReferenceCurve
::Ifc4x3_tc1::IfcBoundedCurve* Ifc4x3_tc1::IfcSegmentedReferenceCurve::BaseCurve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcBoundedCurve>(true); }
void Ifc4x3_tc1::IfcSegmentedReferenceCurve::setBaseCurve(::Ifc4x3_tc1::IfcBoundedCurve* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcPlacement* Ifc4x3_tc1::IfcSegmentedReferenceCurve::EndPoint() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcPlacement>(true); }
void Ifc4x3_tc1::IfcSegmentedReferenceCurve::setEndPoint(::Ifc4x3_tc1::IfcPlacement* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcSegmentedReferenceCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[993]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSegmentedReferenceCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[993]); }
Ifc4x3_tc1::IfcSegmentedReferenceCurve::IfcSegmentedReferenceCurve(IfcEntityInstanceData&& e) : IfcCompositeCurve(std::move(e)) { }
Ifc4x3_tc1::IfcSegmentedReferenceCurve::IfcSegmentedReferenceCurve(aggregate_of< ::Ifc4x3_tc1::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect, ::Ifc4x3_tc1::IfcBoundedCurve* v3_BaseCurve, ::Ifc4x3_tc1::IfcPlacement* v4_EndPoint) : IfcCompositeCurve(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, (v1_Segments)->generalize());set_attribute_value(1, (v2_SelfIntersect));set_attribute_value(2, v3_BaseCurve ? v3_BaseCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_EndPoint ? v4_EndPoint->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcSensor
boost::optional< ::Ifc4x3_tc1::IfcSensorTypeEnum::Value > Ifc4x3_tc1::IfcSensor::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSensorTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcSensor::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSensorTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcSensorTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSensor::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[995]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSensor::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[995]); }
Ifc4x3_tc1::IfcSensor::IfcSensor(IfcEntityInstanceData&& e) : IfcDistributionControlElement(std::move(e)) { }
Ifc4x3_tc1::IfcSensor::IfcSensor(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcSensorTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcSensorTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcSensorType
::Ifc4x3_tc1::IfcSensorTypeEnum::Value Ifc4x3_tc1::IfcSensorType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcSensorTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcSensorType::setPredefinedType(::Ifc4x3_tc1::IfcSensorTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcSensorTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcSensorType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[996]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSensorType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[996]); }
Ifc4x3_tc1::IfcSensorType::IfcSensorType(IfcEntityInstanceData&& e) : IfcDistributionControlElementType(std::move(e)) { }
Ifc4x3_tc1::IfcSensorType::IfcSensorType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcSensorTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcSensorTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcSeventhOrderPolynomialSpiral
double Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::SepticTerm() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::setSepticTerm(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< double > Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::SexticTerm() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::setSexticTerm(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::QuinticTerm() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::setQuinticTerm(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< double > Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::QuarticTerm() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::setQuarticTerm(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< double > Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::CubicTerm() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::setCubicTerm(boost::optional< double > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< double > Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::QuadraticTerm() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::setQuadraticTerm(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< double > Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::LinearTerm() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::setLinearTerm(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< double > Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::ConstantTerm() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::setConstantTerm(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[999]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[999]); }
Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::IfcSeventhOrderPolynomialSpiral(IfcEntityInstanceData&& e) : IfcSpiral(std::move(e)) { }
Ifc4x3_tc1::IfcSeventhOrderPolynomialSpiral::IfcSeventhOrderPolynomialSpiral(::Ifc4x3_tc1::IfcAxis2Placement* v1_Position, double v2_SepticTerm, boost::optional< double > v3_SexticTerm, boost::optional< double > v4_QuinticTerm, boost::optional< double > v5_QuarticTerm, boost::optional< double > v6_CubicTerm, boost::optional< double > v7_QuadraticTerm, boost::optional< double > v8_LinearTerm, boost::optional< double > v9_ConstantTerm) : IfcSpiral(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_SepticTerm)); if (v3_SexticTerm) {set_attribute_value(2, (*v3_SexticTerm)); } if (v4_QuinticTerm) {set_attribute_value(3, (*v4_QuinticTerm)); } if (v5_QuarticTerm) {set_attribute_value(4, (*v5_QuarticTerm)); } if (v6_CubicTerm) {set_attribute_value(5, (*v6_CubicTerm)); } if (v7_QuadraticTerm) {set_attribute_value(6, (*v7_QuadraticTerm)); } if (v8_LinearTerm) {set_attribute_value(7, (*v8_LinearTerm)); } if (v9_ConstantTerm) {set_attribute_value(8, (*v9_ConstantTerm)); }; populate_derived(); }

// Function implementations for IfcShadingDevice
boost::optional< ::Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Value > Ifc4x3_tc1::IfcShadingDevice::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcShadingDeviceTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcShadingDevice::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcShadingDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1000]); }
const IfcParse::entity& Ifc4x3_tc1::IfcShadingDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1000]); }
Ifc4x3_tc1::IfcShadingDevice::IfcShadingDevice(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcShadingDevice::IfcShadingDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcShadingDeviceType
::Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Value Ifc4x3_tc1::IfcShadingDeviceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcShadingDeviceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcShadingDeviceType::setPredefinedType(::Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcShadingDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1001]); }
const IfcParse::entity& Ifc4x3_tc1::IfcShadingDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1001]); }
Ifc4x3_tc1::IfcShadingDeviceType::IfcShadingDeviceType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcShadingDeviceType::IfcShadingDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcShadingDeviceTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcShapeAspect
aggregate_of< ::Ifc4x3_tc1::IfcShapeModel >::ptr Ifc4x3_tc1::IfcShapeAspect::ShapeRepresentations() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcShapeModel >(); }
void Ifc4x3_tc1::IfcShapeAspect::setShapeRepresentations(aggregate_of< ::Ifc4x3_tc1::IfcShapeModel >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcShapeAspect::Name() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcShapeAspect::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcShapeAspect::Description() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcShapeAspect::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::logic::tribool Ifc4x3_tc1::IfcShapeAspect::ProductDefinitional() const {  boost::logic::tribool v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcShapeAspect::setProductDefinitional(boost::logic::tribool v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
::Ifc4x3_tc1::IfcProductRepresentationSelect* Ifc4x3_tc1::IfcShapeAspect::PartOfProductDefinitionShape() const { if(data_.get_attribute_value(4).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcProductRepresentationSelect>(true); }
void Ifc4x3_tc1::IfcShapeAspect::setPartOfProductDefinitionShape(::Ifc4x3_tc1::IfcProductRepresentationSelect* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }

::Ifc4x3_tc1::IfcExternalReferenceRelationship::list::ptr Ifc4x3_tc1::IfcShapeAspect::HasExternalReferences() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[427], 3)->as<IfcExternalReferenceRelationship>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcShapeAspect::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1003]); }
const IfcParse::entity& Ifc4x3_tc1::IfcShapeAspect::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1003]); }
Ifc4x3_tc1::IfcShapeAspect::IfcShapeAspect(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcShapeAspect::IfcShapeAspect(aggregate_of< ::Ifc4x3_tc1::IfcShapeModel >::ptr v1_ShapeRepresentations, boost::optional< std::string > v2_Name, boost::optional< std::string > v3_Description, boost::logic::tribool v4_ProductDefinitional, ::Ifc4x3_tc1::IfcProductRepresentationSelect* v5_PartOfProductDefinitionShape) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_ShapeRepresentations)->generalize()); if (v2_Name) {set_attribute_value(1, (*v2_Name)); } if (v3_Description) {set_attribute_value(2, (*v3_Description)); }set_attribute_value(3, (v4_ProductDefinitional));set_attribute_value(4, v5_PartOfProductDefinitionShape ? v5_PartOfProductDefinitionShape->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcShapeModel

::Ifc4x3_tc1::IfcShapeAspect::list::ptr Ifc4x3_tc1::IfcShapeModel::OfShapeAspect() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[1003], 0)->as<IfcShapeAspect>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcShapeModel::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1004]); }
const IfcParse::entity& Ifc4x3_tc1::IfcShapeModel::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1004]); }
Ifc4x3_tc1::IfcShapeModel::IfcShapeModel(IfcEntityInstanceData&& e) : IfcRepresentation(std::move(e)) { }
Ifc4x3_tc1::IfcShapeModel::IfcShapeModel(::Ifc4x3_tc1::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_tc1::IfcRepresentationItem >::ptr v4_Items) : IfcRepresentation(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_ContextOfItems ? v1_ContextOfItems->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_RepresentationIdentifier) {set_attribute_value(1, (*v2_RepresentationIdentifier)); } if (v3_RepresentationType) {set_attribute_value(2, (*v3_RepresentationType)); }set_attribute_value(3, (v4_Items)->generalize());; populate_derived(); }

// Function implementations for IfcShapeRepresentation


const IfcParse::entity& Ifc4x3_tc1::IfcShapeRepresentation::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1005]); }
const IfcParse::entity& Ifc4x3_tc1::IfcShapeRepresentation::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1005]); }
Ifc4x3_tc1::IfcShapeRepresentation::IfcShapeRepresentation(IfcEntityInstanceData&& e) : IfcShapeModel(std::move(e)) { }
Ifc4x3_tc1::IfcShapeRepresentation::IfcShapeRepresentation(::Ifc4x3_tc1::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_tc1::IfcRepresentationItem >::ptr v4_Items) : IfcShapeModel(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_ContextOfItems ? v1_ContextOfItems->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_RepresentationIdentifier) {set_attribute_value(1, (*v2_RepresentationIdentifier)); } if (v3_RepresentationType) {set_attribute_value(2, (*v3_RepresentationType)); }set_attribute_value(3, (v4_Items)->generalize());; populate_derived(); }

// Function implementations for IfcShellBasedSurfaceModel
aggregate_of< ::Ifc4x3_tc1::IfcShell >::ptr Ifc4x3_tc1::IfcShellBasedSurfaceModel::SbsmBoundary() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcShell >(); }
void Ifc4x3_tc1::IfcShellBasedSurfaceModel::setSbsmBoundary(aggregate_of< ::Ifc4x3_tc1::IfcShell >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcShellBasedSurfaceModel::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1008]); }
const IfcParse::entity& Ifc4x3_tc1::IfcShellBasedSurfaceModel::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1008]); }
Ifc4x3_tc1::IfcShellBasedSurfaceModel::IfcShellBasedSurfaceModel(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcShellBasedSurfaceModel::IfcShellBasedSurfaceModel(aggregate_of< ::Ifc4x3_tc1::IfcShell >::ptr v1_SbsmBoundary) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_SbsmBoundary)->generalize());; populate_derived(); }

// Function implementations for IfcSign
boost::optional< ::Ifc4x3_tc1::IfcSignTypeEnum::Value > Ifc4x3_tc1::IfcSign::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSignTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcSign::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSignTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcSignTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSign::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1009]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSign::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1009]); }
Ifc4x3_tc1::IfcSign::IfcSign(IfcEntityInstanceData&& e) : IfcElementComponent(std::move(e)) { }
Ifc4x3_tc1::IfcSign::IfcSign(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcSignTypeEnum::Value > v9_PredefinedType) : IfcElementComponent(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcSignTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcSignType
::Ifc4x3_tc1::IfcSignTypeEnum::Value Ifc4x3_tc1::IfcSignType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcSignTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcSignType::setPredefinedType(::Ifc4x3_tc1::IfcSignTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcSignTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcSignType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1013]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSignType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1013]); }
Ifc4x3_tc1::IfcSignType::IfcSignType(IfcEntityInstanceData&& e) : IfcElementComponentType(std::move(e)) { }
Ifc4x3_tc1::IfcSignType::IfcSignType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcSignTypeEnum::Value v10_PredefinedType) : IfcElementComponentType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcSignTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcSignal
boost::optional< ::Ifc4x3_tc1::IfcSignalTypeEnum::Value > Ifc4x3_tc1::IfcSignal::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSignalTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcSignal::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSignalTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcSignalTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSignal::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1010]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSignal::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1010]); }
Ifc4x3_tc1::IfcSignal::IfcSignal(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcSignal::IfcSignal(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcSignalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcSignalTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcSignalType
::Ifc4x3_tc1::IfcSignalTypeEnum::Value Ifc4x3_tc1::IfcSignalType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcSignalTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcSignalType::setPredefinedType(::Ifc4x3_tc1::IfcSignalTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcSignalTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcSignalType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1011]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSignalType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1011]); }
Ifc4x3_tc1::IfcSignalType::IfcSignalType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcSignalType::IfcSignalType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcSignalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcSignalTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcSimpleProperty


const IfcParse::entity& Ifc4x3_tc1::IfcSimpleProperty::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1015]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSimpleProperty::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1015]); }
Ifc4x3_tc1::IfcSimpleProperty::IfcSimpleProperty(IfcEntityInstanceData&& e) : IfcProperty(std::move(e)) { }
Ifc4x3_tc1::IfcSimpleProperty::IfcSimpleProperty(std::string v1_Name, boost::optional< std::string > v2_Specification) : IfcProperty(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_Name)); if (v2_Specification) {set_attribute_value(1, (*v2_Specification)); }; populate_derived(); }

// Function implementations for IfcSimplePropertyTemplate
boost::optional< ::Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::Value > Ifc4x3_tc1::IfcSimplePropertyTemplate::TemplateType() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::FromString(data_.get_attribute_value(4)); }
void Ifc4x3_tc1::IfcSimplePropertyTemplate::setTemplateType(boost::optional< ::Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::Value > v) { if (v) {set_attribute_value(4, EnumerationReference(&::Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcSimplePropertyTemplate::PrimaryMeasureType() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcSimplePropertyTemplate::setPrimaryMeasureType(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcSimplePropertyTemplate::SecondaryMeasureType() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcSimplePropertyTemplate::setSecondaryMeasureType(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
::Ifc4x3_tc1::IfcPropertyEnumeration* Ifc4x3_tc1::IfcSimplePropertyTemplate::Enumerators() const { if(data_.get_attribute_value(7).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(7)))->as<::Ifc4x3_tc1::IfcPropertyEnumeration>(true); }
void Ifc4x3_tc1::IfcSimplePropertyTemplate::setEnumerators(::Ifc4x3_tc1::IfcPropertyEnumeration* v) { set_attribute_value(7, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(7); }
::Ifc4x3_tc1::IfcUnit* Ifc4x3_tc1::IfcSimplePropertyTemplate::PrimaryUnit() const { if(data_.get_attribute_value(8).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(8)))->as<::Ifc4x3_tc1::IfcUnit>(true); }
void Ifc4x3_tc1::IfcSimplePropertyTemplate::setPrimaryUnit(::Ifc4x3_tc1::IfcUnit* v) { set_attribute_value(8, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(8); }
::Ifc4x3_tc1::IfcUnit* Ifc4x3_tc1::IfcSimplePropertyTemplate::SecondaryUnit() const { if(data_.get_attribute_value(9).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(9)))->as<::Ifc4x3_tc1::IfcUnit>(true); }
void Ifc4x3_tc1::IfcSimplePropertyTemplate::setSecondaryUnit(::Ifc4x3_tc1::IfcUnit* v) { set_attribute_value(9, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(9); }
boost::optional< std::string > Ifc4x3_tc1::IfcSimplePropertyTemplate::Expression() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcSimplePropertyTemplate::setExpression(boost::optional< std::string > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< ::Ifc4x3_tc1::IfcStateEnum::Value > Ifc4x3_tc1::IfcSimplePropertyTemplate::AccessState() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcStateEnum::FromString(data_.get_attribute_value(11)); }
void Ifc4x3_tc1::IfcSimplePropertyTemplate::setAccessState(boost::optional< ::Ifc4x3_tc1::IfcStateEnum::Value > v) { if (v) {set_attribute_value(11, EnumerationReference(&::Ifc4x3_tc1::IfcStateEnum::Class(), (size_t) *v));} else {unset_attribute_value(11);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSimplePropertyTemplate::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1016]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSimplePropertyTemplate::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1016]); }
Ifc4x3_tc1::IfcSimplePropertyTemplate::IfcSimplePropertyTemplate(IfcEntityInstanceData&& e) : IfcPropertyTemplate(std::move(e)) { }
Ifc4x3_tc1::IfcSimplePropertyTemplate::IfcSimplePropertyTemplate(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< ::Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::Value > v5_TemplateType, boost::optional< std::string > v6_PrimaryMeasureType, boost::optional< std::string > v7_SecondaryMeasureType, ::Ifc4x3_tc1::IfcPropertyEnumeration* v8_Enumerators, ::Ifc4x3_tc1::IfcUnit* v9_PrimaryUnit, ::Ifc4x3_tc1::IfcUnit* v10_SecondaryUnit, boost::optional< std::string > v11_Expression, boost::optional< ::Ifc4x3_tc1::IfcStateEnum::Value > v12_AccessState) : IfcPropertyTemplate(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_TemplateType) {set_attribute_value(4, (EnumerationReference(&::Ifc4x3_tc1::IfcSimplePropertyTemplateTypeEnum::Class(),(size_t)*v5_TemplateType))); } if (v6_PrimaryMeasureType) {set_attribute_value(5, (*v6_PrimaryMeasureType)); } if (v7_SecondaryMeasureType) {set_attribute_value(6, (*v7_SecondaryMeasureType)); }set_attribute_value(7, v8_Enumerators ? v8_Enumerators->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, v9_PrimaryUnit ? v9_PrimaryUnit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(9, v10_SecondaryUnit ? v10_SecondaryUnit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v11_Expression) {set_attribute_value(10, (*v11_Expression)); } if (v12_AccessState) {set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcStateEnum::Class(),(size_t)*v12_AccessState))); }; populate_derived(); }

// Function implementations for IfcSineSpiral
double Ifc4x3_tc1::IfcSineSpiral::SineTerm() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcSineSpiral::setSineTerm(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< double > Ifc4x3_tc1::IfcSineSpiral::LinearTerm() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcSineSpiral::setLinearTerm(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcSineSpiral::ConstantTerm() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcSineSpiral::setConstantTerm(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSineSpiral::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1019]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSineSpiral::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1019]); }
Ifc4x3_tc1::IfcSineSpiral::IfcSineSpiral(IfcEntityInstanceData&& e) : IfcSpiral(std::move(e)) { }
Ifc4x3_tc1::IfcSineSpiral::IfcSineSpiral(::Ifc4x3_tc1::IfcAxis2Placement* v1_Position, double v2_SineTerm, boost::optional< double > v3_LinearTerm, boost::optional< double > v4_ConstantTerm) : IfcSpiral(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_SineTerm)); if (v3_LinearTerm) {set_attribute_value(2, (*v3_LinearTerm)); } if (v4_ConstantTerm) {set_attribute_value(3, (*v4_ConstantTerm)); }; populate_derived(); }

// Function implementations for IfcSite
boost::optional< std::vector< int > /*[3:4]*/ > Ifc4x3_tc1::IfcSite::RefLatitude() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } std::vector< int > /*[3:4]*/ v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcSite::setRefLatitude(boost::optional< std::vector< int > /*[3:4]*/ > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< std::vector< int > /*[3:4]*/ > Ifc4x3_tc1::IfcSite::RefLongitude() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } std::vector< int > /*[3:4]*/ v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcSite::setRefLongitude(boost::optional< std::vector< int > /*[3:4]*/ > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< double > Ifc4x3_tc1::IfcSite::RefElevation() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcSite::setRefElevation(boost::optional< double > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< std::string > Ifc4x3_tc1::IfcSite::LandTitleNumber() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcSite::setLandTitleNumber(boost::optional< std::string > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }
::Ifc4x3_tc1::IfcPostalAddress* Ifc4x3_tc1::IfcSite::SiteAddress() const { if(data_.get_attribute_value(13).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(13)))->as<::Ifc4x3_tc1::IfcPostalAddress>(true); }
void Ifc4x3_tc1::IfcSite::setSiteAddress(::Ifc4x3_tc1::IfcPostalAddress* v) { set_attribute_value(13, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(13); }


const IfcParse::entity& Ifc4x3_tc1::IfcSite::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1021]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSite::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1021]); }
Ifc4x3_tc1::IfcSite::IfcSite(IfcEntityInstanceData&& e) : IfcSpatialStructureElement(std::move(e)) { }
Ifc4x3_tc1::IfcSite::IfcSite(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< std::vector< int > /*[3:4]*/ > v10_RefLatitude, boost::optional< std::vector< int > /*[3:4]*/ > v11_RefLongitude, boost::optional< double > v12_RefElevation, boost::optional< std::string > v13_LandTitleNumber, ::Ifc4x3_tc1::IfcPostalAddress* v14_SiteAddress) : IfcSpatialStructureElement(IfcEntityInstanceData(storage_t(14))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); } if (v10_RefLatitude) {set_attribute_value(9, (*v10_RefLatitude)); } if (v11_RefLongitude) {set_attribute_value(10, (*v11_RefLongitude)); } if (v12_RefElevation) {set_attribute_value(11, (*v12_RefElevation)); } if (v13_LandTitleNumber) {set_attribute_value(12, (*v13_LandTitleNumber)); }set_attribute_value(13, v14_SiteAddress ? v14_SiteAddress->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcSlab
boost::optional< ::Ifc4x3_tc1::IfcSlabTypeEnum::Value > Ifc4x3_tc1::IfcSlab::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSlabTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcSlab::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSlabTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcSlabTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSlab::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1025]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSlab::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1025]); }
Ifc4x3_tc1::IfcSlab::IfcSlab(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcSlab::IfcSlab(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcSlabTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcSlabTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcSlabType
::Ifc4x3_tc1::IfcSlabTypeEnum::Value Ifc4x3_tc1::IfcSlabType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcSlabTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcSlabType::setPredefinedType(::Ifc4x3_tc1::IfcSlabTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcSlabTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcSlabType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1026]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSlabType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1026]); }
Ifc4x3_tc1::IfcSlabType::IfcSlabType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcSlabType::IfcSlabType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcSlabTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcSlabTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcSlippageConnectionCondition
boost::optional< double > Ifc4x3_tc1::IfcSlippageConnectionCondition::SlippageX() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcSlippageConnectionCondition::setSlippageX(boost::optional< double > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< double > Ifc4x3_tc1::IfcSlippageConnectionCondition::SlippageY() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcSlippageConnectionCondition::setSlippageY(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcSlippageConnectionCondition::SlippageZ() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcSlippageConnectionCondition::setSlippageZ(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSlippageConnectionCondition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1028]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSlippageConnectionCondition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1028]); }
Ifc4x3_tc1::IfcSlippageConnectionCondition::IfcSlippageConnectionCondition(IfcEntityInstanceData&& e) : IfcStructuralConnectionCondition(std::move(e)) { }
Ifc4x3_tc1::IfcSlippageConnectionCondition::IfcSlippageConnectionCondition(boost::optional< std::string > v1_Name, boost::optional< double > v2_SlippageX, boost::optional< double > v3_SlippageY, boost::optional< double > v4_SlippageZ) : IfcStructuralConnectionCondition(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_SlippageX) {set_attribute_value(1, (*v2_SlippageX)); } if (v3_SlippageY) {set_attribute_value(2, (*v3_SlippageY)); } if (v4_SlippageZ) {set_attribute_value(3, (*v4_SlippageZ)); }; populate_derived(); }

// Function implementations for IfcSolarDevice
boost::optional< ::Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Value > Ifc4x3_tc1::IfcSolarDevice::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSolarDeviceTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcSolarDevice::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSolarDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1029]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSolarDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1029]); }
Ifc4x3_tc1::IfcSolarDevice::IfcSolarDevice(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcSolarDevice::IfcSolarDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcSolarDeviceType
::Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Value Ifc4x3_tc1::IfcSolarDeviceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcSolarDeviceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcSolarDeviceType::setPredefinedType(::Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcSolarDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1030]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSolarDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1030]); }
Ifc4x3_tc1::IfcSolarDeviceType::IfcSolarDeviceType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcSolarDeviceType::IfcSolarDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcSolarDeviceTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcSolidModel


const IfcParse::entity& Ifc4x3_tc1::IfcSolidModel::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1033]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSolidModel::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1033]); }
Ifc4x3_tc1::IfcSolidModel::IfcSolidModel(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcSolidModel::IfcSolidModel() : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcSpace
boost::optional< ::Ifc4x3_tc1::IfcSpaceTypeEnum::Value > Ifc4x3_tc1::IfcSpace::PredefinedType() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSpaceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcSpace::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSpaceTypeEnum::Value > v) { if (v) {set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcSpaceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(9);} }
boost::optional< double > Ifc4x3_tc1::IfcSpace::ElevationWithFlooring() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcSpace::setElevationWithFlooring(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }

::Ifc4x3_tc1::IfcRelCoversSpaces::list::ptr Ifc4x3_tc1::IfcSpace::HasCoverings() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[926], 4)->as<IfcRelCoversSpaces>(); }
::Ifc4x3_tc1::IfcRelSpaceBoundary::list::ptr Ifc4x3_tc1::IfcSpace::BoundedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[943], 4)->as<IfcRelSpaceBoundary>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcSpace::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1039]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSpace::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1039]); }
Ifc4x3_tc1::IfcSpace::IfcSpace(IfcEntityInstanceData&& e) : IfcSpatialStructureElement(std::move(e)) { }
Ifc4x3_tc1::IfcSpace::IfcSpace(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_tc1::IfcSpaceTypeEnum::Value > v10_PredefinedType, boost::optional< double > v11_ElevationWithFlooring) : IfcSpatialStructureElement(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); } if (v10_PredefinedType) {set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcSpaceTypeEnum::Class(),(size_t)*v10_PredefinedType))); } if (v11_ElevationWithFlooring) {set_attribute_value(10, (*v11_ElevationWithFlooring)); }; populate_derived(); }

// Function implementations for IfcSpaceHeater
boost::optional< ::Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Value > Ifc4x3_tc1::IfcSpaceHeater::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcSpaceHeater::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSpaceHeater::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1041]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSpaceHeater::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1041]); }
Ifc4x3_tc1::IfcSpaceHeater::IfcSpaceHeater(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcSpaceHeater::IfcSpaceHeater(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcSpaceHeaterType
::Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Value Ifc4x3_tc1::IfcSpaceHeaterType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcSpaceHeaterType::setPredefinedType(::Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcSpaceHeaterType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1042]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSpaceHeaterType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1042]); }
Ifc4x3_tc1::IfcSpaceHeaterType::IfcSpaceHeaterType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcSpaceHeaterType::IfcSpaceHeaterType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcSpaceHeaterTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcSpaceType
::Ifc4x3_tc1::IfcSpaceTypeEnum::Value Ifc4x3_tc1::IfcSpaceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcSpaceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcSpaceType::setPredefinedType(::Ifc4x3_tc1::IfcSpaceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcSpaceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }
boost::optional< std::string > Ifc4x3_tc1::IfcSpaceType::LongName() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcSpaceType::setLongName(boost::optional< std::string > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSpaceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1044]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSpaceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1044]); }
Ifc4x3_tc1::IfcSpaceType::IfcSpaceType(IfcEntityInstanceData&& e) : IfcSpatialStructureElementType(std::move(e)) { }
Ifc4x3_tc1::IfcSpaceType::IfcSpaceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcSpaceTypeEnum::Value v10_PredefinedType, boost::optional< std::string > v11_LongName) : IfcSpatialStructureElementType(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcSpaceTypeEnum::Class(),(size_t)v10_PredefinedType))); if (v11_LongName) {set_attribute_value(10, (*v11_LongName)); }; populate_derived(); }

// Function implementations for IfcSpatialElement
boost::optional< std::string > Ifc4x3_tc1::IfcSpatialElement::LongName() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcSpatialElement::setLongName(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }

::Ifc4x3_tc1::IfcRelContainedInSpatialStructure::list::ptr Ifc4x3_tc1::IfcSpatialElement::ContainsElements() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[924], 5)->as<IfcRelContainedInSpatialStructure>(); }
::Ifc4x3_tc1::IfcRelServicesBuildings::list::ptr Ifc4x3_tc1::IfcSpatialElement::ServicedBySystems() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[942], 5)->as<IfcRelServicesBuildings>(); }
::Ifc4x3_tc1::IfcRelReferencedInSpatialStructure::list::ptr Ifc4x3_tc1::IfcSpatialElement::ReferencesElements() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[940], 5)->as<IfcRelReferencedInSpatialStructure>(); }
::Ifc4x3_tc1::IfcRelInterferesElements::list::ptr Ifc4x3_tc1::IfcSpatialElement::IsInterferedByElements() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[936], 5)->as<IfcRelInterferesElements>(); }
::Ifc4x3_tc1::IfcRelInterferesElements::list::ptr Ifc4x3_tc1::IfcSpatialElement::InterferesElements() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[936], 4)->as<IfcRelInterferesElements>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcSpatialElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1046]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSpatialElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1046]); }
Ifc4x3_tc1::IfcSpatialElement::IfcSpatialElement(IfcEntityInstanceData&& e) : IfcProduct(std::move(e)) { }
Ifc4x3_tc1::IfcSpatialElement::IfcSpatialElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName) : IfcProduct(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); }; populate_derived(); }

// Function implementations for IfcSpatialElementType
boost::optional< std::string > Ifc4x3_tc1::IfcSpatialElementType::ElementType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcSpatialElementType::setElementType(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSpatialElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1047]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSpatialElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1047]); }
Ifc4x3_tc1::IfcSpatialElementType::IfcSpatialElementType(IfcEntityInstanceData&& e) : IfcTypeProduct(std::move(e)) { }
Ifc4x3_tc1::IfcSpatialElementType::IfcSpatialElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcTypeProduct(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcSpatialStructureElement
boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > Ifc4x3_tc1::IfcSpatialStructureElement::CompositionType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcElementCompositionEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcSpatialStructureElement::setCompositionType(boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSpatialStructureElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1049]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSpatialStructureElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1049]); }
Ifc4x3_tc1::IfcSpatialStructureElement::IfcSpatialStructureElement(IfcEntityInstanceData&& e) : IfcSpatialElement(std::move(e)) { }
Ifc4x3_tc1::IfcSpatialStructureElement::IfcSpatialStructureElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcElementCompositionEnum::Value > v9_CompositionType) : IfcSpatialElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_CompositionType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcElementCompositionEnum::Class(),(size_t)*v9_CompositionType))); }; populate_derived(); }

// Function implementations for IfcSpatialStructureElementType


const IfcParse::entity& Ifc4x3_tc1::IfcSpatialStructureElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1050]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSpatialStructureElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1050]); }
Ifc4x3_tc1::IfcSpatialStructureElementType::IfcSpatialStructureElementType(IfcEntityInstanceData&& e) : IfcSpatialElementType(std::move(e)) { }
Ifc4x3_tc1::IfcSpatialStructureElementType::IfcSpatialStructureElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcSpatialElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcSpatialZone
boost::optional< ::Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Value > Ifc4x3_tc1::IfcSpatialZone::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSpatialZoneTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcSpatialZone::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSpatialZone::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1051]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSpatialZone::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1051]); }
Ifc4x3_tc1::IfcSpatialZone::IfcSpatialZone(IfcEntityInstanceData&& e) : IfcSpatialElement(std::move(e)) { }
Ifc4x3_tc1::IfcSpatialZone::IfcSpatialZone(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Value > v9_PredefinedType) : IfcSpatialElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LongName) {set_attribute_value(7, (*v8_LongName)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcSpatialZoneType
::Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Value Ifc4x3_tc1::IfcSpatialZoneType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcSpatialZoneTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcSpatialZoneType::setPredefinedType(::Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }
boost::optional< std::string > Ifc4x3_tc1::IfcSpatialZoneType::LongName() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcSpatialZoneType::setLongName(boost::optional< std::string > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSpatialZoneType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1052]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSpatialZoneType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1052]); }
Ifc4x3_tc1::IfcSpatialZoneType::IfcSpatialZoneType(IfcEntityInstanceData&& e) : IfcSpatialElementType(std::move(e)) { }
Ifc4x3_tc1::IfcSpatialZoneType::IfcSpatialZoneType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Value v10_PredefinedType, boost::optional< std::string > v11_LongName) : IfcSpatialElementType(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcSpatialZoneTypeEnum::Class(),(size_t)v10_PredefinedType))); if (v11_LongName) {set_attribute_value(10, (*v11_LongName)); }; populate_derived(); }

// Function implementations for IfcSphere
double Ifc4x3_tc1::IfcSphere::Radius() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcSphere::setRadius(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcSphere::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1058]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSphere::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1058]); }
Ifc4x3_tc1::IfcSphere::IfcSphere(IfcEntityInstanceData&& e) : IfcCsgPrimitive3D(std::move(e)) { }
Ifc4x3_tc1::IfcSphere::IfcSphere(::Ifc4x3_tc1::IfcAxis2Placement3D* v1_Position, double v2_Radius) : IfcCsgPrimitive3D(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Radius));; populate_derived(); }

// Function implementations for IfcSphericalSurface
double Ifc4x3_tc1::IfcSphericalSurface::Radius() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcSphericalSurface::setRadius(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcSphericalSurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1059]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSphericalSurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1059]); }
Ifc4x3_tc1::IfcSphericalSurface::IfcSphericalSurface(IfcEntityInstanceData&& e) : IfcElementarySurface(std::move(e)) { }
Ifc4x3_tc1::IfcSphericalSurface::IfcSphericalSurface(::Ifc4x3_tc1::IfcAxis2Placement3D* v1_Position, double v2_Radius) : IfcElementarySurface(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Radius));; populate_derived(); }

// Function implementations for IfcSpiral
::Ifc4x3_tc1::IfcAxis2Placement* Ifc4x3_tc1::IfcSpiral::Position() const { if(data_.get_attribute_value(0).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcAxis2Placement>(true); }
void Ifc4x3_tc1::IfcSpiral::setPosition(::Ifc4x3_tc1::IfcAxis2Placement* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcSpiral::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1060]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSpiral::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1060]); }
Ifc4x3_tc1::IfcSpiral::IfcSpiral(IfcEntityInstanceData&& e) : IfcCurve(std::move(e)) { }
Ifc4x3_tc1::IfcSpiral::IfcSpiral(::Ifc4x3_tc1::IfcAxis2Placement* v1_Position) : IfcCurve(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcStackTerminal
boost::optional< ::Ifc4x3_tc1::IfcStackTerminalTypeEnum::Value > Ifc4x3_tc1::IfcStackTerminal::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcStackTerminalTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcStackTerminal::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcStackTerminalTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcStackTerminalTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStackTerminal::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1061]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStackTerminal::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1061]); }
Ifc4x3_tc1::IfcStackTerminal::IfcStackTerminal(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcStackTerminal::IfcStackTerminal(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcStackTerminalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcStackTerminalTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcStackTerminalType
::Ifc4x3_tc1::IfcStackTerminalTypeEnum::Value Ifc4x3_tc1::IfcStackTerminalType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcStackTerminalTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcStackTerminalType::setPredefinedType(::Ifc4x3_tc1::IfcStackTerminalTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcStackTerminalTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcStackTerminalType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1062]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStackTerminalType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1062]); }
Ifc4x3_tc1::IfcStackTerminalType::IfcStackTerminalType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcStackTerminalType::IfcStackTerminalType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcStackTerminalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcStackTerminalTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcStair
boost::optional< ::Ifc4x3_tc1::IfcStairTypeEnum::Value > Ifc4x3_tc1::IfcStair::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcStairTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcStair::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcStairTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcStairTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStair::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1064]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStair::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1064]); }
Ifc4x3_tc1::IfcStair::IfcStair(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcStair::IfcStair(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcStairTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcStairTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcStairFlight
boost::optional< int > Ifc4x3_tc1::IfcStairFlight::NumberOfRisers() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } int v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcStairFlight::setNumberOfRisers(boost::optional< int > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< int > Ifc4x3_tc1::IfcStairFlight::NumberOfTreads() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } int v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcStairFlight::setNumberOfTreads(boost::optional< int > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< double > Ifc4x3_tc1::IfcStairFlight::RiserHeight() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcStairFlight::setRiserHeight(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< double > Ifc4x3_tc1::IfcStairFlight::TreadLength() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcStairFlight::setTreadLength(boost::optional< double > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< ::Ifc4x3_tc1::IfcStairFlightTypeEnum::Value > Ifc4x3_tc1::IfcStairFlight::PredefinedType() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcStairFlightTypeEnum::FromString(data_.get_attribute_value(12)); }
void Ifc4x3_tc1::IfcStairFlight::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcStairFlightTypeEnum::Value > v) { if (v) {set_attribute_value(12, EnumerationReference(&::Ifc4x3_tc1::IfcStairFlightTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(12);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStairFlight::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1065]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStairFlight::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1065]); }
Ifc4x3_tc1::IfcStairFlight::IfcStairFlight(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcStairFlight::IfcStairFlight(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< int > v9_NumberOfRisers, boost::optional< int > v10_NumberOfTreads, boost::optional< double > v11_RiserHeight, boost::optional< double > v12_TreadLength, boost::optional< ::Ifc4x3_tc1::IfcStairFlightTypeEnum::Value > v13_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(13))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_NumberOfRisers) {set_attribute_value(8, (*v9_NumberOfRisers)); } if (v10_NumberOfTreads) {set_attribute_value(9, (*v10_NumberOfTreads)); } if (v11_RiserHeight) {set_attribute_value(10, (*v11_RiserHeight)); } if (v12_TreadLength) {set_attribute_value(11, (*v12_TreadLength)); } if (v13_PredefinedType) {set_attribute_value(12, (EnumerationReference(&::Ifc4x3_tc1::IfcStairFlightTypeEnum::Class(),(size_t)*v13_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcStairFlightType
::Ifc4x3_tc1::IfcStairFlightTypeEnum::Value Ifc4x3_tc1::IfcStairFlightType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcStairFlightTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcStairFlightType::setPredefinedType(::Ifc4x3_tc1::IfcStairFlightTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcStairFlightTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcStairFlightType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1066]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStairFlightType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1066]); }
Ifc4x3_tc1::IfcStairFlightType::IfcStairFlightType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcStairFlightType::IfcStairFlightType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcStairFlightTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcStairFlightTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcStairType
::Ifc4x3_tc1::IfcStairTypeEnum::Value Ifc4x3_tc1::IfcStairType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcStairTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcStairType::setPredefinedType(::Ifc4x3_tc1::IfcStairTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcStairTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcStairType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1068]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStairType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1068]); }
Ifc4x3_tc1::IfcStairType::IfcStairType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcStairType::IfcStairType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcStairTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcStairTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcStructuralAction
boost::optional< bool > Ifc4x3_tc1::IfcStructuralAction::DestabilizingLoad() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } bool v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcStructuralAction::setDestabilizingLoad(boost::optional< bool > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralAction::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1072]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralAction::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1072]); }
Ifc4x3_tc1::IfcStructuralAction::IfcStructuralAction(IfcEntityInstanceData&& e) : IfcStructuralActivity(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralAction::IfcStructuralAction(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad) : IfcStructuralActivity(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedLoad ? v8_AppliedLoad->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Class(),(size_t)v9_GlobalOrLocal))); if (v10_DestabilizingLoad) {set_attribute_value(9, (*v10_DestabilizingLoad)); }; populate_derived(); }

// Function implementations for IfcStructuralActivity
::Ifc4x3_tc1::IfcStructuralLoad* Ifc4x3_tc1::IfcStructuralActivity::AppliedLoad() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(7)))->as<::Ifc4x3_tc1::IfcStructuralLoad>(true); }
void Ifc4x3_tc1::IfcStructuralActivity::setAppliedLoad(::Ifc4x3_tc1::IfcStructuralLoad* v) { set_attribute_value(7, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(7); }
::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value Ifc4x3_tc1::IfcStructuralActivity::GlobalOrLocal() const {  return ::Ifc4x3_tc1::IfcGlobalOrLocalEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcStructuralActivity::setGlobalOrLocal(::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value v) { set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(8); }

::Ifc4x3_tc1::IfcRelConnectsStructuralActivity::list::ptr Ifc4x3_tc1::IfcStructuralActivity::AssignedToStructuralItem() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[920], 5)->as<IfcRelConnectsStructuralActivity>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcStructuralActivity::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1073]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralActivity::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1073]); }
Ifc4x3_tc1::IfcStructuralActivity::IfcStructuralActivity(IfcEntityInstanceData&& e) : IfcProduct(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralActivity::IfcStructuralActivity(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal) : IfcProduct(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedLoad ? v8_AppliedLoad->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Class(),(size_t)v9_GlobalOrLocal)));; populate_derived(); }

// Function implementations for IfcStructuralAnalysisModel
::Ifc4x3_tc1::IfcAnalysisModelTypeEnum::Value Ifc4x3_tc1::IfcStructuralAnalysisModel::PredefinedType() const {  return ::Ifc4x3_tc1::IfcAnalysisModelTypeEnum::FromString(data_.get_attribute_value(5)); }
void Ifc4x3_tc1::IfcStructuralAnalysisModel::setPredefinedType(::Ifc4x3_tc1::IfcAnalysisModelTypeEnum::Value v) { set_attribute_value(5, EnumerationReference(&::Ifc4x3_tc1::IfcAnalysisModelTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcAxis2Placement3D* Ifc4x3_tc1::IfcStructuralAnalysisModel::OrientationOf2DPlane() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcAxis2Placement3D>(true); }
void Ifc4x3_tc1::IfcStructuralAnalysisModel::setOrientationOf2DPlane(::Ifc4x3_tc1::IfcAxis2Placement3D* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcStructuralLoadGroup >::ptr > Ifc4x3_tc1::IfcStructuralAnalysisModel::LoadedBy() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(7); return es->as< ::Ifc4x3_tc1::IfcStructuralLoadGroup >(); }
void Ifc4x3_tc1::IfcStructuralAnalysisModel::setLoadedBy(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcStructuralLoadGroup >::ptr > v) { if (v) {set_attribute_value(7, (*v)->generalize());} else {unset_attribute_value(7);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcStructuralResultGroup >::ptr > Ifc4x3_tc1::IfcStructuralAnalysisModel::HasResults() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(8); return es->as< ::Ifc4x3_tc1::IfcStructuralResultGroup >(); }
void Ifc4x3_tc1::IfcStructuralAnalysisModel::setHasResults(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcStructuralResultGroup >::ptr > v) { if (v) {set_attribute_value(8, (*v)->generalize());} else {unset_attribute_value(8);} }
::Ifc4x3_tc1::IfcObjectPlacement* Ifc4x3_tc1::IfcStructuralAnalysisModel::SharedPlacement() const { if(data_.get_attribute_value(9).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(9)))->as<::Ifc4x3_tc1::IfcObjectPlacement>(true); }
void Ifc4x3_tc1::IfcStructuralAnalysisModel::setSharedPlacement(::Ifc4x3_tc1::IfcObjectPlacement* v) { set_attribute_value(9, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralAnalysisModel::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1075]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralAnalysisModel::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1075]); }
Ifc4x3_tc1::IfcStructuralAnalysisModel::IfcStructuralAnalysisModel(IfcEntityInstanceData&& e) : IfcSystem(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralAnalysisModel::IfcStructuralAnalysisModel(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcAnalysisModelTypeEnum::Value v6_PredefinedType, ::Ifc4x3_tc1::IfcAxis2Placement3D* v7_OrientationOf2DPlane, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcStructuralLoadGroup >::ptr > v8_LoadedBy, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcStructuralResultGroup >::ptr > v9_HasResults, ::Ifc4x3_tc1::IfcObjectPlacement* v10_SharedPlacement) : IfcSystem(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcAnalysisModelTypeEnum::Class(),(size_t)v6_PredefinedType)));set_attribute_value(6, v7_OrientationOf2DPlane ? v7_OrientationOf2DPlane->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_LoadedBy) {set_attribute_value(7, (*v8_LoadedBy)->generalize()); } if (v9_HasResults) {set_attribute_value(8, (*v9_HasResults)->generalize()); }set_attribute_value(9, v10_SharedPlacement ? v10_SharedPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcStructuralConnection
::Ifc4x3_tc1::IfcBoundaryCondition* Ifc4x3_tc1::IfcStructuralConnection::AppliedCondition() const { if(data_.get_attribute_value(7).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(7)))->as<::Ifc4x3_tc1::IfcBoundaryCondition>(true); }
void Ifc4x3_tc1::IfcStructuralConnection::setAppliedCondition(::Ifc4x3_tc1::IfcBoundaryCondition* v) { set_attribute_value(7, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(7); }

::Ifc4x3_tc1::IfcRelConnectsStructuralMember::list::ptr Ifc4x3_tc1::IfcStructuralConnection::ConnectsStructuralMembers() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[921], 5)->as<IfcRelConnectsStructuralMember>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcStructuralConnection::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1076]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralConnection::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1076]); }
Ifc4x3_tc1::IfcStructuralConnection::IfcStructuralConnection(IfcEntityInstanceData&& e) : IfcStructuralItem(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralConnection::IfcStructuralConnection(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcBoundaryCondition* v8_AppliedCondition) : IfcStructuralItem(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedCondition ? v8_AppliedCondition->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcStructuralConnectionCondition
boost::optional< std::string > Ifc4x3_tc1::IfcStructuralConnectionCondition::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcStructuralConnectionCondition::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralConnectionCondition::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1077]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralConnectionCondition::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1077]); }
Ifc4x3_tc1::IfcStructuralConnectionCondition::IfcStructuralConnectionCondition(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralConnectionCondition::IfcStructuralConnectionCondition(boost::optional< std::string > v1_Name) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(1))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }; populate_derived(); }

// Function implementations for IfcStructuralCurveAction
boost::optional< ::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Value > Ifc4x3_tc1::IfcStructuralCurveAction::ProjectedOrTrue() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcStructuralCurveAction::setProjectedOrTrue(boost::optional< ::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }
::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Value Ifc4x3_tc1::IfcStructuralCurveAction::PredefinedType() const {  return ::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::FromString(data_.get_attribute_value(11)); }
void Ifc4x3_tc1::IfcStructuralCurveAction::setPredefinedType(::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Value v) { set_attribute_value(11, EnumerationReference(&::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(11); }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralCurveAction::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1078]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralCurveAction::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1078]); }
Ifc4x3_tc1::IfcStructuralCurveAction::IfcStructuralCurveAction(IfcEntityInstanceData&& e) : IfcStructuralAction(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralCurveAction::IfcStructuralCurveAction(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad, boost::optional< ::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Value > v11_ProjectedOrTrue, ::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Value v12_PredefinedType) : IfcStructuralAction(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedLoad ? v8_AppliedLoad->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Class(),(size_t)v9_GlobalOrLocal))); if (v10_DestabilizingLoad) {set_attribute_value(9, (*v10_DestabilizingLoad)); } if (v11_ProjectedOrTrue) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Class(),(size_t)*v11_ProjectedOrTrue))); }set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Class(),(size_t)v12_PredefinedType)));; populate_derived(); }

// Function implementations for IfcStructuralCurveConnection
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcStructuralCurveConnection::AxisDirection() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(8)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcStructuralCurveConnection::setAxisDirection(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(8, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralCurveConnection::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1080]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralCurveConnection::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1080]); }
Ifc4x3_tc1::IfcStructuralCurveConnection::IfcStructuralCurveConnection(IfcEntityInstanceData&& e) : IfcStructuralConnection(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralCurveConnection::IfcStructuralCurveConnection(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcBoundaryCondition* v8_AppliedCondition, ::Ifc4x3_tc1::IfcDirection* v9_AxisDirection) : IfcStructuralConnection(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedCondition ? v8_AppliedCondition->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, v9_AxisDirection ? v9_AxisDirection->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcStructuralCurveMember
::Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::Value Ifc4x3_tc1::IfcStructuralCurveMember::PredefinedType() const {  return ::Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcStructuralCurveMember::setPredefinedType(::Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::Value v) { set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(7); }
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcStructuralCurveMember::Axis() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(8)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcStructuralCurveMember::setAxis(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(8, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralCurveMember::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1081]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralCurveMember::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1081]); }
Ifc4x3_tc1::IfcStructuralCurveMember::IfcStructuralCurveMember(IfcEntityInstanceData&& e) : IfcStructuralMember(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralCurveMember::IfcStructuralCurveMember(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::Value v8_PredefinedType, ::Ifc4x3_tc1::IfcDirection* v9_Axis) : IfcStructuralMember(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::Class(),(size_t)v8_PredefinedType)));set_attribute_value(8, v9_Axis ? v9_Axis->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcStructuralCurveMemberVarying


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralCurveMemberVarying::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1083]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralCurveMemberVarying::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1083]); }
Ifc4x3_tc1::IfcStructuralCurveMemberVarying::IfcStructuralCurveMemberVarying(IfcEntityInstanceData&& e) : IfcStructuralCurveMember(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralCurveMemberVarying::IfcStructuralCurveMemberVarying(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::Value v8_PredefinedType, ::Ifc4x3_tc1::IfcDirection* v9_Axis) : IfcStructuralCurveMember(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcStructuralCurveMemberTypeEnum::Class(),(size_t)v8_PredefinedType)));set_attribute_value(8, v9_Axis ? v9_Axis->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcStructuralCurveReaction
::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Value Ifc4x3_tc1::IfcStructuralCurveReaction::PredefinedType() const {  return ::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcStructuralCurveReaction::setPredefinedType(::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralCurveReaction::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1084]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralCurveReaction::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1084]); }
Ifc4x3_tc1::IfcStructuralCurveReaction::IfcStructuralCurveReaction(IfcEntityInstanceData&& e) : IfcStructuralReaction(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralCurveReaction::IfcStructuralCurveReaction(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, ::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Value v10_PredefinedType) : IfcStructuralReaction(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedLoad ? v8_AppliedLoad->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Class(),(size_t)v9_GlobalOrLocal)));set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcStructuralItem

::Ifc4x3_tc1::IfcRelConnectsStructuralActivity::list::ptr Ifc4x3_tc1::IfcStructuralItem::AssignedStructuralActivity() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[920], 4)->as<IfcRelConnectsStructuralActivity>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcStructuralItem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1085]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralItem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1085]); }
Ifc4x3_tc1::IfcStructuralItem::IfcStructuralItem(IfcEntityInstanceData&& e) : IfcProduct(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralItem::IfcStructuralItem(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation) : IfcProduct(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcStructuralLinearAction


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLinearAction::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1086]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLinearAction::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1086]); }
Ifc4x3_tc1::IfcStructuralLinearAction::IfcStructuralLinearAction(IfcEntityInstanceData&& e) : IfcStructuralCurveAction(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLinearAction::IfcStructuralLinearAction(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad, boost::optional< ::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Value > v11_ProjectedOrTrue, ::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Value v12_PredefinedType) : IfcStructuralCurveAction(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedLoad ? v8_AppliedLoad->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Class(),(size_t)v9_GlobalOrLocal))); if (v10_DestabilizingLoad) {set_attribute_value(9, (*v10_DestabilizingLoad)); } if (v11_ProjectedOrTrue) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Class(),(size_t)*v11_ProjectedOrTrue))); }set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcStructuralCurveActivityTypeEnum::Class(),(size_t)v12_PredefinedType)));; populate_derived(); }

// Function implementations for IfcStructuralLoad
boost::optional< std::string > Ifc4x3_tc1::IfcStructuralLoad::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcStructuralLoad::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoad::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1087]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoad::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1087]); }
Ifc4x3_tc1::IfcStructuralLoad::IfcStructuralLoad(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLoad::IfcStructuralLoad(boost::optional< std::string > v1_Name) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(1))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }; populate_derived(); }

// Function implementations for IfcStructuralLoadCase
boost::optional< std::vector< double > /*[3:3]*/ > Ifc4x3_tc1::IfcStructuralLoadCase::SelfWeightCoefficients() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } std::vector< double > /*[3:3]*/ v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcStructuralLoadCase::setSelfWeightCoefficients(boost::optional< std::vector< double > /*[3:3]*/ > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadCase::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1088]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadCase::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1088]); }
Ifc4x3_tc1::IfcStructuralLoadCase::IfcStructuralLoadCase(IfcEntityInstanceData&& e) : IfcStructuralLoadGroup(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLoadCase::IfcStructuralLoadCase(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcLoadGroupTypeEnum::Value v6_PredefinedType, ::Ifc4x3_tc1::IfcActionTypeEnum::Value v7_ActionType, ::Ifc4x3_tc1::IfcActionSourceTypeEnum::Value v8_ActionSource, boost::optional< double > v9_Coefficient, boost::optional< std::string > v10_Purpose, boost::optional< std::vector< double > /*[3:3]*/ > v11_SelfWeightCoefficients) : IfcStructuralLoadGroup(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcLoadGroupTypeEnum::Class(),(size_t)v6_PredefinedType)));set_attribute_value(6, (EnumerationReference(&::Ifc4x3_tc1::IfcActionTypeEnum::Class(),(size_t)v7_ActionType)));set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcActionSourceTypeEnum::Class(),(size_t)v8_ActionSource))); if (v9_Coefficient) {set_attribute_value(8, (*v9_Coefficient)); } if (v10_Purpose) {set_attribute_value(9, (*v10_Purpose)); } if (v11_SelfWeightCoefficients) {set_attribute_value(10, (*v11_SelfWeightCoefficients)); }; populate_derived(); }

// Function implementations for IfcStructuralLoadConfiguration
aggregate_of< ::Ifc4x3_tc1::IfcStructuralLoadOrResult >::ptr Ifc4x3_tc1::IfcStructuralLoadConfiguration::Values() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcStructuralLoadOrResult >(); }
void Ifc4x3_tc1::IfcStructuralLoadConfiguration::setValues(aggregate_of< ::Ifc4x3_tc1::IfcStructuralLoadOrResult >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }
boost::optional< std::vector< std::vector< double > > > Ifc4x3_tc1::IfcStructuralLoadConfiguration::Locations() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::vector< std::vector< double > > v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcStructuralLoadConfiguration::setLocations(boost::optional< std::vector< std::vector< double > > > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadConfiguration::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1089]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadConfiguration::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1089]); }
Ifc4x3_tc1::IfcStructuralLoadConfiguration::IfcStructuralLoadConfiguration(IfcEntityInstanceData&& e) : IfcStructuralLoad(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLoadConfiguration::IfcStructuralLoadConfiguration(boost::optional< std::string > v1_Name, aggregate_of< ::Ifc4x3_tc1::IfcStructuralLoadOrResult >::ptr v2_Values, boost::optional< std::vector< std::vector< double > > > v3_Locations) : IfcStructuralLoad(IfcEntityInstanceData(storage_t(3))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, (v2_Values)->generalize()); if (v3_Locations) {set_attribute_value(2, (*v3_Locations)); }; populate_derived(); }

// Function implementations for IfcStructuralLoadGroup
::Ifc4x3_tc1::IfcLoadGroupTypeEnum::Value Ifc4x3_tc1::IfcStructuralLoadGroup::PredefinedType() const {  return ::Ifc4x3_tc1::IfcLoadGroupTypeEnum::FromString(data_.get_attribute_value(5)); }
void Ifc4x3_tc1::IfcStructuralLoadGroup::setPredefinedType(::Ifc4x3_tc1::IfcLoadGroupTypeEnum::Value v) { set_attribute_value(5, EnumerationReference(&::Ifc4x3_tc1::IfcLoadGroupTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcActionTypeEnum::Value Ifc4x3_tc1::IfcStructuralLoadGroup::ActionType() const {  return ::Ifc4x3_tc1::IfcActionTypeEnum::FromString(data_.get_attribute_value(6)); }
void Ifc4x3_tc1::IfcStructuralLoadGroup::setActionType(::Ifc4x3_tc1::IfcActionTypeEnum::Value v) { set_attribute_value(6, EnumerationReference(&::Ifc4x3_tc1::IfcActionTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(6); }
::Ifc4x3_tc1::IfcActionSourceTypeEnum::Value Ifc4x3_tc1::IfcStructuralLoadGroup::ActionSource() const {  return ::Ifc4x3_tc1::IfcActionSourceTypeEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcStructuralLoadGroup::setActionSource(::Ifc4x3_tc1::IfcActionSourceTypeEnum::Value v) { set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcActionSourceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(7); }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadGroup::Coefficient() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcStructuralLoadGroup::setCoefficient(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< std::string > Ifc4x3_tc1::IfcStructuralLoadGroup::Purpose() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcStructuralLoadGroup::setPurpose(boost::optional< std::string > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }

::Ifc4x3_tc1::IfcStructuralResultGroup::list::ptr Ifc4x3_tc1::IfcStructuralLoadGroup::SourceOfResultGroup() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[1106], 6)->as<IfcStructuralResultGroup>(); }
::Ifc4x3_tc1::IfcStructuralAnalysisModel::list::ptr Ifc4x3_tc1::IfcStructuralLoadGroup::LoadGroupFor() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[1075], 7)->as<IfcStructuralAnalysisModel>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadGroup::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1090]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadGroup::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1090]); }
Ifc4x3_tc1::IfcStructuralLoadGroup::IfcStructuralLoadGroup(IfcEntityInstanceData&& e) : IfcGroup(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLoadGroup::IfcStructuralLoadGroup(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcLoadGroupTypeEnum::Value v6_PredefinedType, ::Ifc4x3_tc1::IfcActionTypeEnum::Value v7_ActionType, ::Ifc4x3_tc1::IfcActionSourceTypeEnum::Value v8_ActionSource, boost::optional< double > v9_Coefficient, boost::optional< std::string > v10_Purpose) : IfcGroup(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcLoadGroupTypeEnum::Class(),(size_t)v6_PredefinedType)));set_attribute_value(6, (EnumerationReference(&::Ifc4x3_tc1::IfcActionTypeEnum::Class(),(size_t)v7_ActionType)));set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcActionSourceTypeEnum::Class(),(size_t)v8_ActionSource))); if (v9_Coefficient) {set_attribute_value(8, (*v9_Coefficient)); } if (v10_Purpose) {set_attribute_value(9, (*v10_Purpose)); }; populate_derived(); }

// Function implementations for IfcStructuralLoadLinearForce
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadLinearForce::LinearForceX() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcStructuralLoadLinearForce::setLinearForceX(boost::optional< double > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadLinearForce::LinearForceY() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcStructuralLoadLinearForce::setLinearForceY(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadLinearForce::LinearForceZ() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcStructuralLoadLinearForce::setLinearForceZ(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadLinearForce::LinearMomentX() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcStructuralLoadLinearForce::setLinearMomentX(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadLinearForce::LinearMomentY() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcStructuralLoadLinearForce::setLinearMomentY(boost::optional< double > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadLinearForce::LinearMomentZ() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcStructuralLoadLinearForce::setLinearMomentZ(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadLinearForce::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1091]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadLinearForce::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1091]); }
Ifc4x3_tc1::IfcStructuralLoadLinearForce::IfcStructuralLoadLinearForce(IfcEntityInstanceData&& e) : IfcStructuralLoadStatic(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLoadLinearForce::IfcStructuralLoadLinearForce(boost::optional< std::string > v1_Name, boost::optional< double > v2_LinearForceX, boost::optional< double > v3_LinearForceY, boost::optional< double > v4_LinearForceZ, boost::optional< double > v5_LinearMomentX, boost::optional< double > v6_LinearMomentY, boost::optional< double > v7_LinearMomentZ) : IfcStructuralLoadStatic(IfcEntityInstanceData(storage_t(7))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_LinearForceX) {set_attribute_value(1, (*v2_LinearForceX)); } if (v3_LinearForceY) {set_attribute_value(2, (*v3_LinearForceY)); } if (v4_LinearForceZ) {set_attribute_value(3, (*v4_LinearForceZ)); } if (v5_LinearMomentX) {set_attribute_value(4, (*v5_LinearMomentX)); } if (v6_LinearMomentY) {set_attribute_value(5, (*v6_LinearMomentY)); } if (v7_LinearMomentZ) {set_attribute_value(6, (*v7_LinearMomentZ)); }; populate_derived(); }

// Function implementations for IfcStructuralLoadOrResult


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadOrResult::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1092]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadOrResult::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1092]); }
Ifc4x3_tc1::IfcStructuralLoadOrResult::IfcStructuralLoadOrResult(IfcEntityInstanceData&& e) : IfcStructuralLoad(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLoadOrResult::IfcStructuralLoadOrResult(boost::optional< std::string > v1_Name) : IfcStructuralLoad(IfcEntityInstanceData(storage_t(1))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }; populate_derived(); }

// Function implementations for IfcStructuralLoadPlanarForce
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadPlanarForce::PlanarForceX() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcStructuralLoadPlanarForce::setPlanarForceX(boost::optional< double > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadPlanarForce::PlanarForceY() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcStructuralLoadPlanarForce::setPlanarForceY(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadPlanarForce::PlanarForceZ() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcStructuralLoadPlanarForce::setPlanarForceZ(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadPlanarForce::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1093]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadPlanarForce::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1093]); }
Ifc4x3_tc1::IfcStructuralLoadPlanarForce::IfcStructuralLoadPlanarForce(IfcEntityInstanceData&& e) : IfcStructuralLoadStatic(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLoadPlanarForce::IfcStructuralLoadPlanarForce(boost::optional< std::string > v1_Name, boost::optional< double > v2_PlanarForceX, boost::optional< double > v3_PlanarForceY, boost::optional< double > v4_PlanarForceZ) : IfcStructuralLoadStatic(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_PlanarForceX) {set_attribute_value(1, (*v2_PlanarForceX)); } if (v3_PlanarForceY) {set_attribute_value(2, (*v3_PlanarForceY)); } if (v4_PlanarForceZ) {set_attribute_value(3, (*v4_PlanarForceZ)); }; populate_derived(); }

// Function implementations for IfcStructuralLoadSingleDisplacement
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::DisplacementX() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::setDisplacementX(boost::optional< double > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::DisplacementY() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::setDisplacementY(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::DisplacementZ() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::setDisplacementZ(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::RotationalDisplacementRX() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::setRotationalDisplacementRX(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::RotationalDisplacementRY() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::setRotationalDisplacementRY(boost::optional< double > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::RotationalDisplacementRZ() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::setRotationalDisplacementRZ(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1094]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1094]); }
Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::IfcStructuralLoadSingleDisplacement(IfcEntityInstanceData&& e) : IfcStructuralLoadStatic(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLoadSingleDisplacement::IfcStructuralLoadSingleDisplacement(boost::optional< std::string > v1_Name, boost::optional< double > v2_DisplacementX, boost::optional< double > v3_DisplacementY, boost::optional< double > v4_DisplacementZ, boost::optional< double > v5_RotationalDisplacementRX, boost::optional< double > v6_RotationalDisplacementRY, boost::optional< double > v7_RotationalDisplacementRZ) : IfcStructuralLoadStatic(IfcEntityInstanceData(storage_t(7))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_DisplacementX) {set_attribute_value(1, (*v2_DisplacementX)); } if (v3_DisplacementY) {set_attribute_value(2, (*v3_DisplacementY)); } if (v4_DisplacementZ) {set_attribute_value(3, (*v4_DisplacementZ)); } if (v5_RotationalDisplacementRX) {set_attribute_value(4, (*v5_RotationalDisplacementRX)); } if (v6_RotationalDisplacementRY) {set_attribute_value(5, (*v6_RotationalDisplacementRY)); } if (v7_RotationalDisplacementRZ) {set_attribute_value(6, (*v7_RotationalDisplacementRZ)); }; populate_derived(); }

// Function implementations for IfcStructuralLoadSingleDisplacementDistortion
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleDisplacementDistortion::Distortion() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleDisplacementDistortion::setDistortion(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadSingleDisplacementDistortion::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1095]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadSingleDisplacementDistortion::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1095]); }
Ifc4x3_tc1::IfcStructuralLoadSingleDisplacementDistortion::IfcStructuralLoadSingleDisplacementDistortion(IfcEntityInstanceData&& e) : IfcStructuralLoadSingleDisplacement(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLoadSingleDisplacementDistortion::IfcStructuralLoadSingleDisplacementDistortion(boost::optional< std::string > v1_Name, boost::optional< double > v2_DisplacementX, boost::optional< double > v3_DisplacementY, boost::optional< double > v4_DisplacementZ, boost::optional< double > v5_RotationalDisplacementRX, boost::optional< double > v6_RotationalDisplacementRY, boost::optional< double > v7_RotationalDisplacementRZ, boost::optional< double > v8_Distortion) : IfcStructuralLoadSingleDisplacement(IfcEntityInstanceData(storage_t(8))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_DisplacementX) {set_attribute_value(1, (*v2_DisplacementX)); } if (v3_DisplacementY) {set_attribute_value(2, (*v3_DisplacementY)); } if (v4_DisplacementZ) {set_attribute_value(3, (*v4_DisplacementZ)); } if (v5_RotationalDisplacementRX) {set_attribute_value(4, (*v5_RotationalDisplacementRX)); } if (v6_RotationalDisplacementRY) {set_attribute_value(5, (*v6_RotationalDisplacementRY)); } if (v7_RotationalDisplacementRZ) {set_attribute_value(6, (*v7_RotationalDisplacementRZ)); } if (v8_Distortion) {set_attribute_value(7, (*v8_Distortion)); }; populate_derived(); }

// Function implementations for IfcStructuralLoadSingleForce
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleForce::ForceX() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleForce::setForceX(boost::optional< double > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleForce::ForceY() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleForce::setForceY(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleForce::ForceZ() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleForce::setForceZ(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleForce::MomentX() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleForce::setMomentX(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleForce::MomentY() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleForce::setMomentY(boost::optional< double > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleForce::MomentZ() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleForce::setMomentZ(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadSingleForce::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1096]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadSingleForce::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1096]); }
Ifc4x3_tc1::IfcStructuralLoadSingleForce::IfcStructuralLoadSingleForce(IfcEntityInstanceData&& e) : IfcStructuralLoadStatic(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLoadSingleForce::IfcStructuralLoadSingleForce(boost::optional< std::string > v1_Name, boost::optional< double > v2_ForceX, boost::optional< double > v3_ForceY, boost::optional< double > v4_ForceZ, boost::optional< double > v5_MomentX, boost::optional< double > v6_MomentY, boost::optional< double > v7_MomentZ) : IfcStructuralLoadStatic(IfcEntityInstanceData(storage_t(7))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_ForceX) {set_attribute_value(1, (*v2_ForceX)); } if (v3_ForceY) {set_attribute_value(2, (*v3_ForceY)); } if (v4_ForceZ) {set_attribute_value(3, (*v4_ForceZ)); } if (v5_MomentX) {set_attribute_value(4, (*v5_MomentX)); } if (v6_MomentY) {set_attribute_value(5, (*v6_MomentY)); } if (v7_MomentZ) {set_attribute_value(6, (*v7_MomentZ)); }; populate_derived(); }

// Function implementations for IfcStructuralLoadSingleForceWarping
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadSingleForceWarping::WarpingMoment() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcStructuralLoadSingleForceWarping::setWarpingMoment(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadSingleForceWarping::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1097]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadSingleForceWarping::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1097]); }
Ifc4x3_tc1::IfcStructuralLoadSingleForceWarping::IfcStructuralLoadSingleForceWarping(IfcEntityInstanceData&& e) : IfcStructuralLoadSingleForce(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLoadSingleForceWarping::IfcStructuralLoadSingleForceWarping(boost::optional< std::string > v1_Name, boost::optional< double > v2_ForceX, boost::optional< double > v3_ForceY, boost::optional< double > v4_ForceZ, boost::optional< double > v5_MomentX, boost::optional< double > v6_MomentY, boost::optional< double > v7_MomentZ, boost::optional< double > v8_WarpingMoment) : IfcStructuralLoadSingleForce(IfcEntityInstanceData(storage_t(8))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_ForceX) {set_attribute_value(1, (*v2_ForceX)); } if (v3_ForceY) {set_attribute_value(2, (*v3_ForceY)); } if (v4_ForceZ) {set_attribute_value(3, (*v4_ForceZ)); } if (v5_MomentX) {set_attribute_value(4, (*v5_MomentX)); } if (v6_MomentY) {set_attribute_value(5, (*v6_MomentY)); } if (v7_MomentZ) {set_attribute_value(6, (*v7_MomentZ)); } if (v8_WarpingMoment) {set_attribute_value(7, (*v8_WarpingMoment)); }; populate_derived(); }

// Function implementations for IfcStructuralLoadStatic


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadStatic::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1098]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadStatic::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1098]); }
Ifc4x3_tc1::IfcStructuralLoadStatic::IfcStructuralLoadStatic(IfcEntityInstanceData&& e) : IfcStructuralLoadOrResult(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLoadStatic::IfcStructuralLoadStatic(boost::optional< std::string > v1_Name) : IfcStructuralLoadOrResult(IfcEntityInstanceData(storage_t(1))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }; populate_derived(); }

// Function implementations for IfcStructuralLoadTemperature
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadTemperature::DeltaTConstant() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcStructuralLoadTemperature::setDeltaTConstant(boost::optional< double > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadTemperature::DeltaTY() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcStructuralLoadTemperature::setDeltaTY(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcStructuralLoadTemperature::DeltaTZ() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcStructuralLoadTemperature::setDeltaTZ(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadTemperature::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1099]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralLoadTemperature::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1099]); }
Ifc4x3_tc1::IfcStructuralLoadTemperature::IfcStructuralLoadTemperature(IfcEntityInstanceData&& e) : IfcStructuralLoadStatic(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralLoadTemperature::IfcStructuralLoadTemperature(boost::optional< std::string > v1_Name, boost::optional< double > v2_DeltaTConstant, boost::optional< double > v3_DeltaTY, boost::optional< double > v4_DeltaTZ) : IfcStructuralLoadStatic(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_DeltaTConstant) {set_attribute_value(1, (*v2_DeltaTConstant)); } if (v3_DeltaTY) {set_attribute_value(2, (*v3_DeltaTY)); } if (v4_DeltaTZ) {set_attribute_value(3, (*v4_DeltaTZ)); }; populate_derived(); }

// Function implementations for IfcStructuralMember

::Ifc4x3_tc1::IfcRelConnectsStructuralMember::list::ptr Ifc4x3_tc1::IfcStructuralMember::ConnectedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[921], 4)->as<IfcRelConnectsStructuralMember>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcStructuralMember::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1100]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralMember::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1100]); }
Ifc4x3_tc1::IfcStructuralMember::IfcStructuralMember(IfcEntityInstanceData&& e) : IfcStructuralItem(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralMember::IfcStructuralMember(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation) : IfcStructuralItem(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcStructuralPlanarAction


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralPlanarAction::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1101]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralPlanarAction::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1101]); }
Ifc4x3_tc1::IfcStructuralPlanarAction::IfcStructuralPlanarAction(IfcEntityInstanceData&& e) : IfcStructuralSurfaceAction(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralPlanarAction::IfcStructuralPlanarAction(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad, boost::optional< ::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Value > v11_ProjectedOrTrue, ::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Value v12_PredefinedType) : IfcStructuralSurfaceAction(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedLoad ? v8_AppliedLoad->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Class(),(size_t)v9_GlobalOrLocal))); if (v10_DestabilizingLoad) {set_attribute_value(9, (*v10_DestabilizingLoad)); } if (v11_ProjectedOrTrue) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Class(),(size_t)*v11_ProjectedOrTrue))); }set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Class(),(size_t)v12_PredefinedType)));; populate_derived(); }

// Function implementations for IfcStructuralPointAction


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralPointAction::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1102]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralPointAction::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1102]); }
Ifc4x3_tc1::IfcStructuralPointAction::IfcStructuralPointAction(IfcEntityInstanceData&& e) : IfcStructuralAction(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralPointAction::IfcStructuralPointAction(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad) : IfcStructuralAction(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedLoad ? v8_AppliedLoad->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Class(),(size_t)v9_GlobalOrLocal))); if (v10_DestabilizingLoad) {set_attribute_value(9, (*v10_DestabilizingLoad)); }; populate_derived(); }

// Function implementations for IfcStructuralPointConnection
::Ifc4x3_tc1::IfcAxis2Placement3D* Ifc4x3_tc1::IfcStructuralPointConnection::ConditionCoordinateSystem() const { if(data_.get_attribute_value(8).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(8)))->as<::Ifc4x3_tc1::IfcAxis2Placement3D>(true); }
void Ifc4x3_tc1::IfcStructuralPointConnection::setConditionCoordinateSystem(::Ifc4x3_tc1::IfcAxis2Placement3D* v) { set_attribute_value(8, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralPointConnection::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1103]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralPointConnection::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1103]); }
Ifc4x3_tc1::IfcStructuralPointConnection::IfcStructuralPointConnection(IfcEntityInstanceData&& e) : IfcStructuralConnection(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralPointConnection::IfcStructuralPointConnection(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcBoundaryCondition* v8_AppliedCondition, ::Ifc4x3_tc1::IfcAxis2Placement3D* v9_ConditionCoordinateSystem) : IfcStructuralConnection(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedCondition ? v8_AppliedCondition->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, v9_ConditionCoordinateSystem ? v9_ConditionCoordinateSystem->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcStructuralPointReaction


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralPointReaction::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1104]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralPointReaction::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1104]); }
Ifc4x3_tc1::IfcStructuralPointReaction::IfcStructuralPointReaction(IfcEntityInstanceData&& e) : IfcStructuralReaction(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralPointReaction::IfcStructuralPointReaction(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal) : IfcStructuralReaction(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedLoad ? v8_AppliedLoad->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Class(),(size_t)v9_GlobalOrLocal)));; populate_derived(); }

// Function implementations for IfcStructuralReaction


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralReaction::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1105]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralReaction::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1105]); }
Ifc4x3_tc1::IfcStructuralReaction::IfcStructuralReaction(IfcEntityInstanceData&& e) : IfcStructuralActivity(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralReaction::IfcStructuralReaction(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal) : IfcStructuralActivity(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedLoad ? v8_AppliedLoad->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Class(),(size_t)v9_GlobalOrLocal)));; populate_derived(); }

// Function implementations for IfcStructuralResultGroup
::Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::Value Ifc4x3_tc1::IfcStructuralResultGroup::TheoryType() const {  return ::Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::FromString(data_.get_attribute_value(5)); }
void Ifc4x3_tc1::IfcStructuralResultGroup::setTheoryType(::Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::Value v) { set_attribute_value(5, EnumerationReference(&::Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcStructuralLoadGroup* Ifc4x3_tc1::IfcStructuralResultGroup::ResultForLoadGroup() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcStructuralLoadGroup>(true); }
void Ifc4x3_tc1::IfcStructuralResultGroup::setResultForLoadGroup(::Ifc4x3_tc1::IfcStructuralLoadGroup* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
bool Ifc4x3_tc1::IfcStructuralResultGroup::IsLinear() const {  bool v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcStructuralResultGroup::setIsLinear(bool v) { set_attribute_value(7, v);if constexpr (false)unset_attribute_value(7); }

::Ifc4x3_tc1::IfcStructuralAnalysisModel::list::ptr Ifc4x3_tc1::IfcStructuralResultGroup::ResultGroupFor() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[1075], 8)->as<IfcStructuralAnalysisModel>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcStructuralResultGroup::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1106]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralResultGroup::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1106]); }
Ifc4x3_tc1::IfcStructuralResultGroup::IfcStructuralResultGroup(IfcEntityInstanceData&& e) : IfcGroup(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralResultGroup::IfcStructuralResultGroup(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::Value v6_TheoryType, ::Ifc4x3_tc1::IfcStructuralLoadGroup* v7_ResultForLoadGroup, bool v8_IsLinear) : IfcGroup(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcAnalysisTheoryTypeEnum::Class(),(size_t)v6_TheoryType)));set_attribute_value(6, v7_ResultForLoadGroup ? v7_ResultForLoadGroup->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (v8_IsLinear));; populate_derived(); }

// Function implementations for IfcStructuralSurfaceAction
boost::optional< ::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Value > Ifc4x3_tc1::IfcStructuralSurfaceAction::ProjectedOrTrue() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcStructuralSurfaceAction::setProjectedOrTrue(boost::optional< ::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }
::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Value Ifc4x3_tc1::IfcStructuralSurfaceAction::PredefinedType() const {  return ::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::FromString(data_.get_attribute_value(11)); }
void Ifc4x3_tc1::IfcStructuralSurfaceAction::setPredefinedType(::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Value v) { set_attribute_value(11, EnumerationReference(&::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(11); }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralSurfaceAction::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1107]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralSurfaceAction::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1107]); }
Ifc4x3_tc1::IfcStructuralSurfaceAction::IfcStructuralSurfaceAction(IfcEntityInstanceData&& e) : IfcStructuralAction(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralSurfaceAction::IfcStructuralSurfaceAction(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad, boost::optional< ::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Value > v11_ProjectedOrTrue, ::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Value v12_PredefinedType) : IfcStructuralAction(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedLoad ? v8_AppliedLoad->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Class(),(size_t)v9_GlobalOrLocal))); if (v10_DestabilizingLoad) {set_attribute_value(9, (*v10_DestabilizingLoad)); } if (v11_ProjectedOrTrue) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcProjectedOrTrueLengthEnum::Class(),(size_t)*v11_ProjectedOrTrue))); }set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Class(),(size_t)v12_PredefinedType)));; populate_derived(); }

// Function implementations for IfcStructuralSurfaceConnection


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralSurfaceConnection::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1109]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralSurfaceConnection::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1109]); }
Ifc4x3_tc1::IfcStructuralSurfaceConnection::IfcStructuralSurfaceConnection(IfcEntityInstanceData&& e) : IfcStructuralConnection(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralSurfaceConnection::IfcStructuralSurfaceConnection(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcBoundaryCondition* v8_AppliedCondition) : IfcStructuralConnection(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedCondition ? v8_AppliedCondition->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcStructuralSurfaceMember
::Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::Value Ifc4x3_tc1::IfcStructuralSurfaceMember::PredefinedType() const {  return ::Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::FromString(data_.get_attribute_value(7)); }
void Ifc4x3_tc1::IfcStructuralSurfaceMember::setPredefinedType(::Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::Value v) { set_attribute_value(7, EnumerationReference(&::Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(7); }
boost::optional< double > Ifc4x3_tc1::IfcStructuralSurfaceMember::Thickness() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcStructuralSurfaceMember::setThickness(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralSurfaceMember::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1110]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralSurfaceMember::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1110]); }
Ifc4x3_tc1::IfcStructuralSurfaceMember::IfcStructuralSurfaceMember(IfcEntityInstanceData&& e) : IfcStructuralMember(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralSurfaceMember::IfcStructuralSurfaceMember(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::Value v8_PredefinedType, boost::optional< double > v9_Thickness) : IfcStructuralMember(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::Class(),(size_t)v8_PredefinedType))); if (v9_Thickness) {set_attribute_value(8, (*v9_Thickness)); }; populate_derived(); }

// Function implementations for IfcStructuralSurfaceMemberVarying


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralSurfaceMemberVarying::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1112]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralSurfaceMemberVarying::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1112]); }
Ifc4x3_tc1::IfcStructuralSurfaceMemberVarying::IfcStructuralSurfaceMemberVarying(IfcEntityInstanceData&& e) : IfcStructuralSurfaceMember(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralSurfaceMemberVarying::IfcStructuralSurfaceMemberVarying(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::Value v8_PredefinedType, boost::optional< double > v9_Thickness) : IfcStructuralSurfaceMember(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, (EnumerationReference(&::Ifc4x3_tc1::IfcStructuralSurfaceMemberTypeEnum::Class(),(size_t)v8_PredefinedType))); if (v9_Thickness) {set_attribute_value(8, (*v9_Thickness)); }; populate_derived(); }

// Function implementations for IfcStructuralSurfaceReaction
::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Value Ifc4x3_tc1::IfcStructuralSurfaceReaction::PredefinedType() const {  return ::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcStructuralSurfaceReaction::setPredefinedType(::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcStructuralSurfaceReaction::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1113]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStructuralSurfaceReaction::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1113]); }
Ifc4x3_tc1::IfcStructuralSurfaceReaction::IfcStructuralSurfaceReaction(IfcEntityInstanceData&& e) : IfcStructuralReaction(std::move(e)) { }
Ifc4x3_tc1::IfcStructuralSurfaceReaction::IfcStructuralSurfaceReaction(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, ::Ifc4x3_tc1::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, ::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Value v10_PredefinedType) : IfcStructuralReaction(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_AppliedLoad ? v8_AppliedLoad->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcGlobalOrLocalEnum::Class(),(size_t)v9_GlobalOrLocal)));set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcStructuralSurfaceActivityTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcStyleModel


const IfcParse::entity& Ifc4x3_tc1::IfcStyleModel::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1116]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStyleModel::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1116]); }
Ifc4x3_tc1::IfcStyleModel::IfcStyleModel(IfcEntityInstanceData&& e) : IfcRepresentation(std::move(e)) { }
Ifc4x3_tc1::IfcStyleModel::IfcStyleModel(::Ifc4x3_tc1::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_tc1::IfcRepresentationItem >::ptr v4_Items) : IfcRepresentation(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_ContextOfItems ? v1_ContextOfItems->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_RepresentationIdentifier) {set_attribute_value(1, (*v2_RepresentationIdentifier)); } if (v3_RepresentationType) {set_attribute_value(2, (*v3_RepresentationType)); }set_attribute_value(3, (v4_Items)->generalize());; populate_derived(); }

// Function implementations for IfcStyledItem
::Ifc4x3_tc1::IfcRepresentationItem* Ifc4x3_tc1::IfcStyledItem::Item() const { if(data_.get_attribute_value(0).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcRepresentationItem>(true); }
void Ifc4x3_tc1::IfcStyledItem::setItem(::Ifc4x3_tc1::IfcRepresentationItem* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
aggregate_of< ::Ifc4x3_tc1::IfcPresentationStyle >::ptr Ifc4x3_tc1::IfcStyledItem::Styles() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcPresentationStyle >(); }
void Ifc4x3_tc1::IfcStyledItem::setStyles(aggregate_of< ::Ifc4x3_tc1::IfcPresentationStyle >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }
boost::optional< std::string > Ifc4x3_tc1::IfcStyledItem::Name() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcStyledItem::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }


const IfcParse::entity& Ifc4x3_tc1::IfcStyledItem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1114]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStyledItem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1114]); }
Ifc4x3_tc1::IfcStyledItem::IfcStyledItem(IfcEntityInstanceData&& e) : IfcRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcStyledItem::IfcStyledItem(::Ifc4x3_tc1::IfcRepresentationItem* v1_Item, aggregate_of< ::Ifc4x3_tc1::IfcPresentationStyle >::ptr v2_Styles, boost::optional< std::string > v3_Name) : IfcRepresentationItem(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Item ? v1_Item->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Styles)->generalize()); if (v3_Name) {set_attribute_value(2, (*v3_Name)); }; populate_derived(); }

// Function implementations for IfcStyledRepresentation


const IfcParse::entity& Ifc4x3_tc1::IfcStyledRepresentation::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1115]); }
const IfcParse::entity& Ifc4x3_tc1::IfcStyledRepresentation::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1115]); }
Ifc4x3_tc1::IfcStyledRepresentation::IfcStyledRepresentation(IfcEntityInstanceData&& e) : IfcStyleModel(std::move(e)) { }
Ifc4x3_tc1::IfcStyledRepresentation::IfcStyledRepresentation(::Ifc4x3_tc1::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_tc1::IfcRepresentationItem >::ptr v4_Items) : IfcStyleModel(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_ContextOfItems ? v1_ContextOfItems->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_RepresentationIdentifier) {set_attribute_value(1, (*v2_RepresentationIdentifier)); } if (v3_RepresentationType) {set_attribute_value(2, (*v3_RepresentationType)); }set_attribute_value(3, (v4_Items)->generalize());; populate_derived(); }

// Function implementations for IfcSubContractResource
boost::optional< ::Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Value > Ifc4x3_tc1::IfcSubContractResource::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSubContractResourceTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcSubContractResource::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSubContractResource::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1117]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSubContractResource::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1117]); }
Ifc4x3_tc1::IfcSubContractResource::IfcSubContractResource(IfcEntityInstanceData&& e) : IfcConstructionResource(std::move(e)) { }
Ifc4x3_tc1::IfcSubContractResource::IfcSubContractResource(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_tc1::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Value > v11_PredefinedType) : IfcConstructionResource(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_LongDescription) {set_attribute_value(6, (*v7_LongDescription)); }set_attribute_value(7, v8_Usage ? v8_Usage->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v9_BaseCosts) {set_attribute_value(8, (*v9_BaseCosts)->generalize()); }set_attribute_value(9, v10_BaseQuantity ? v10_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Class(),(size_t)*v11_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcSubContractResourceType
::Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Value Ifc4x3_tc1::IfcSubContractResourceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcSubContractResourceTypeEnum::FromString(data_.get_attribute_value(11)); }
void Ifc4x3_tc1::IfcSubContractResourceType::setPredefinedType(::Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Value v) { set_attribute_value(11, EnumerationReference(&::Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(11); }


const IfcParse::entity& Ifc4x3_tc1::IfcSubContractResourceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1118]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSubContractResourceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1118]); }
Ifc4x3_tc1::IfcSubContractResourceType::IfcSubContractResourceType(IfcEntityInstanceData&& e) : IfcConstructionResourceType(std::move(e)) { }
Ifc4x3_tc1::IfcSubContractResourceType::IfcSubContractResourceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_tc1::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Value v12_PredefinedType) : IfcConstructionResourceType(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_Identification) {set_attribute_value(6, (*v7_Identification)); } if (v8_LongDescription) {set_attribute_value(7, (*v8_LongDescription)); } if (v9_ResourceType) {set_attribute_value(8, (*v9_ResourceType)); } if (v10_BaseCosts) {set_attribute_value(9, (*v10_BaseCosts)->generalize()); }set_attribute_value(10, v11_BaseQuantity ? v11_BaseQuantity->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcSubContractResourceTypeEnum::Class(),(size_t)v12_PredefinedType)));; populate_derived(); }

// Function implementations for IfcSubedge
::Ifc4x3_tc1::IfcEdge* Ifc4x3_tc1::IfcSubedge::ParentEdge() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcEdge>(true); }
void Ifc4x3_tc1::IfcSubedge::setParentEdge(::Ifc4x3_tc1::IfcEdge* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcSubedge::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1120]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSubedge::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1120]); }
Ifc4x3_tc1::IfcSubedge::IfcSubedge(IfcEntityInstanceData&& e) : IfcEdge(std::move(e)) { }
Ifc4x3_tc1::IfcSubedge::IfcSubedge(::Ifc4x3_tc1::IfcVertex* v1_EdgeStart, ::Ifc4x3_tc1::IfcVertex* v2_EdgeEnd, ::Ifc4x3_tc1::IfcEdge* v3_ParentEdge) : IfcEdge(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_EdgeStart ? v1_EdgeStart->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_EdgeEnd ? v2_EdgeEnd->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_ParentEdge ? v3_ParentEdge->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcSurface


const IfcParse::entity& Ifc4x3_tc1::IfcSurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1121]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1121]); }
Ifc4x3_tc1::IfcSurface::IfcSurface(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcSurface::IfcSurface() : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcSurfaceCurve
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcSurfaceCurve::Curve3D() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcSurfaceCurve::setCurve3D(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
aggregate_of< ::Ifc4x3_tc1::IfcPcurve >::ptr Ifc4x3_tc1::IfcSurfaceCurve::AssociatedGeometry() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcPcurve >(); }
void Ifc4x3_tc1::IfcSurfaceCurve::setAssociatedGeometry(aggregate_of< ::Ifc4x3_tc1::IfcPcurve >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Value Ifc4x3_tc1::IfcSurfaceCurve::MasterRepresentation() const {  return ::Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::FromString(data_.get_attribute_value(2)); }
void Ifc4x3_tc1::IfcSurfaceCurve::setMasterRepresentation(::Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Value v) { set_attribute_value(2, EnumerationReference(&::Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Class(), (size_t) v));if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1122]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1122]); }
Ifc4x3_tc1::IfcSurfaceCurve::IfcSurfaceCurve(IfcEntityInstanceData&& e) : IfcCurve(std::move(e)) { }
Ifc4x3_tc1::IfcSurfaceCurve::IfcSurfaceCurve(::Ifc4x3_tc1::IfcCurve* v1_Curve3D, aggregate_of< ::Ifc4x3_tc1::IfcPcurve >::ptr v2_AssociatedGeometry, ::Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Value v3_MasterRepresentation) : IfcCurve(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Curve3D ? v1_Curve3D->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_AssociatedGeometry)->generalize());set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcPreferredSurfaceCurveRepresentation::Class(),(size_t)v3_MasterRepresentation)));; populate_derived(); }

// Function implementations for IfcSurfaceCurveSweptAreaSolid
::Ifc4x3_tc1::IfcSurface* Ifc4x3_tc1::IfcSurfaceCurveSweptAreaSolid::ReferenceSurface() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcSurface>(true); }
void Ifc4x3_tc1::IfcSurfaceCurveSweptAreaSolid::setReferenceSurface(::Ifc4x3_tc1::IfcSurface* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceCurveSweptAreaSolid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1123]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceCurveSweptAreaSolid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1123]); }
Ifc4x3_tc1::IfcSurfaceCurveSweptAreaSolid::IfcSurfaceCurveSweptAreaSolid(IfcEntityInstanceData&& e) : IfcDirectrixCurveSweptAreaSolid(std::move(e)) { }
Ifc4x3_tc1::IfcSurfaceCurveSweptAreaSolid::IfcSurfaceCurveSweptAreaSolid(::Ifc4x3_tc1::IfcProfileDef* v1_SweptArea, ::Ifc4x3_tc1::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_tc1::IfcCurve* v3_Directrix, ::Ifc4x3_tc1::IfcCurveMeasureSelect* v4_StartParam, ::Ifc4x3_tc1::IfcCurveMeasureSelect* v5_EndParam, ::Ifc4x3_tc1::IfcSurface* v6_ReferenceSurface) : IfcDirectrixCurveSweptAreaSolid(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, v1_SweptArea ? v1_SweptArea->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Position ? v2_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_Directrix ? v3_Directrix->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_StartParam ? v4_StartParam->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, v5_EndParam ? v5_EndParam->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_ReferenceSurface ? v6_ReferenceSurface->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcSurfaceFeature
boost::optional< ::Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::Value > Ifc4x3_tc1::IfcSurfaceFeature::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcSurfaceFeature::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }

::Ifc4x3_tc1::IfcRelAdheresToElement::list::ptr Ifc4x3_tc1::IfcSurfaceFeature::AdheresToElement() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[896], 5)->as<IfcRelAdheresToElement>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceFeature::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1124]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceFeature::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1124]); }
Ifc4x3_tc1::IfcSurfaceFeature::IfcSurfaceFeature(IfcEntityInstanceData&& e) : IfcFeatureElement(std::move(e)) { }
Ifc4x3_tc1::IfcSurfaceFeature::IfcSurfaceFeature(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::Value > v9_PredefinedType) : IfcFeatureElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcSurfaceFeatureTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcSurfaceOfLinearExtrusion
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcSurfaceOfLinearExtrusion::ExtrudedDirection() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcSurfaceOfLinearExtrusion::setExtrudedDirection(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
double Ifc4x3_tc1::IfcSurfaceOfLinearExtrusion::Depth() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcSurfaceOfLinearExtrusion::setDepth(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceOfLinearExtrusion::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1126]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceOfLinearExtrusion::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1126]); }
Ifc4x3_tc1::IfcSurfaceOfLinearExtrusion::IfcSurfaceOfLinearExtrusion(IfcEntityInstanceData&& e) : IfcSweptSurface(std::move(e)) { }
Ifc4x3_tc1::IfcSurfaceOfLinearExtrusion::IfcSurfaceOfLinearExtrusion(::Ifc4x3_tc1::IfcProfileDef* v1_SweptCurve, ::Ifc4x3_tc1::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_tc1::IfcDirection* v3_ExtrudedDirection, double v4_Depth) : IfcSweptSurface(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_SweptCurve ? v1_SweptCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Position ? v2_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_ExtrudedDirection ? v3_ExtrudedDirection->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Depth));; populate_derived(); }

// Function implementations for IfcSurfaceOfRevolution
::Ifc4x3_tc1::IfcAxis1Placement* Ifc4x3_tc1::IfcSurfaceOfRevolution::AxisPosition() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcAxis1Placement>(true); }
void Ifc4x3_tc1::IfcSurfaceOfRevolution::setAxisPosition(::Ifc4x3_tc1::IfcAxis1Placement* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceOfRevolution::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1127]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceOfRevolution::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1127]); }
Ifc4x3_tc1::IfcSurfaceOfRevolution::IfcSurfaceOfRevolution(IfcEntityInstanceData&& e) : IfcSweptSurface(std::move(e)) { }
Ifc4x3_tc1::IfcSurfaceOfRevolution::IfcSurfaceOfRevolution(::Ifc4x3_tc1::IfcProfileDef* v1_SweptCurve, ::Ifc4x3_tc1::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_tc1::IfcAxis1Placement* v3_AxisPosition) : IfcSweptSurface(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_SweptCurve ? v1_SweptCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Position ? v2_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_AxisPosition ? v3_AxisPosition->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcSurfaceReinforcementArea
boost::optional< std::vector< double > /*[2:3]*/ > Ifc4x3_tc1::IfcSurfaceReinforcementArea::SurfaceReinforcement1() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::vector< double > /*[2:3]*/ v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcSurfaceReinforcementArea::setSurfaceReinforcement1(boost::optional< std::vector< double > /*[2:3]*/ > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::vector< double > /*[2:3]*/ > Ifc4x3_tc1::IfcSurfaceReinforcementArea::SurfaceReinforcement2() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::vector< double > /*[2:3]*/ v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcSurfaceReinforcementArea::setSurfaceReinforcement2(boost::optional< std::vector< double > /*[2:3]*/ > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcSurfaceReinforcementArea::ShearReinforcement() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcSurfaceReinforcementArea::setShearReinforcement(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceReinforcementArea::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1129]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceReinforcementArea::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1129]); }
Ifc4x3_tc1::IfcSurfaceReinforcementArea::IfcSurfaceReinforcementArea(IfcEntityInstanceData&& e) : IfcStructuralLoadOrResult(std::move(e)) { }
Ifc4x3_tc1::IfcSurfaceReinforcementArea::IfcSurfaceReinforcementArea(boost::optional< std::string > v1_Name, boost::optional< std::vector< double > /*[2:3]*/ > v2_SurfaceReinforcement1, boost::optional< std::vector< double > /*[2:3]*/ > v3_SurfaceReinforcement2, boost::optional< double > v4_ShearReinforcement) : IfcStructuralLoadOrResult(IfcEntityInstanceData(storage_t(4))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_SurfaceReinforcement1) {set_attribute_value(1, (*v2_SurfaceReinforcement1)); } if (v3_SurfaceReinforcement2) {set_attribute_value(2, (*v3_SurfaceReinforcement2)); } if (v4_ShearReinforcement) {set_attribute_value(3, (*v4_ShearReinforcement)); }; populate_derived(); }

// Function implementations for IfcSurfaceStyle
::Ifc4x3_tc1::IfcSurfaceSide::Value Ifc4x3_tc1::IfcSurfaceStyle::Side() const {  return ::Ifc4x3_tc1::IfcSurfaceSide::FromString(data_.get_attribute_value(1)); }
void Ifc4x3_tc1::IfcSurfaceStyle::setSide(::Ifc4x3_tc1::IfcSurfaceSide::Value v) { set_attribute_value(1, EnumerationReference(&::Ifc4x3_tc1::IfcSurfaceSide::Class(), (size_t) v));if constexpr (false)unset_attribute_value(1); }
aggregate_of< ::Ifc4x3_tc1::IfcSurfaceStyleElementSelect >::ptr Ifc4x3_tc1::IfcSurfaceStyle::Styles() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcSurfaceStyleElementSelect >(); }
void Ifc4x3_tc1::IfcSurfaceStyle::setStyles(aggregate_of< ::Ifc4x3_tc1::IfcSurfaceStyleElementSelect >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceStyle::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1131]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceStyle::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1131]); }
Ifc4x3_tc1::IfcSurfaceStyle::IfcSurfaceStyle(IfcEntityInstanceData&& e) : IfcPresentationStyle(std::move(e)) { }
Ifc4x3_tc1::IfcSurfaceStyle::IfcSurfaceStyle(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcSurfaceSide::Value v2_Side, aggregate_of< ::Ifc4x3_tc1::IfcSurfaceStyleElementSelect >::ptr v3_Styles) : IfcPresentationStyle(IfcEntityInstanceData(storage_t(3))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcSurfaceSide::Class(),(size_t)v2_Side)));set_attribute_value(2, (v3_Styles)->generalize());; populate_derived(); }

// Function implementations for IfcSurfaceStyleLighting
::Ifc4x3_tc1::IfcColourRgb* Ifc4x3_tc1::IfcSurfaceStyleLighting::DiffuseTransmissionColour() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcColourRgb>(true); }
void Ifc4x3_tc1::IfcSurfaceStyleLighting::setDiffuseTransmissionColour(::Ifc4x3_tc1::IfcColourRgb* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcColourRgb* Ifc4x3_tc1::IfcSurfaceStyleLighting::DiffuseReflectionColour() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcColourRgb>(true); }
void Ifc4x3_tc1::IfcSurfaceStyleLighting::setDiffuseReflectionColour(::Ifc4x3_tc1::IfcColourRgb* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcColourRgb* Ifc4x3_tc1::IfcSurfaceStyleLighting::TransmissionColour() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcColourRgb>(true); }
void Ifc4x3_tc1::IfcSurfaceStyleLighting::setTransmissionColour(::Ifc4x3_tc1::IfcColourRgb* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcColourRgb* Ifc4x3_tc1::IfcSurfaceStyleLighting::ReflectanceColour() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcColourRgb>(true); }
void Ifc4x3_tc1::IfcSurfaceStyleLighting::setReflectanceColour(::Ifc4x3_tc1::IfcColourRgb* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }


const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceStyleLighting::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1133]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceStyleLighting::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1133]); }
Ifc4x3_tc1::IfcSurfaceStyleLighting::IfcSurfaceStyleLighting(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcSurfaceStyleLighting::IfcSurfaceStyleLighting(::Ifc4x3_tc1::IfcColourRgb* v1_DiffuseTransmissionColour, ::Ifc4x3_tc1::IfcColourRgb* v2_DiffuseReflectionColour, ::Ifc4x3_tc1::IfcColourRgb* v3_TransmissionColour, ::Ifc4x3_tc1::IfcColourRgb* v4_ReflectanceColour) : IfcPresentationItem(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_DiffuseTransmissionColour ? v1_DiffuseTransmissionColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_DiffuseReflectionColour ? v2_DiffuseReflectionColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_TransmissionColour ? v3_TransmissionColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_ReflectanceColour ? v4_ReflectanceColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcSurfaceStyleRefraction
boost::optional< double > Ifc4x3_tc1::IfcSurfaceStyleRefraction::RefractionIndex() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } double v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcSurfaceStyleRefraction::setRefractionIndex(boost::optional< double > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< double > Ifc4x3_tc1::IfcSurfaceStyleRefraction::DispersionFactor() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcSurfaceStyleRefraction::setDispersionFactor(boost::optional< double > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceStyleRefraction::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1134]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceStyleRefraction::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1134]); }
Ifc4x3_tc1::IfcSurfaceStyleRefraction::IfcSurfaceStyleRefraction(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcSurfaceStyleRefraction::IfcSurfaceStyleRefraction(boost::optional< double > v1_RefractionIndex, boost::optional< double > v2_DispersionFactor) : IfcPresentationItem(IfcEntityInstanceData(storage_t(2))) {  if (v1_RefractionIndex) {set_attribute_value(0, (*v1_RefractionIndex)); } if (v2_DispersionFactor) {set_attribute_value(1, (*v2_DispersionFactor)); }; populate_derived(); }

// Function implementations for IfcSurfaceStyleRendering
::Ifc4x3_tc1::IfcColourOrFactor* Ifc4x3_tc1::IfcSurfaceStyleRendering::DiffuseColour() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcColourOrFactor>(true); }
void Ifc4x3_tc1::IfcSurfaceStyleRendering::setDiffuseColour(::Ifc4x3_tc1::IfcColourOrFactor* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcColourOrFactor* Ifc4x3_tc1::IfcSurfaceStyleRendering::TransmissionColour() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcColourOrFactor>(true); }
void Ifc4x3_tc1::IfcSurfaceStyleRendering::setTransmissionColour(::Ifc4x3_tc1::IfcColourOrFactor* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
::Ifc4x3_tc1::IfcColourOrFactor* Ifc4x3_tc1::IfcSurfaceStyleRendering::DiffuseTransmissionColour() const { if(data_.get_attribute_value(4).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcColourOrFactor>(true); }
void Ifc4x3_tc1::IfcSurfaceStyleRendering::setDiffuseTransmissionColour(::Ifc4x3_tc1::IfcColourOrFactor* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcColourOrFactor* Ifc4x3_tc1::IfcSurfaceStyleRendering::ReflectionColour() const { if(data_.get_attribute_value(5).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcColourOrFactor>(true); }
void Ifc4x3_tc1::IfcSurfaceStyleRendering::setReflectionColour(::Ifc4x3_tc1::IfcColourOrFactor* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }
::Ifc4x3_tc1::IfcColourOrFactor* Ifc4x3_tc1::IfcSurfaceStyleRendering::SpecularColour() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcColourOrFactor>(true); }
void Ifc4x3_tc1::IfcSurfaceStyleRendering::setSpecularColour(::Ifc4x3_tc1::IfcColourOrFactor* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }
::Ifc4x3_tc1::IfcSpecularHighlightSelect* Ifc4x3_tc1::IfcSurfaceStyleRendering::SpecularHighlight() const { if(data_.get_attribute_value(7).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(7)))->as<::Ifc4x3_tc1::IfcSpecularHighlightSelect>(true); }
void Ifc4x3_tc1::IfcSurfaceStyleRendering::setSpecularHighlight(::Ifc4x3_tc1::IfcSpecularHighlightSelect* v) { set_attribute_value(7, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(7); }
::Ifc4x3_tc1::IfcReflectanceMethodEnum::Value Ifc4x3_tc1::IfcSurfaceStyleRendering::ReflectanceMethod() const {  return ::Ifc4x3_tc1::IfcReflectanceMethodEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcSurfaceStyleRendering::setReflectanceMethod(::Ifc4x3_tc1::IfcReflectanceMethodEnum::Value v) { set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcReflectanceMethodEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceStyleRendering::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1135]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceStyleRendering::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1135]); }
Ifc4x3_tc1::IfcSurfaceStyleRendering::IfcSurfaceStyleRendering(IfcEntityInstanceData&& e) : IfcSurfaceStyleShading(std::move(e)) { }
Ifc4x3_tc1::IfcSurfaceStyleRendering::IfcSurfaceStyleRendering(::Ifc4x3_tc1::IfcColourRgb* v1_SurfaceColour, boost::optional< double > v2_Transparency, ::Ifc4x3_tc1::IfcColourOrFactor* v3_DiffuseColour, ::Ifc4x3_tc1::IfcColourOrFactor* v4_TransmissionColour, ::Ifc4x3_tc1::IfcColourOrFactor* v5_DiffuseTransmissionColour, ::Ifc4x3_tc1::IfcColourOrFactor* v6_ReflectionColour, ::Ifc4x3_tc1::IfcColourOrFactor* v7_SpecularColour, ::Ifc4x3_tc1::IfcSpecularHighlightSelect* v8_SpecularHighlight, ::Ifc4x3_tc1::IfcReflectanceMethodEnum::Value v9_ReflectanceMethod) : IfcSurfaceStyleShading(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, v1_SurfaceColour ? v1_SurfaceColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_Transparency) {set_attribute_value(1, (*v2_Transparency)); }set_attribute_value(2, v3_DiffuseColour ? v3_DiffuseColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_TransmissionColour ? v4_TransmissionColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, v5_DiffuseTransmissionColour ? v5_DiffuseTransmissionColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(5, v6_ReflectionColour ? v6_ReflectionColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_SpecularColour ? v7_SpecularColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(7, v8_SpecularHighlight ? v8_SpecularHighlight->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcReflectanceMethodEnum::Class(),(size_t)v9_ReflectanceMethod)));; populate_derived(); }

// Function implementations for IfcSurfaceStyleShading
::Ifc4x3_tc1::IfcColourRgb* Ifc4x3_tc1::IfcSurfaceStyleShading::SurfaceColour() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcColourRgb>(true); }
void Ifc4x3_tc1::IfcSurfaceStyleShading::setSurfaceColour(::Ifc4x3_tc1::IfcColourRgb* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
boost::optional< double > Ifc4x3_tc1::IfcSurfaceStyleShading::Transparency() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcSurfaceStyleShading::setTransparency(boost::optional< double > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceStyleShading::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1136]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceStyleShading::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1136]); }
Ifc4x3_tc1::IfcSurfaceStyleShading::IfcSurfaceStyleShading(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcSurfaceStyleShading::IfcSurfaceStyleShading(::Ifc4x3_tc1::IfcColourRgb* v1_SurfaceColour, boost::optional< double > v2_Transparency) : IfcPresentationItem(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_SurfaceColour ? v1_SurfaceColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_Transparency) {set_attribute_value(1, (*v2_Transparency)); }; populate_derived(); }

// Function implementations for IfcSurfaceStyleWithTextures
aggregate_of< ::Ifc4x3_tc1::IfcSurfaceTexture >::ptr Ifc4x3_tc1::IfcSurfaceStyleWithTextures::Textures() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcSurfaceTexture >(); }
void Ifc4x3_tc1::IfcSurfaceStyleWithTextures::setTextures(aggregate_of< ::Ifc4x3_tc1::IfcSurfaceTexture >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceStyleWithTextures::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1137]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceStyleWithTextures::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1137]); }
Ifc4x3_tc1::IfcSurfaceStyleWithTextures::IfcSurfaceStyleWithTextures(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcSurfaceStyleWithTextures::IfcSurfaceStyleWithTextures(aggregate_of< ::Ifc4x3_tc1::IfcSurfaceTexture >::ptr v1_Textures) : IfcPresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Textures)->generalize());; populate_derived(); }

// Function implementations for IfcSurfaceTexture
bool Ifc4x3_tc1::IfcSurfaceTexture::RepeatS() const {  bool v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcSurfaceTexture::setRepeatS(bool v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
bool Ifc4x3_tc1::IfcSurfaceTexture::RepeatT() const {  bool v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcSurfaceTexture::setRepeatT(bool v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< std::string > Ifc4x3_tc1::IfcSurfaceTexture::Mode() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcSurfaceTexture::setMode(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
::Ifc4x3_tc1::IfcCartesianTransformationOperator2D* Ifc4x3_tc1::IfcSurfaceTexture::TextureTransform() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcCartesianTransformationOperator2D>(true); }
void Ifc4x3_tc1::IfcSurfaceTexture::setTextureTransform(::Ifc4x3_tc1::IfcCartesianTransformationOperator2D* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_tc1::IfcSurfaceTexture::Parameter() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcSurfaceTexture::setParameter(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }

::Ifc4x3_tc1::IfcTextureCoordinate::list::ptr Ifc4x3_tc1::IfcSurfaceTexture::IsMappedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[1189], 0)->as<IfcTextureCoordinate>(); }
::Ifc4x3_tc1::IfcSurfaceStyleWithTextures::list::ptr Ifc4x3_tc1::IfcSurfaceTexture::UsedInStyles() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[1137], 0)->as<IfcSurfaceStyleWithTextures>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceTexture::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1138]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSurfaceTexture::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1138]); }
Ifc4x3_tc1::IfcSurfaceTexture::IfcSurfaceTexture(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcSurfaceTexture::IfcSurfaceTexture(bool v1_RepeatS, bool v2_RepeatT, boost::optional< std::string > v3_Mode, ::Ifc4x3_tc1::IfcCartesianTransformationOperator2D* v4_TextureTransform, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_Parameter) : IfcPresentationItem(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_RepeatS));set_attribute_value(1, (v2_RepeatT)); if (v3_Mode) {set_attribute_value(2, (*v3_Mode)); }set_attribute_value(3, v4_TextureTransform ? v4_TextureTransform->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_Parameter) {set_attribute_value(4, (*v5_Parameter)); }; populate_derived(); }

// Function implementations for IfcSweptAreaSolid
::Ifc4x3_tc1::IfcProfileDef* Ifc4x3_tc1::IfcSweptAreaSolid::SweptArea() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcProfileDef>(true); }
void Ifc4x3_tc1::IfcSweptAreaSolid::setSweptArea(::Ifc4x3_tc1::IfcProfileDef* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcAxis2Placement3D* Ifc4x3_tc1::IfcSweptAreaSolid::Position() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcAxis2Placement3D>(true); }
void Ifc4x3_tc1::IfcSweptAreaSolid::setPosition(::Ifc4x3_tc1::IfcAxis2Placement3D* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcSweptAreaSolid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1139]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSweptAreaSolid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1139]); }
Ifc4x3_tc1::IfcSweptAreaSolid::IfcSweptAreaSolid(IfcEntityInstanceData&& e) : IfcSolidModel(std::move(e)) { }
Ifc4x3_tc1::IfcSweptAreaSolid::IfcSweptAreaSolid(::Ifc4x3_tc1::IfcProfileDef* v1_SweptArea, ::Ifc4x3_tc1::IfcAxis2Placement3D* v2_Position) : IfcSolidModel(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_SweptArea ? v1_SweptArea->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Position ? v2_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcSweptDiskSolid
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcSweptDiskSolid::Directrix() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcSweptDiskSolid::setDirectrix(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
double Ifc4x3_tc1::IfcSweptDiskSolid::Radius() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcSweptDiskSolid::setRadius(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< double > Ifc4x3_tc1::IfcSweptDiskSolid::InnerRadius() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcSweptDiskSolid::setInnerRadius(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcSweptDiskSolid::StartParam() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcSweptDiskSolid::setStartParam(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< double > Ifc4x3_tc1::IfcSweptDiskSolid::EndParam() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcSweptDiskSolid::setEndParam(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSweptDiskSolid::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1140]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSweptDiskSolid::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1140]); }
Ifc4x3_tc1::IfcSweptDiskSolid::IfcSweptDiskSolid(IfcEntityInstanceData&& e) : IfcSolidModel(std::move(e)) { }
Ifc4x3_tc1::IfcSweptDiskSolid::IfcSweptDiskSolid(::Ifc4x3_tc1::IfcCurve* v1_Directrix, double v2_Radius, boost::optional< double > v3_InnerRadius, boost::optional< double > v4_StartParam, boost::optional< double > v5_EndParam) : IfcSolidModel(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_Directrix ? v1_Directrix->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Radius)); if (v3_InnerRadius) {set_attribute_value(2, (*v3_InnerRadius)); } if (v4_StartParam) {set_attribute_value(3, (*v4_StartParam)); } if (v5_EndParam) {set_attribute_value(4, (*v5_EndParam)); }; populate_derived(); }

// Function implementations for IfcSweptDiskSolidPolygonal
boost::optional< double > Ifc4x3_tc1::IfcSweptDiskSolidPolygonal::FilletRadius() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcSweptDiskSolidPolygonal::setFilletRadius(boost::optional< double > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSweptDiskSolidPolygonal::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1141]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSweptDiskSolidPolygonal::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1141]); }
Ifc4x3_tc1::IfcSweptDiskSolidPolygonal::IfcSweptDiskSolidPolygonal(IfcEntityInstanceData&& e) : IfcSweptDiskSolid(std::move(e)) { }
Ifc4x3_tc1::IfcSweptDiskSolidPolygonal::IfcSweptDiskSolidPolygonal(::Ifc4x3_tc1::IfcCurve* v1_Directrix, double v2_Radius, boost::optional< double > v3_InnerRadius, boost::optional< double > v4_StartParam, boost::optional< double > v5_EndParam, boost::optional< double > v6_FilletRadius) : IfcSweptDiskSolid(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, v1_Directrix ? v1_Directrix->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Radius)); if (v3_InnerRadius) {set_attribute_value(2, (*v3_InnerRadius)); } if (v4_StartParam) {set_attribute_value(3, (*v4_StartParam)); } if (v5_EndParam) {set_attribute_value(4, (*v5_EndParam)); } if (v6_FilletRadius) {set_attribute_value(5, (*v6_FilletRadius)); }; populate_derived(); }

// Function implementations for IfcSweptSurface
::Ifc4x3_tc1::IfcProfileDef* Ifc4x3_tc1::IfcSweptSurface::SweptCurve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcProfileDef>(true); }
void Ifc4x3_tc1::IfcSweptSurface::setSweptCurve(::Ifc4x3_tc1::IfcProfileDef* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcAxis2Placement3D* Ifc4x3_tc1::IfcSweptSurface::Position() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcAxis2Placement3D>(true); }
void Ifc4x3_tc1::IfcSweptSurface::setPosition(::Ifc4x3_tc1::IfcAxis2Placement3D* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcSweptSurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1142]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSweptSurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1142]); }
Ifc4x3_tc1::IfcSweptSurface::IfcSweptSurface(IfcEntityInstanceData&& e) : IfcSurface(std::move(e)) { }
Ifc4x3_tc1::IfcSweptSurface::IfcSweptSurface(::Ifc4x3_tc1::IfcProfileDef* v1_SweptCurve, ::Ifc4x3_tc1::IfcAxis2Placement3D* v2_Position) : IfcSurface(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_SweptCurve ? v1_SweptCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_Position ? v2_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcSwitchingDevice
boost::optional< ::Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Value > Ifc4x3_tc1::IfcSwitchingDevice::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcSwitchingDevice::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSwitchingDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1143]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSwitchingDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1143]); }
Ifc4x3_tc1::IfcSwitchingDevice::IfcSwitchingDevice(IfcEntityInstanceData&& e) : IfcFlowController(std::move(e)) { }
Ifc4x3_tc1::IfcSwitchingDevice::IfcSwitchingDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Value > v9_PredefinedType) : IfcFlowController(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcSwitchingDeviceType
::Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Value Ifc4x3_tc1::IfcSwitchingDeviceType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcSwitchingDeviceType::setPredefinedType(::Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcSwitchingDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1144]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSwitchingDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1144]); }
Ifc4x3_tc1::IfcSwitchingDeviceType::IfcSwitchingDeviceType(IfcEntityInstanceData&& e) : IfcFlowControllerType(std::move(e)) { }
Ifc4x3_tc1::IfcSwitchingDeviceType::IfcSwitchingDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcSwitchingDeviceTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcSystem

::Ifc4x3_tc1::IfcRelServicesBuildings::list::ptr Ifc4x3_tc1::IfcSystem::ServicesBuildings() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[942], 4)->as<IfcRelServicesBuildings>(); }
::Ifc4x3_tc1::IfcRelReferencedInSpatialStructure::list::ptr Ifc4x3_tc1::IfcSystem::ServicesFacilities() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[940], 4)->as<IfcRelReferencedInSpatialStructure>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcSystem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1146]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSystem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1146]); }
Ifc4x3_tc1::IfcSystem::IfcSystem(IfcEntityInstanceData&& e) : IfcGroup(std::move(e)) { }
Ifc4x3_tc1::IfcSystem::IfcSystem(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType) : IfcGroup(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }; populate_derived(); }

// Function implementations for IfcSystemFurnitureElement
boost::optional< ::Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Value > Ifc4x3_tc1::IfcSystemFurnitureElement::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcSystemFurnitureElement::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSystemFurnitureElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1147]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSystemFurnitureElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1147]); }
Ifc4x3_tc1::IfcSystemFurnitureElement::IfcSystemFurnitureElement(IfcEntityInstanceData&& e) : IfcFurnishingElement(std::move(e)) { }
Ifc4x3_tc1::IfcSystemFurnitureElement::IfcSystemFurnitureElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Value > v9_PredefinedType) : IfcFurnishingElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcSystemFurnitureElementType
boost::optional< ::Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Value > Ifc4x3_tc1::IfcSystemFurnitureElementType::PredefinedType() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcSystemFurnitureElementType::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Value > v) { if (v) {set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcSystemFurnitureElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1148]); }
const IfcParse::entity& Ifc4x3_tc1::IfcSystemFurnitureElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1148]); }
Ifc4x3_tc1::IfcSystemFurnitureElementType::IfcSystemFurnitureElementType(IfcEntityInstanceData&& e) : IfcFurnishingElementType(std::move(e)) { }
Ifc4x3_tc1::IfcSystemFurnitureElementType::IfcSystemFurnitureElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, boost::optional< ::Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Value > v10_PredefinedType) : IfcFurnishingElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); } if (v10_PredefinedType) {set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcSystemFurnitureElementTypeEnum::Class(),(size_t)*v10_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcTShapeProfileDef
double Ifc4x3_tc1::IfcTShapeProfileDef::Depth() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcTShapeProfileDef::setDepth(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcTShapeProfileDef::FlangeWidth() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcTShapeProfileDef::setFlangeWidth(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
double Ifc4x3_tc1::IfcTShapeProfileDef::WebThickness() const {  double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcTShapeProfileDef::setWebThickness(double v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
double Ifc4x3_tc1::IfcTShapeProfileDef::FlangeThickness() const {  double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcTShapeProfileDef::setFlangeThickness(double v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
boost::optional< double > Ifc4x3_tc1::IfcTShapeProfileDef::FilletRadius() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcTShapeProfileDef::setFilletRadius(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< double > Ifc4x3_tc1::IfcTShapeProfileDef::FlangeEdgeRadius() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcTShapeProfileDef::setFlangeEdgeRadius(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< double > Ifc4x3_tc1::IfcTShapeProfileDef::WebEdgeRadius() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcTShapeProfileDef::setWebEdgeRadius(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< double > Ifc4x3_tc1::IfcTShapeProfileDef::WebSlope() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcTShapeProfileDef::setWebSlope(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< double > Ifc4x3_tc1::IfcTShapeProfileDef::FlangeSlope() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcTShapeProfileDef::setFlangeSlope(boost::optional< double > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTShapeProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1234]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTShapeProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1234]); }
Ifc4x3_tc1::IfcTShapeProfileDef::IfcTShapeProfileDef(IfcEntityInstanceData&& e) : IfcParameterizedProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcTShapeProfileDef::IfcTShapeProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_Depth, double v5_FlangeWidth, double v6_WebThickness, double v7_FlangeThickness, boost::optional< double > v8_FilletRadius, boost::optional< double > v9_FlangeEdgeRadius, boost::optional< double > v10_WebEdgeRadius, boost::optional< double > v11_WebSlope, boost::optional< double > v12_FlangeSlope) : IfcParameterizedProfileDef(IfcEntityInstanceData(storage_t(12))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Depth));set_attribute_value(4, (v5_FlangeWidth));set_attribute_value(5, (v6_WebThickness));set_attribute_value(6, (v7_FlangeThickness)); if (v8_FilletRadius) {set_attribute_value(7, (*v8_FilletRadius)); } if (v9_FlangeEdgeRadius) {set_attribute_value(8, (*v9_FlangeEdgeRadius)); } if (v10_WebEdgeRadius) {set_attribute_value(9, (*v10_WebEdgeRadius)); } if (v11_WebSlope) {set_attribute_value(10, (*v11_WebSlope)); } if (v12_FlangeSlope) {set_attribute_value(11, (*v12_FlangeSlope)); }; populate_derived(); }

// Function implementations for IfcTable
boost::optional< std::string > Ifc4x3_tc1::IfcTable::Name() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcTable::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcTableRow >::ptr > Ifc4x3_tc1::IfcTable::Rows() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcTableRow >(); }
void Ifc4x3_tc1::IfcTable::setRows(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcTableRow >::ptr > v) { if (v) {set_attribute_value(1, (*v)->generalize());} else {unset_attribute_value(1);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcTableColumn >::ptr > Ifc4x3_tc1::IfcTable::Columns() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcTableColumn >(); }
void Ifc4x3_tc1::IfcTable::setColumns(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcTableColumn >::ptr > v) { if (v) {set_attribute_value(2, (*v)->generalize());} else {unset_attribute_value(2);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTable::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1150]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTable::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1150]); }
Ifc4x3_tc1::IfcTable::IfcTable(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcTable::IfcTable(boost::optional< std::string > v1_Name, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcTableRow >::ptr > v2_Rows, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcTableColumn >::ptr > v3_Columns) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(3))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_Rows) {set_attribute_value(1, (*v2_Rows)->generalize()); } if (v3_Columns) {set_attribute_value(2, (*v3_Columns)->generalize()); }; populate_derived(); }

// Function implementations for IfcTableColumn
boost::optional< std::string > Ifc4x3_tc1::IfcTableColumn::Identifier() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcTableColumn::setIdentifier(boost::optional< std::string > v) { if (v) {set_attribute_value(0, *v);} else {unset_attribute_value(0);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTableColumn::Name() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcTableColumn::setName(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTableColumn::Description() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcTableColumn::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
::Ifc4x3_tc1::IfcUnit* Ifc4x3_tc1::IfcTableColumn::Unit() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcUnit>(true); }
void Ifc4x3_tc1::IfcTableColumn::setUnit(::Ifc4x3_tc1::IfcUnit* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
::Ifc4x3_tc1::IfcReference* Ifc4x3_tc1::IfcTableColumn::ReferencePath() const { if(data_.get_attribute_value(4).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcReference>(true); }
void Ifc4x3_tc1::IfcTableColumn::setReferencePath(::Ifc4x3_tc1::IfcReference* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcTableColumn::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1151]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTableColumn::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1151]); }
Ifc4x3_tc1::IfcTableColumn::IfcTableColumn(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcTableColumn::IfcTableColumn(boost::optional< std::string > v1_Identifier, boost::optional< std::string > v2_Name, boost::optional< std::string > v3_Description, ::Ifc4x3_tc1::IfcUnit* v4_Unit, ::Ifc4x3_tc1::IfcReference* v5_ReferencePath) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(5))) {  if (v1_Identifier) {set_attribute_value(0, (*v1_Identifier)); } if (v2_Name) {set_attribute_value(1, (*v2_Name)); } if (v3_Description) {set_attribute_value(2, (*v3_Description)); }set_attribute_value(3, v4_Unit ? v4_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, v5_ReferencePath ? v5_ReferencePath->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcTableRow
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > Ifc4x3_tc1::IfcTableRow::RowCells() const { if(data_.get_attribute_value(0).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcValue >(); }
void Ifc4x3_tc1::IfcTableRow::setRowCells(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > v) { if (v) {set_attribute_value(0, (*v)->generalize());} else {unset_attribute_value(0);} }
boost::optional< bool > Ifc4x3_tc1::IfcTableRow::IsHeading() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } bool v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcTableRow::setIsHeading(boost::optional< bool > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTableRow::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1152]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTableRow::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1152]); }
Ifc4x3_tc1::IfcTableRow::IfcTableRow(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcTableRow::IfcTableRow(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr > v1_RowCells, boost::optional< bool > v2_IsHeading) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) {  if (v1_RowCells) {set_attribute_value(0, (*v1_RowCells)->generalize()); } if (v2_IsHeading) {set_attribute_value(1, (*v2_IsHeading)); }; populate_derived(); }

// Function implementations for IfcTank
boost::optional< ::Ifc4x3_tc1::IfcTankTypeEnum::Value > Ifc4x3_tc1::IfcTank::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcTankTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcTank::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcTankTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcTankTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTank::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1153]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTank::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1153]); }
Ifc4x3_tc1::IfcTank::IfcTank(IfcEntityInstanceData&& e) : IfcFlowStorageDevice(std::move(e)) { }
Ifc4x3_tc1::IfcTank::IfcTank(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcTankTypeEnum::Value > v9_PredefinedType) : IfcFlowStorageDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcTankTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcTankType
::Ifc4x3_tc1::IfcTankTypeEnum::Value Ifc4x3_tc1::IfcTankType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcTankTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcTankType::setPredefinedType(::Ifc4x3_tc1::IfcTankTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcTankTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcTankType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1154]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTankType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1154]); }
Ifc4x3_tc1::IfcTankType::IfcTankType(IfcEntityInstanceData&& e) : IfcFlowStorageDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcTankType::IfcTankType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcTankTypeEnum::Value v10_PredefinedType) : IfcFlowStorageDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcTankTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcTask
boost::optional< std::string > Ifc4x3_tc1::IfcTask::Status() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcTask::setStatus(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTask::WorkMethod() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcTask::setWorkMethod(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
bool Ifc4x3_tc1::IfcTask::IsMilestone() const {  bool v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcTask::setIsMilestone(bool v) { set_attribute_value(9, v);if constexpr (false)unset_attribute_value(9); }
boost::optional< int > Ifc4x3_tc1::IfcTask::Priority() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } int v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcTask::setPriority(boost::optional< int > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
::Ifc4x3_tc1::IfcTaskTime* Ifc4x3_tc1::IfcTask::TaskTime() const { if(data_.get_attribute_value(11).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(11)))->as<::Ifc4x3_tc1::IfcTaskTime>(true); }
void Ifc4x3_tc1::IfcTask::setTaskTime(::Ifc4x3_tc1::IfcTaskTime* v) { set_attribute_value(11, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(11); }
boost::optional< ::Ifc4x3_tc1::IfcTaskTypeEnum::Value > Ifc4x3_tc1::IfcTask::PredefinedType() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcTaskTypeEnum::FromString(data_.get_attribute_value(12)); }
void Ifc4x3_tc1::IfcTask::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcTaskTypeEnum::Value > v) { if (v) {set_attribute_value(12, EnumerationReference(&::Ifc4x3_tc1::IfcTaskTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(12);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTask::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1156]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTask::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1156]); }
Ifc4x3_tc1::IfcTask::IfcTask(IfcEntityInstanceData&& e) : IfcProcess(std::move(e)) { }
Ifc4x3_tc1::IfcTask::IfcTask(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_WorkMethod, bool v10_IsMilestone, boost::optional< int > v11_Priority, ::Ifc4x3_tc1::IfcTaskTime* v12_TaskTime, boost::optional< ::Ifc4x3_tc1::IfcTaskTypeEnum::Value > v13_PredefinedType) : IfcProcess(IfcEntityInstanceData(storage_t(13))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_LongDescription) {set_attribute_value(6, (*v7_LongDescription)); } if (v8_Status) {set_attribute_value(7, (*v8_Status)); } if (v9_WorkMethod) {set_attribute_value(8, (*v9_WorkMethod)); }set_attribute_value(9, (v10_IsMilestone)); if (v11_Priority) {set_attribute_value(10, (*v11_Priority)); }set_attribute_value(11, v12_TaskTime ? v12_TaskTime->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v13_PredefinedType) {set_attribute_value(12, (EnumerationReference(&::Ifc4x3_tc1::IfcTaskTypeEnum::Class(),(size_t)*v13_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcTaskTime
boost::optional< ::Ifc4x3_tc1::IfcTaskDurationEnum::Value > Ifc4x3_tc1::IfcTaskTime::DurationType() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcTaskDurationEnum::FromString(data_.get_attribute_value(3)); }
void Ifc4x3_tc1::IfcTaskTime::setDurationType(boost::optional< ::Ifc4x3_tc1::IfcTaskDurationEnum::Value > v) { if (v) {set_attribute_value(3, EnumerationReference(&::Ifc4x3_tc1::IfcTaskDurationEnum::Class(), (size_t) *v));} else {unset_attribute_value(3);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::ScheduleDuration() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcTaskTime::setScheduleDuration(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::ScheduleStart() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcTaskTime::setScheduleStart(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::ScheduleFinish() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcTaskTime::setScheduleFinish(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::EarlyStart() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcTaskTime::setEarlyStart(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::EarlyFinish() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcTaskTime::setEarlyFinish(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::LateStart() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcTaskTime::setLateStart(boost::optional< std::string > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::LateFinish() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcTaskTime::setLateFinish(boost::optional< std::string > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::FreeFloat() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcTaskTime::setFreeFloat(boost::optional< std::string > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::TotalFloat() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcTaskTime::setTotalFloat(boost::optional< std::string > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }
boost::optional< bool > Ifc4x3_tc1::IfcTaskTime::IsCritical() const { if(data_.get_attribute_value(13).isNull()) { return boost::none; } bool v = data_.get_attribute_value(13); return v; }
void Ifc4x3_tc1::IfcTaskTime::setIsCritical(boost::optional< bool > v) { if (v) {set_attribute_value(13, *v);} else {unset_attribute_value(13);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::StatusTime() const { if(data_.get_attribute_value(14).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(14); return v; }
void Ifc4x3_tc1::IfcTaskTime::setStatusTime(boost::optional< std::string > v) { if (v) {set_attribute_value(14, *v);} else {unset_attribute_value(14);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::ActualDuration() const { if(data_.get_attribute_value(15).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(15); return v; }
void Ifc4x3_tc1::IfcTaskTime::setActualDuration(boost::optional< std::string > v) { if (v) {set_attribute_value(15, *v);} else {unset_attribute_value(15);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::ActualStart() const { if(data_.get_attribute_value(16).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(16); return v; }
void Ifc4x3_tc1::IfcTaskTime::setActualStart(boost::optional< std::string > v) { if (v) {set_attribute_value(16, *v);} else {unset_attribute_value(16);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::ActualFinish() const { if(data_.get_attribute_value(17).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(17); return v; }
void Ifc4x3_tc1::IfcTaskTime::setActualFinish(boost::optional< std::string > v) { if (v) {set_attribute_value(17, *v);} else {unset_attribute_value(17);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskTime::RemainingTime() const { if(data_.get_attribute_value(18).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(18); return v; }
void Ifc4x3_tc1::IfcTaskTime::setRemainingTime(boost::optional< std::string > v) { if (v) {set_attribute_value(18, *v);} else {unset_attribute_value(18);} }
boost::optional< double > Ifc4x3_tc1::IfcTaskTime::Completion() const { if(data_.get_attribute_value(19).isNull()) { return boost::none; } double v = data_.get_attribute_value(19); return v; }
void Ifc4x3_tc1::IfcTaskTime::setCompletion(boost::optional< double > v) { if (v) {set_attribute_value(19, *v);} else {unset_attribute_value(19);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTaskTime::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1158]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTaskTime::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1158]); }
Ifc4x3_tc1::IfcTaskTime::IfcTaskTime(IfcEntityInstanceData&& e) : IfcSchedulingTime(std::move(e)) { }
Ifc4x3_tc1::IfcTaskTime::IfcTaskTime(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_tc1::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, boost::optional< ::Ifc4x3_tc1::IfcTaskDurationEnum::Value > v4_DurationType, boost::optional< std::string > v5_ScheduleDuration, boost::optional< std::string > v6_ScheduleStart, boost::optional< std::string > v7_ScheduleFinish, boost::optional< std::string > v8_EarlyStart, boost::optional< std::string > v9_EarlyFinish, boost::optional< std::string > v10_LateStart, boost::optional< std::string > v11_LateFinish, boost::optional< std::string > v12_FreeFloat, boost::optional< std::string > v13_TotalFloat, boost::optional< bool > v14_IsCritical, boost::optional< std::string > v15_StatusTime, boost::optional< std::string > v16_ActualDuration, boost::optional< std::string > v17_ActualStart, boost::optional< std::string > v18_ActualFinish, boost::optional< std::string > v19_RemainingTime, boost::optional< double > v20_Completion) : IfcSchedulingTime(IfcEntityInstanceData(storage_t(20))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_DataOrigin) {set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcDataOriginEnum::Class(),(size_t)*v2_DataOrigin))); } if (v3_UserDefinedDataOrigin) {set_attribute_value(2, (*v3_UserDefinedDataOrigin)); } if (v4_DurationType) {set_attribute_value(3, (EnumerationReference(&::Ifc4x3_tc1::IfcTaskDurationEnum::Class(),(size_t)*v4_DurationType))); } if (v5_ScheduleDuration) {set_attribute_value(4, (*v5_ScheduleDuration)); } if (v6_ScheduleStart) {set_attribute_value(5, (*v6_ScheduleStart)); } if (v7_ScheduleFinish) {set_attribute_value(6, (*v7_ScheduleFinish)); } if (v8_EarlyStart) {set_attribute_value(7, (*v8_EarlyStart)); } if (v9_EarlyFinish) {set_attribute_value(8, (*v9_EarlyFinish)); } if (v10_LateStart) {set_attribute_value(9, (*v10_LateStart)); } if (v11_LateFinish) {set_attribute_value(10, (*v11_LateFinish)); } if (v12_FreeFloat) {set_attribute_value(11, (*v12_FreeFloat)); } if (v13_TotalFloat) {set_attribute_value(12, (*v13_TotalFloat)); } if (v14_IsCritical) {set_attribute_value(13, (*v14_IsCritical)); } if (v15_StatusTime) {set_attribute_value(14, (*v15_StatusTime)); } if (v16_ActualDuration) {set_attribute_value(15, (*v16_ActualDuration)); } if (v17_ActualStart) {set_attribute_value(16, (*v17_ActualStart)); } if (v18_ActualFinish) {set_attribute_value(17, (*v18_ActualFinish)); } if (v19_RemainingTime) {set_attribute_value(18, (*v19_RemainingTime)); } if (v20_Completion) {set_attribute_value(19, (*v20_Completion)); }; populate_derived(); }

// Function implementations for IfcTaskTimeRecurring
::Ifc4x3_tc1::IfcRecurrencePattern* Ifc4x3_tc1::IfcTaskTimeRecurring::Recurrence() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(20)))->as<::Ifc4x3_tc1::IfcRecurrencePattern>(true); }
void Ifc4x3_tc1::IfcTaskTimeRecurring::setRecurrence(::Ifc4x3_tc1::IfcRecurrencePattern* v) { set_attribute_value(20, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(20); }


const IfcParse::entity& Ifc4x3_tc1::IfcTaskTimeRecurring::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1159]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTaskTimeRecurring::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1159]); }
Ifc4x3_tc1::IfcTaskTimeRecurring::IfcTaskTimeRecurring(IfcEntityInstanceData&& e) : IfcTaskTime(std::move(e)) { }
Ifc4x3_tc1::IfcTaskTimeRecurring::IfcTaskTimeRecurring(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_tc1::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, boost::optional< ::Ifc4x3_tc1::IfcTaskDurationEnum::Value > v4_DurationType, boost::optional< std::string > v5_ScheduleDuration, boost::optional< std::string > v6_ScheduleStart, boost::optional< std::string > v7_ScheduleFinish, boost::optional< std::string > v8_EarlyStart, boost::optional< std::string > v9_EarlyFinish, boost::optional< std::string > v10_LateStart, boost::optional< std::string > v11_LateFinish, boost::optional< std::string > v12_FreeFloat, boost::optional< std::string > v13_TotalFloat, boost::optional< bool > v14_IsCritical, boost::optional< std::string > v15_StatusTime, boost::optional< std::string > v16_ActualDuration, boost::optional< std::string > v17_ActualStart, boost::optional< std::string > v18_ActualFinish, boost::optional< std::string > v19_RemainingTime, boost::optional< double > v20_Completion, ::Ifc4x3_tc1::IfcRecurrencePattern* v21_Recurrence) : IfcTaskTime(IfcEntityInstanceData(storage_t(21))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_DataOrigin) {set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcDataOriginEnum::Class(),(size_t)*v2_DataOrigin))); } if (v3_UserDefinedDataOrigin) {set_attribute_value(2, (*v3_UserDefinedDataOrigin)); } if (v4_DurationType) {set_attribute_value(3, (EnumerationReference(&::Ifc4x3_tc1::IfcTaskDurationEnum::Class(),(size_t)*v4_DurationType))); } if (v5_ScheduleDuration) {set_attribute_value(4, (*v5_ScheduleDuration)); } if (v6_ScheduleStart) {set_attribute_value(5, (*v6_ScheduleStart)); } if (v7_ScheduleFinish) {set_attribute_value(6, (*v7_ScheduleFinish)); } if (v8_EarlyStart) {set_attribute_value(7, (*v8_EarlyStart)); } if (v9_EarlyFinish) {set_attribute_value(8, (*v9_EarlyFinish)); } if (v10_LateStart) {set_attribute_value(9, (*v10_LateStart)); } if (v11_LateFinish) {set_attribute_value(10, (*v11_LateFinish)); } if (v12_FreeFloat) {set_attribute_value(11, (*v12_FreeFloat)); } if (v13_TotalFloat) {set_attribute_value(12, (*v13_TotalFloat)); } if (v14_IsCritical) {set_attribute_value(13, (*v14_IsCritical)); } if (v15_StatusTime) {set_attribute_value(14, (*v15_StatusTime)); } if (v16_ActualDuration) {set_attribute_value(15, (*v16_ActualDuration)); } if (v17_ActualStart) {set_attribute_value(16, (*v17_ActualStart)); } if (v18_ActualFinish) {set_attribute_value(17, (*v18_ActualFinish)); } if (v19_RemainingTime) {set_attribute_value(18, (*v19_RemainingTime)); } if (v20_Completion) {set_attribute_value(19, (*v20_Completion)); }set_attribute_value(20, v21_Recurrence ? v21_Recurrence->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcTaskType
::Ifc4x3_tc1::IfcTaskTypeEnum::Value Ifc4x3_tc1::IfcTaskType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcTaskTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcTaskType::setPredefinedType(::Ifc4x3_tc1::IfcTaskTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcTaskTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }
boost::optional< std::string > Ifc4x3_tc1::IfcTaskType::WorkMethod() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcTaskType::setWorkMethod(boost::optional< std::string > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTaskType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1160]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTaskType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1160]); }
Ifc4x3_tc1::IfcTaskType::IfcTaskType(IfcEntityInstanceData&& e) : IfcTypeProcess(std::move(e)) { }
Ifc4x3_tc1::IfcTaskType::IfcTaskType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ProcessType, ::Ifc4x3_tc1::IfcTaskTypeEnum::Value v10_PredefinedType, boost::optional< std::string > v11_WorkMethod) : IfcTypeProcess(IfcEntityInstanceData(storage_t(11))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_Identification) {set_attribute_value(6, (*v7_Identification)); } if (v8_LongDescription) {set_attribute_value(7, (*v8_LongDescription)); } if (v9_ProcessType) {set_attribute_value(8, (*v9_ProcessType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcTaskTypeEnum::Class(),(size_t)v10_PredefinedType))); if (v11_WorkMethod) {set_attribute_value(10, (*v11_WorkMethod)); }; populate_derived(); }

// Function implementations for IfcTelecomAddress
boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_tc1::IfcTelecomAddress::TelephoneNumbers() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcTelecomAddress::setTelephoneNumbers(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_tc1::IfcTelecomAddress::FacsimileNumbers() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcTelecomAddress::setFacsimileNumbers(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTelecomAddress::PagerNumber() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcTelecomAddress::setPagerNumber(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_tc1::IfcTelecomAddress::ElectronicMailAddresses() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcTelecomAddress::setElectronicMailAddresses(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTelecomAddress::WWWHomePageURL() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcTelecomAddress::setWWWHomePageURL(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_tc1::IfcTelecomAddress::MessagingIDs() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcTelecomAddress::setMessagingIDs(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTelecomAddress::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1162]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTelecomAddress::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1162]); }
Ifc4x3_tc1::IfcTelecomAddress::IfcTelecomAddress(IfcEntityInstanceData&& e) : IfcAddress(std::move(e)) { }
Ifc4x3_tc1::IfcTelecomAddress::IfcTelecomAddress(boost::optional< ::Ifc4x3_tc1::IfcAddressTypeEnum::Value > v1_Purpose, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_UserDefinedPurpose, boost::optional< std::vector< std::string > /*[1:?]*/ > v4_TelephoneNumbers, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_FacsimileNumbers, boost::optional< std::string > v6_PagerNumber, boost::optional< std::vector< std::string > /*[1:?]*/ > v7_ElectronicMailAddresses, boost::optional< std::string > v8_WWWHomePageURL, boost::optional< std::vector< std::string > /*[1:?]*/ > v9_MessagingIDs) : IfcAddress(IfcEntityInstanceData(storage_t(9))) {  if (v1_Purpose) {set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcAddressTypeEnum::Class(),(size_t)*v1_Purpose))); } if (v2_Description) {set_attribute_value(1, (*v2_Description)); } if (v3_UserDefinedPurpose) {set_attribute_value(2, (*v3_UserDefinedPurpose)); } if (v4_TelephoneNumbers) {set_attribute_value(3, (*v4_TelephoneNumbers)); } if (v5_FacsimileNumbers) {set_attribute_value(4, (*v5_FacsimileNumbers)); } if (v6_PagerNumber) {set_attribute_value(5, (*v6_PagerNumber)); } if (v7_ElectronicMailAddresses) {set_attribute_value(6, (*v7_ElectronicMailAddresses)); } if (v8_WWWHomePageURL) {set_attribute_value(7, (*v8_WWWHomePageURL)); } if (v9_MessagingIDs) {set_attribute_value(8, (*v9_MessagingIDs)); }; populate_derived(); }

// Function implementations for IfcTendon
boost::optional< ::Ifc4x3_tc1::IfcTendonTypeEnum::Value > Ifc4x3_tc1::IfcTendon::PredefinedType() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcTendonTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcTendon::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcTendonTypeEnum::Value > v) { if (v) {set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcTendonTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(9);} }
boost::optional< double > Ifc4x3_tc1::IfcTendon::NominalDiameter() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcTendon::setNominalDiameter(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< double > Ifc4x3_tc1::IfcTendon::CrossSectionArea() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcTendon::setCrossSectionArea(boost::optional< double > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< double > Ifc4x3_tc1::IfcTendon::TensionForce() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } double v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcTendon::setTensionForce(boost::optional< double > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }
boost::optional< double > Ifc4x3_tc1::IfcTendon::PreStress() const { if(data_.get_attribute_value(13).isNull()) { return boost::none; } double v = data_.get_attribute_value(13); return v; }
void Ifc4x3_tc1::IfcTendon::setPreStress(boost::optional< double > v) { if (v) {set_attribute_value(13, *v);} else {unset_attribute_value(13);} }
boost::optional< double > Ifc4x3_tc1::IfcTendon::FrictionCoefficient() const { if(data_.get_attribute_value(14).isNull()) { return boost::none; } double v = data_.get_attribute_value(14); return v; }
void Ifc4x3_tc1::IfcTendon::setFrictionCoefficient(boost::optional< double > v) { if (v) {set_attribute_value(14, *v);} else {unset_attribute_value(14);} }
boost::optional< double > Ifc4x3_tc1::IfcTendon::AnchorageSlip() const { if(data_.get_attribute_value(15).isNull()) { return boost::none; } double v = data_.get_attribute_value(15); return v; }
void Ifc4x3_tc1::IfcTendon::setAnchorageSlip(boost::optional< double > v) { if (v) {set_attribute_value(15, *v);} else {unset_attribute_value(15);} }
boost::optional< double > Ifc4x3_tc1::IfcTendon::MinCurvatureRadius() const { if(data_.get_attribute_value(16).isNull()) { return boost::none; } double v = data_.get_attribute_value(16); return v; }
void Ifc4x3_tc1::IfcTendon::setMinCurvatureRadius(boost::optional< double > v) { if (v) {set_attribute_value(16, *v);} else {unset_attribute_value(16);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTendon::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1165]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTendon::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1165]); }
Ifc4x3_tc1::IfcTendon::IfcTendon(IfcEntityInstanceData&& e) : IfcReinforcingElement(std::move(e)) { }
Ifc4x3_tc1::IfcTendon::IfcTendon(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< ::Ifc4x3_tc1::IfcTendonTypeEnum::Value > v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_CrossSectionArea, boost::optional< double > v13_TensionForce, boost::optional< double > v14_PreStress, boost::optional< double > v15_FrictionCoefficient, boost::optional< double > v16_AnchorageSlip, boost::optional< double > v17_MinCurvatureRadius) : IfcReinforcingElement(IfcEntityInstanceData(storage_t(17))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_SteelGrade) {set_attribute_value(8, (*v9_SteelGrade)); } if (v10_PredefinedType) {set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcTendonTypeEnum::Class(),(size_t)*v10_PredefinedType))); } if (v11_NominalDiameter) {set_attribute_value(10, (*v11_NominalDiameter)); } if (v12_CrossSectionArea) {set_attribute_value(11, (*v12_CrossSectionArea)); } if (v13_TensionForce) {set_attribute_value(12, (*v13_TensionForce)); } if (v14_PreStress) {set_attribute_value(13, (*v14_PreStress)); } if (v15_FrictionCoefficient) {set_attribute_value(14, (*v15_FrictionCoefficient)); } if (v16_AnchorageSlip) {set_attribute_value(15, (*v16_AnchorageSlip)); } if (v17_MinCurvatureRadius) {set_attribute_value(16, (*v17_MinCurvatureRadius)); }; populate_derived(); }

// Function implementations for IfcTendonAnchor
boost::optional< ::Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Value > Ifc4x3_tc1::IfcTendonAnchor::PredefinedType() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcTendonAnchorTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcTendonAnchor::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Value > v) { if (v) {set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTendonAnchor::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1166]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTendonAnchor::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1166]); }
Ifc4x3_tc1::IfcTendonAnchor::IfcTendonAnchor(IfcEntityInstanceData&& e) : IfcReinforcingElement(std::move(e)) { }
Ifc4x3_tc1::IfcTendonAnchor::IfcTendonAnchor(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< ::Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Value > v10_PredefinedType) : IfcReinforcingElement(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_SteelGrade) {set_attribute_value(8, (*v9_SteelGrade)); } if (v10_PredefinedType) {set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Class(),(size_t)*v10_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcTendonAnchorType
::Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Value Ifc4x3_tc1::IfcTendonAnchorType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcTendonAnchorTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcTendonAnchorType::setPredefinedType(::Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcTendonAnchorType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1167]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTendonAnchorType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1167]); }
Ifc4x3_tc1::IfcTendonAnchorType::IfcTendonAnchorType(IfcEntityInstanceData&& e) : IfcReinforcingElementType(std::move(e)) { }
Ifc4x3_tc1::IfcTendonAnchorType::IfcTendonAnchorType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Value v10_PredefinedType) : IfcReinforcingElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcTendonAnchorTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcTendonConduit
::Ifc4x3_tc1::IfcTendonConduitTypeEnum::Value Ifc4x3_tc1::IfcTendonConduit::PredefinedType() const {  return ::Ifc4x3_tc1::IfcTendonConduitTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcTendonConduit::setPredefinedType(::Ifc4x3_tc1::IfcTendonConduitTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcTendonConduitTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcTendonConduit::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1169]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTendonConduit::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1169]); }
Ifc4x3_tc1::IfcTendonConduit::IfcTendonConduit(IfcEntityInstanceData&& e) : IfcReinforcingElement(std::move(e)) { }
Ifc4x3_tc1::IfcTendonConduit::IfcTendonConduit(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, ::Ifc4x3_tc1::IfcTendonConduitTypeEnum::Value v10_PredefinedType) : IfcReinforcingElement(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_SteelGrade) {set_attribute_value(8, (*v9_SteelGrade)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcTendonConduitTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcTendonConduitType
::Ifc4x3_tc1::IfcTendonConduitTypeEnum::Value Ifc4x3_tc1::IfcTendonConduitType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcTendonConduitTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcTendonConduitType::setPredefinedType(::Ifc4x3_tc1::IfcTendonConduitTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcTendonConduitTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcTendonConduitType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1170]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTendonConduitType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1170]); }
Ifc4x3_tc1::IfcTendonConduitType::IfcTendonConduitType(IfcEntityInstanceData&& e) : IfcReinforcingElementType(std::move(e)) { }
Ifc4x3_tc1::IfcTendonConduitType::IfcTendonConduitType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcTendonConduitTypeEnum::Value v10_PredefinedType) : IfcReinforcingElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcTendonConduitTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcTendonType
::Ifc4x3_tc1::IfcTendonTypeEnum::Value Ifc4x3_tc1::IfcTendonType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcTendonTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcTendonType::setPredefinedType(::Ifc4x3_tc1::IfcTendonTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcTendonTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }
boost::optional< double > Ifc4x3_tc1::IfcTendonType::NominalDiameter() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcTendonType::setNominalDiameter(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< double > Ifc4x3_tc1::IfcTendonType::CrossSectionArea() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcTendonType::setCrossSectionArea(boost::optional< double > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< double > Ifc4x3_tc1::IfcTendonType::SheathDiameter() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } double v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcTendonType::setSheathDiameter(boost::optional< double > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTendonType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1172]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTendonType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1172]); }
Ifc4x3_tc1::IfcTendonType::IfcTendonType(IfcEntityInstanceData&& e) : IfcReinforcingElementType(std::move(e)) { }
Ifc4x3_tc1::IfcTendonType::IfcTendonType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcTendonTypeEnum::Value v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_CrossSectionArea, boost::optional< double > v13_SheathDiameter) : IfcReinforcingElementType(IfcEntityInstanceData(storage_t(13))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcTendonTypeEnum::Class(),(size_t)v10_PredefinedType))); if (v11_NominalDiameter) {set_attribute_value(10, (*v11_NominalDiameter)); } if (v12_CrossSectionArea) {set_attribute_value(11, (*v12_CrossSectionArea)); } if (v13_SheathDiameter) {set_attribute_value(12, (*v13_SheathDiameter)); }; populate_derived(); }

// Function implementations for IfcTessellatedFaceSet
::Ifc4x3_tc1::IfcCartesianPointList3D* Ifc4x3_tc1::IfcTessellatedFaceSet::Coordinates() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCartesianPointList3D>(true); }
void Ifc4x3_tc1::IfcTessellatedFaceSet::setCoordinates(::Ifc4x3_tc1::IfcCartesianPointList3D* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }

::Ifc4x3_tc1::IfcIndexedColourMap::list::ptr Ifc4x3_tc1::IfcTessellatedFaceSet::HasColours() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[541], 0)->as<IfcIndexedColourMap>(); }
::Ifc4x3_tc1::IfcIndexedTextureMap::list::ptr Ifc4x3_tc1::IfcTessellatedFaceSet::HasTextures() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[546], 1)->as<IfcIndexedTextureMap>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcTessellatedFaceSet::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1174]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTessellatedFaceSet::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1174]); }
Ifc4x3_tc1::IfcTessellatedFaceSet::IfcTessellatedFaceSet(IfcEntityInstanceData&& e) : IfcTessellatedItem(std::move(e)) { }
Ifc4x3_tc1::IfcTessellatedFaceSet::IfcTessellatedFaceSet(::Ifc4x3_tc1::IfcCartesianPointList3D* v1_Coordinates) : IfcTessellatedItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_Coordinates ? v1_Coordinates->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcTessellatedItem


const IfcParse::entity& Ifc4x3_tc1::IfcTessellatedItem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1175]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTessellatedItem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1175]); }
Ifc4x3_tc1::IfcTessellatedItem::IfcTessellatedItem(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcTessellatedItem::IfcTessellatedItem() : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcTextLiteral
std::string Ifc4x3_tc1::IfcTextLiteral::Literal() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcTextLiteral::setLiteral(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcAxis2Placement* Ifc4x3_tc1::IfcTextLiteral::Placement() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcAxis2Placement>(true); }
void Ifc4x3_tc1::IfcTextLiteral::setPlacement(::Ifc4x3_tc1::IfcAxis2Placement* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcTextPath::Value Ifc4x3_tc1::IfcTextLiteral::Path() const {  return ::Ifc4x3_tc1::IfcTextPath::FromString(data_.get_attribute_value(2)); }
void Ifc4x3_tc1::IfcTextLiteral::setPath(::Ifc4x3_tc1::IfcTextPath::Value v) { set_attribute_value(2, EnumerationReference(&::Ifc4x3_tc1::IfcTextPath::Class(), (size_t) v));if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcTextLiteral::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1181]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTextLiteral::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1181]); }
Ifc4x3_tc1::IfcTextLiteral::IfcTextLiteral(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcTextLiteral::IfcTextLiteral(std::string v1_Literal, ::Ifc4x3_tc1::IfcAxis2Placement* v2_Placement, ::Ifc4x3_tc1::IfcTextPath::Value v3_Path) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_Literal));set_attribute_value(1, v2_Placement ? v2_Placement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcTextPath::Class(),(size_t)v3_Path)));; populate_derived(); }

// Function implementations for IfcTextLiteralWithExtent
::Ifc4x3_tc1::IfcPlanarExtent* Ifc4x3_tc1::IfcTextLiteralWithExtent::Extent() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcPlanarExtent>(true); }
void Ifc4x3_tc1::IfcTextLiteralWithExtent::setExtent(::Ifc4x3_tc1::IfcPlanarExtent* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
std::string Ifc4x3_tc1::IfcTextLiteralWithExtent::BoxAlignment() const {  std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcTextLiteralWithExtent::setBoxAlignment(std::string v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcTextLiteralWithExtent::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1182]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTextLiteralWithExtent::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1182]); }
Ifc4x3_tc1::IfcTextLiteralWithExtent::IfcTextLiteralWithExtent(IfcEntityInstanceData&& e) : IfcTextLiteral(std::move(e)) { }
Ifc4x3_tc1::IfcTextLiteralWithExtent::IfcTextLiteralWithExtent(std::string v1_Literal, ::Ifc4x3_tc1::IfcAxis2Placement* v2_Placement, ::Ifc4x3_tc1::IfcTextPath::Value v3_Path, ::Ifc4x3_tc1::IfcPlanarExtent* v4_Extent, std::string v5_BoxAlignment) : IfcTextLiteral(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, (v1_Literal));set_attribute_value(1, v2_Placement ? v2_Placement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, (EnumerationReference(&::Ifc4x3_tc1::IfcTextPath::Class(),(size_t)v3_Path)));set_attribute_value(3, v4_Extent ? v4_Extent->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, (v5_BoxAlignment));; populate_derived(); }

// Function implementations for IfcTextStyle
::Ifc4x3_tc1::IfcTextStyleForDefinedFont* Ifc4x3_tc1::IfcTextStyle::TextCharacterAppearance() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcTextStyleForDefinedFont>(true); }
void Ifc4x3_tc1::IfcTextStyle::setTextCharacterAppearance(::Ifc4x3_tc1::IfcTextStyleForDefinedFont* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcTextStyleTextModel* Ifc4x3_tc1::IfcTextStyle::TextStyle() const { if(data_.get_attribute_value(2).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcTextStyleTextModel>(true); }
void Ifc4x3_tc1::IfcTextStyle::setTextStyle(::Ifc4x3_tc1::IfcTextStyleTextModel* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }
::Ifc4x3_tc1::IfcTextFontSelect* Ifc4x3_tc1::IfcTextStyle::TextFontStyle() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcTextFontSelect>(true); }
void Ifc4x3_tc1::IfcTextStyle::setTextFontStyle(::Ifc4x3_tc1::IfcTextFontSelect* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
boost::optional< bool > Ifc4x3_tc1::IfcTextStyle::ModelOrDraughting() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } bool v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcTextStyle::setModelOrDraughting(boost::optional< bool > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTextStyle::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1184]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTextStyle::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1184]); }
Ifc4x3_tc1::IfcTextStyle::IfcTextStyle(IfcEntityInstanceData&& e) : IfcPresentationStyle(std::move(e)) { }
Ifc4x3_tc1::IfcTextStyle::IfcTextStyle(boost::optional< std::string > v1_Name, ::Ifc4x3_tc1::IfcTextStyleForDefinedFont* v2_TextCharacterAppearance, ::Ifc4x3_tc1::IfcTextStyleTextModel* v3_TextStyle, ::Ifc4x3_tc1::IfcTextFontSelect* v4_TextFontStyle, boost::optional< bool > v5_ModelOrDraughting) : IfcPresentationStyle(IfcEntityInstanceData(storage_t(5))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); }set_attribute_value(1, v2_TextCharacterAppearance ? v2_TextCharacterAppearance->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, v3_TextStyle ? v3_TextStyle->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, v4_TextFontStyle ? v4_TextFontStyle->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_ModelOrDraughting) {set_attribute_value(4, (*v5_ModelOrDraughting)); }; populate_derived(); }

// Function implementations for IfcTextStyleFontModel
std::vector< std::string > /*[1:?]*/ Ifc4x3_tc1::IfcTextStyleFontModel::FontFamily() const {  std::vector< std::string > /*[1:?]*/ v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcTextStyleFontModel::setFontFamily(std::vector< std::string > /*[1:?]*/ v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< std::string > Ifc4x3_tc1::IfcTextStyleFontModel::FontStyle() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcTextStyleFontModel::setFontStyle(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTextStyleFontModel::FontVariant() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcTextStyleFontModel::setFontVariant(boost::optional< std::string > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTextStyleFontModel::FontWeight() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcTextStyleFontModel::setFontWeight(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
::Ifc4x3_tc1::IfcSizeSelect* Ifc4x3_tc1::IfcTextStyleFontModel::FontSize() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(5)))->as<::Ifc4x3_tc1::IfcSizeSelect>(true); }
void Ifc4x3_tc1::IfcTextStyleFontModel::setFontSize(::Ifc4x3_tc1::IfcSizeSelect* v) { set_attribute_value(5, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcTextStyleFontModel::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1185]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTextStyleFontModel::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1185]); }
Ifc4x3_tc1::IfcTextStyleFontModel::IfcTextStyleFontModel(IfcEntityInstanceData&& e) : IfcPreDefinedTextFont(std::move(e)) { }
Ifc4x3_tc1::IfcTextStyleFontModel::IfcTextStyleFontModel(std::string v1_Name, std::vector< std::string > /*[1:?]*/ v2_FontFamily, boost::optional< std::string > v3_FontStyle, boost::optional< std::string > v4_FontVariant, boost::optional< std::string > v5_FontWeight, ::Ifc4x3_tc1::IfcSizeSelect* v6_FontSize) : IfcPreDefinedTextFont(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_Name));set_attribute_value(1, (v2_FontFamily)); if (v3_FontStyle) {set_attribute_value(2, (*v3_FontStyle)); } if (v4_FontVariant) {set_attribute_value(3, (*v4_FontVariant)); } if (v5_FontWeight) {set_attribute_value(4, (*v5_FontWeight)); }set_attribute_value(5, v6_FontSize ? v6_FontSize->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcTextStyleForDefinedFont
::Ifc4x3_tc1::IfcColour* Ifc4x3_tc1::IfcTextStyleForDefinedFont::Colour() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcColour>(true); }
void Ifc4x3_tc1::IfcTextStyleForDefinedFont::setColour(::Ifc4x3_tc1::IfcColour* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcColour* Ifc4x3_tc1::IfcTextStyleForDefinedFont::BackgroundColour() const { if(data_.get_attribute_value(1).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcColour>(true); }
void Ifc4x3_tc1::IfcTextStyleForDefinedFont::setBackgroundColour(::Ifc4x3_tc1::IfcColour* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcTextStyleForDefinedFont::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1186]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTextStyleForDefinedFont::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1186]); }
Ifc4x3_tc1::IfcTextStyleForDefinedFont::IfcTextStyleForDefinedFont(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcTextStyleForDefinedFont::IfcTextStyleForDefinedFont(::Ifc4x3_tc1::IfcColour* v1_Colour, ::Ifc4x3_tc1::IfcColour* v2_BackgroundColour) : IfcPresentationItem(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Colour ? v1_Colour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, v2_BackgroundColour ? v2_BackgroundColour->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcTextStyleTextModel
::Ifc4x3_tc1::IfcSizeSelect* Ifc4x3_tc1::IfcTextStyleTextModel::TextIndent() const { if(data_.get_attribute_value(0).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcSizeSelect>(true); }
void Ifc4x3_tc1::IfcTextStyleTextModel::setTextIndent(::Ifc4x3_tc1::IfcSizeSelect* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcTextStyleTextModel::TextAlign() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcTextStyleTextModel::setTextAlign(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTextStyleTextModel::TextDecoration() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcTextStyleTextModel::setTextDecoration(boost::optional< std::string > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
::Ifc4x3_tc1::IfcSizeSelect* Ifc4x3_tc1::IfcTextStyleTextModel::LetterSpacing() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcSizeSelect>(true); }
void Ifc4x3_tc1::IfcTextStyleTextModel::setLetterSpacing(::Ifc4x3_tc1::IfcSizeSelect* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
::Ifc4x3_tc1::IfcSizeSelect* Ifc4x3_tc1::IfcTextStyleTextModel::WordSpacing() const { if(data_.get_attribute_value(4).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(4)))->as<::Ifc4x3_tc1::IfcSizeSelect>(true); }
void Ifc4x3_tc1::IfcTextStyleTextModel::setWordSpacing(::Ifc4x3_tc1::IfcSizeSelect* v) { set_attribute_value(4, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(4); }
boost::optional< std::string > Ifc4x3_tc1::IfcTextStyleTextModel::TextTransform() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcTextStyleTextModel::setTextTransform(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
::Ifc4x3_tc1::IfcSizeSelect* Ifc4x3_tc1::IfcTextStyleTextModel::LineHeight() const { if(data_.get_attribute_value(6).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(6)))->as<::Ifc4x3_tc1::IfcSizeSelect>(true); }
void Ifc4x3_tc1::IfcTextStyleTextModel::setLineHeight(::Ifc4x3_tc1::IfcSizeSelect* v) { set_attribute_value(6, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcTextStyleTextModel::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1187]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTextStyleTextModel::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1187]); }
Ifc4x3_tc1::IfcTextStyleTextModel::IfcTextStyleTextModel(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcTextStyleTextModel::IfcTextStyleTextModel(::Ifc4x3_tc1::IfcSizeSelect* v1_TextIndent, boost::optional< std::string > v2_TextAlign, boost::optional< std::string > v3_TextDecoration, ::Ifc4x3_tc1::IfcSizeSelect* v4_LetterSpacing, ::Ifc4x3_tc1::IfcSizeSelect* v5_WordSpacing, boost::optional< std::string > v6_TextTransform, ::Ifc4x3_tc1::IfcSizeSelect* v7_LineHeight) : IfcPresentationItem(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, v1_TextIndent ? v1_TextIndent->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_TextAlign) {set_attribute_value(1, (*v2_TextAlign)); } if (v3_TextDecoration) {set_attribute_value(2, (*v3_TextDecoration)); }set_attribute_value(3, v4_LetterSpacing ? v4_LetterSpacing->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(4, v5_WordSpacing ? v5_WordSpacing->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v6_TextTransform) {set_attribute_value(5, (*v6_TextTransform)); }set_attribute_value(6, v7_LineHeight ? v7_LineHeight->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcTextureCoordinate
aggregate_of< ::Ifc4x3_tc1::IfcSurfaceTexture >::ptr Ifc4x3_tc1::IfcTextureCoordinate::Maps() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcSurfaceTexture >(); }
void Ifc4x3_tc1::IfcTextureCoordinate::setMaps(aggregate_of< ::Ifc4x3_tc1::IfcSurfaceTexture >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcTextureCoordinate::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1189]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTextureCoordinate::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1189]); }
Ifc4x3_tc1::IfcTextureCoordinate::IfcTextureCoordinate(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcTextureCoordinate::IfcTextureCoordinate(aggregate_of< ::Ifc4x3_tc1::IfcSurfaceTexture >::ptr v1_Maps) : IfcPresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Maps)->generalize());; populate_derived(); }

// Function implementations for IfcTextureCoordinateGenerator
std::string Ifc4x3_tc1::IfcTextureCoordinateGenerator::Mode() const {  std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcTextureCoordinateGenerator::setMode(std::string v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< std::vector< double > /*[1:?]*/ > Ifc4x3_tc1::IfcTextureCoordinateGenerator::Parameter() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } std::vector< double > /*[1:?]*/ v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcTextureCoordinateGenerator::setParameter(boost::optional< std::vector< double > /*[1:?]*/ > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTextureCoordinateGenerator::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1190]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTextureCoordinateGenerator::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1190]); }
Ifc4x3_tc1::IfcTextureCoordinateGenerator::IfcTextureCoordinateGenerator(IfcEntityInstanceData&& e) : IfcTextureCoordinate(std::move(e)) { }
Ifc4x3_tc1::IfcTextureCoordinateGenerator::IfcTextureCoordinateGenerator(aggregate_of< ::Ifc4x3_tc1::IfcSurfaceTexture >::ptr v1_Maps, std::string v2_Mode, boost::optional< std::vector< double > /*[1:?]*/ > v3_Parameter) : IfcTextureCoordinate(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_Maps)->generalize());set_attribute_value(1, (v2_Mode)); if (v3_Parameter) {set_attribute_value(2, (*v3_Parameter)); }; populate_derived(); }

// Function implementations for IfcTextureCoordinateIndices
std::vector< int > /*[3:?]*/ Ifc4x3_tc1::IfcTextureCoordinateIndices::TexCoordIndex() const {  std::vector< int > /*[3:?]*/ v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcTextureCoordinateIndices::setTexCoordIndex(std::vector< int > /*[3:?]*/ v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
::Ifc4x3_tc1::IfcIndexedPolygonalFace* Ifc4x3_tc1::IfcTextureCoordinateIndices::TexCoordsOf() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(1)))->as<::Ifc4x3_tc1::IfcIndexedPolygonalFace>(true); }
void Ifc4x3_tc1::IfcTextureCoordinateIndices::setTexCoordsOf(::Ifc4x3_tc1::IfcIndexedPolygonalFace* v) { set_attribute_value(1, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(1); }

::Ifc4x3_tc1::IfcIndexedPolygonalTextureMap::list::ptr Ifc4x3_tc1::IfcTextureCoordinateIndices::ToTexMap() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[545], 3)->as<IfcIndexedPolygonalTextureMap>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcTextureCoordinateIndices::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1191]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTextureCoordinateIndices::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1191]); }
Ifc4x3_tc1::IfcTextureCoordinateIndices::IfcTextureCoordinateIndices(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcTextureCoordinateIndices::IfcTextureCoordinateIndices(std::vector< int > /*[3:?]*/ v1_TexCoordIndex, ::Ifc4x3_tc1::IfcIndexedPolygonalFace* v2_TexCoordsOf) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_TexCoordIndex));set_attribute_value(1, v2_TexCoordsOf ? v2_TexCoordsOf->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcTextureCoordinateIndicesWithVoids
std::vector< std::vector< int > > Ifc4x3_tc1::IfcTextureCoordinateIndicesWithVoids::InnerTexCoordIndices() const {  std::vector< std::vector< int > > v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcTextureCoordinateIndicesWithVoids::setInnerTexCoordIndices(std::vector< std::vector< int > > v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcTextureCoordinateIndicesWithVoids::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1192]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTextureCoordinateIndicesWithVoids::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1192]); }
Ifc4x3_tc1::IfcTextureCoordinateIndicesWithVoids::IfcTextureCoordinateIndicesWithVoids(IfcEntityInstanceData&& e) : IfcTextureCoordinateIndices(std::move(e)) { }
Ifc4x3_tc1::IfcTextureCoordinateIndicesWithVoids::IfcTextureCoordinateIndicesWithVoids(std::vector< int > /*[3:?]*/ v1_TexCoordIndex, ::Ifc4x3_tc1::IfcIndexedPolygonalFace* v2_TexCoordsOf, std::vector< std::vector< int > > v3_InnerTexCoordIndices) : IfcTextureCoordinateIndices(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_TexCoordIndex));set_attribute_value(1, v2_TexCoordsOf ? v2_TexCoordsOf->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(2, (v3_InnerTexCoordIndices));; populate_derived(); }

// Function implementations for IfcTextureMap
aggregate_of< ::Ifc4x3_tc1::IfcTextureVertex >::ptr Ifc4x3_tc1::IfcTextureMap::Vertices() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcTextureVertex >(); }
void Ifc4x3_tc1::IfcTextureMap::setVertices(aggregate_of< ::Ifc4x3_tc1::IfcTextureVertex >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }
::Ifc4x3_tc1::IfcFace* Ifc4x3_tc1::IfcTextureMap::MappedTo() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(2)))->as<::Ifc4x3_tc1::IfcFace>(true); }
void Ifc4x3_tc1::IfcTextureMap::setMappedTo(::Ifc4x3_tc1::IfcFace* v) { set_attribute_value(2, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcTextureMap::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1193]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTextureMap::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1193]); }
Ifc4x3_tc1::IfcTextureMap::IfcTextureMap(IfcEntityInstanceData&& e) : IfcTextureCoordinate(std::move(e)) { }
Ifc4x3_tc1::IfcTextureMap::IfcTextureMap(aggregate_of< ::Ifc4x3_tc1::IfcSurfaceTexture >::ptr v1_Maps, aggregate_of< ::Ifc4x3_tc1::IfcTextureVertex >::ptr v2_Vertices, ::Ifc4x3_tc1::IfcFace* v3_MappedTo) : IfcTextureCoordinate(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, (v1_Maps)->generalize());set_attribute_value(1, (v2_Vertices)->generalize());set_attribute_value(2, v3_MappedTo ? v3_MappedTo->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcTextureVertex
std::vector< double > /*[2:2]*/ Ifc4x3_tc1::IfcTextureVertex::Coordinates() const {  std::vector< double > /*[2:2]*/ v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcTextureVertex::setCoordinates(std::vector< double > /*[2:2]*/ v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcTextureVertex::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1194]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTextureVertex::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1194]); }
Ifc4x3_tc1::IfcTextureVertex::IfcTextureVertex(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcTextureVertex::IfcTextureVertex(std::vector< double > /*[2:2]*/ v1_Coordinates) : IfcPresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Coordinates));; populate_derived(); }

// Function implementations for IfcTextureVertexList
std::vector< std::vector< double > > Ifc4x3_tc1::IfcTextureVertexList::TexCoordsList() const {  std::vector< std::vector< double > > v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcTextureVertexList::setTexCoordsList(std::vector< std::vector< double > > v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcTextureVertexList::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1195]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTextureVertexList::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1195]); }
Ifc4x3_tc1::IfcTextureVertexList::IfcTextureVertexList(IfcEntityInstanceData&& e) : IfcPresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcTextureVertexList::IfcTextureVertexList(std::vector< std::vector< double > > v1_TexCoordsList) : IfcPresentationItem(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_TexCoordsList));; populate_derived(); }

// Function implementations for IfcThirdOrderPolynomialSpiral
double Ifc4x3_tc1::IfcThirdOrderPolynomialSpiral::CubicTerm() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcThirdOrderPolynomialSpiral::setCubicTerm(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
boost::optional< double > Ifc4x3_tc1::IfcThirdOrderPolynomialSpiral::QuadraticTerm() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcThirdOrderPolynomialSpiral::setQuadraticTerm(boost::optional< double > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
boost::optional< double > Ifc4x3_tc1::IfcThirdOrderPolynomialSpiral::LinearTerm() const { if(data_.get_attribute_value(3).isNull()) { return boost::none; } double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcThirdOrderPolynomialSpiral::setLinearTerm(boost::optional< double > v) { if (v) {set_attribute_value(3, *v);} else {unset_attribute_value(3);} }
boost::optional< double > Ifc4x3_tc1::IfcThirdOrderPolynomialSpiral::ConstantTerm() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcThirdOrderPolynomialSpiral::setConstantTerm(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcThirdOrderPolynomialSpiral::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1202]); }
const IfcParse::entity& Ifc4x3_tc1::IfcThirdOrderPolynomialSpiral::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1202]); }
Ifc4x3_tc1::IfcThirdOrderPolynomialSpiral::IfcThirdOrderPolynomialSpiral(IfcEntityInstanceData&& e) : IfcSpiral(std::move(e)) { }
Ifc4x3_tc1::IfcThirdOrderPolynomialSpiral::IfcThirdOrderPolynomialSpiral(::Ifc4x3_tc1::IfcAxis2Placement* v1_Position, double v2_CubicTerm, boost::optional< double > v3_QuadraticTerm, boost::optional< double > v4_LinearTerm, boost::optional< double > v5_ConstantTerm) : IfcSpiral(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_CubicTerm)); if (v3_QuadraticTerm) {set_attribute_value(2, (*v3_QuadraticTerm)); } if (v4_LinearTerm) {set_attribute_value(3, (*v4_LinearTerm)); } if (v5_ConstantTerm) {set_attribute_value(4, (*v5_ConstantTerm)); }; populate_derived(); }

// Function implementations for IfcTimePeriod
std::string Ifc4x3_tc1::IfcTimePeriod::StartTime() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcTimePeriod::setStartTime(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
std::string Ifc4x3_tc1::IfcTimePeriod::EndTime() const {  std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcTimePeriod::setEndTime(std::string v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcTimePeriod::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1206]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTimePeriod::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1206]); }
Ifc4x3_tc1::IfcTimePeriod::IfcTimePeriod(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcTimePeriod::IfcTimePeriod(std::string v1_StartTime, std::string v2_EndTime) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_StartTime));set_attribute_value(1, (v2_EndTime));; populate_derived(); }

// Function implementations for IfcTimeSeries
std::string Ifc4x3_tc1::IfcTimeSeries::Name() const {  std::string v = data_.get_attribute_value(0); return v; }
void Ifc4x3_tc1::IfcTimeSeries::setName(std::string v) { set_attribute_value(0, v);if constexpr (false)unset_attribute_value(0); }
boost::optional< std::string > Ifc4x3_tc1::IfcTimeSeries::Description() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcTimeSeries::setDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
std::string Ifc4x3_tc1::IfcTimeSeries::StartTime() const {  std::string v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcTimeSeries::setStartTime(std::string v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }
std::string Ifc4x3_tc1::IfcTimeSeries::EndTime() const {  std::string v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcTimeSeries::setEndTime(std::string v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
::Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Value Ifc4x3_tc1::IfcTimeSeries::TimeSeriesDataType() const {  return ::Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::FromString(data_.get_attribute_value(4)); }
void Ifc4x3_tc1::IfcTimeSeries::setTimeSeriesDataType(::Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Value v) { set_attribute_value(4, EnumerationReference(&::Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcDataOriginEnum::Value Ifc4x3_tc1::IfcTimeSeries::DataOrigin() const {  return ::Ifc4x3_tc1::IfcDataOriginEnum::FromString(data_.get_attribute_value(5)); }
void Ifc4x3_tc1::IfcTimeSeries::setDataOrigin(::Ifc4x3_tc1::IfcDataOriginEnum::Value v) { set_attribute_value(5, EnumerationReference(&::Ifc4x3_tc1::IfcDataOriginEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(5); }
boost::optional< std::string > Ifc4x3_tc1::IfcTimeSeries::UserDefinedDataOrigin() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcTimeSeries::setUserDefinedDataOrigin(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
::Ifc4x3_tc1::IfcUnit* Ifc4x3_tc1::IfcTimeSeries::Unit() const { if(data_.get_attribute_value(7).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(7)))->as<::Ifc4x3_tc1::IfcUnit>(true); }
void Ifc4x3_tc1::IfcTimeSeries::setUnit(::Ifc4x3_tc1::IfcUnit* v) { set_attribute_value(7, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(7); }

::Ifc4x3_tc1::IfcExternalReferenceRelationship::list::ptr Ifc4x3_tc1::IfcTimeSeries::HasExternalReference() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[427], 3)->as<IfcExternalReferenceRelationship>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcTimeSeries::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1207]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTimeSeries::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1207]); }
Ifc4x3_tc1::IfcTimeSeries::IfcTimeSeries(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcTimeSeries::IfcTimeSeries(std::string v1_Name, boost::optional< std::string > v2_Description, std::string v3_StartTime, std::string v4_EndTime, ::Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Value v5_TimeSeriesDataType, ::Ifc4x3_tc1::IfcDataOriginEnum::Value v6_DataOrigin, boost::optional< std::string > v7_UserDefinedDataOrigin, ::Ifc4x3_tc1::IfcUnit* v8_Unit) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_Name)); if (v2_Description) {set_attribute_value(1, (*v2_Description)); }set_attribute_value(2, (v3_StartTime));set_attribute_value(3, (v4_EndTime));set_attribute_value(4, (EnumerationReference(&::Ifc4x3_tc1::IfcTimeSeriesDataTypeEnum::Class(),(size_t)v5_TimeSeriesDataType)));set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcDataOriginEnum::Class(),(size_t)v6_DataOrigin))); if (v7_UserDefinedDataOrigin) {set_attribute_value(6, (*v7_UserDefinedDataOrigin)); }set_attribute_value(7, v8_Unit ? v8_Unit->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcTimeSeriesValue
aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr Ifc4x3_tc1::IfcTimeSeriesValue::ListValues() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcValue >(); }
void Ifc4x3_tc1::IfcTimeSeriesValue::setListValues(aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcTimeSeriesValue::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1209]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTimeSeriesValue::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1209]); }
Ifc4x3_tc1::IfcTimeSeriesValue::IfcTimeSeriesValue(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcTimeSeriesValue::IfcTimeSeriesValue(aggregate_of< ::Ifc4x3_tc1::IfcValue >::ptr v1_ListValues) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_ListValues)->generalize());; populate_derived(); }

// Function implementations for IfcTopologicalRepresentationItem


const IfcParse::entity& Ifc4x3_tc1::IfcTopologicalRepresentationItem::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1211]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTopologicalRepresentationItem::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1211]); }
Ifc4x3_tc1::IfcTopologicalRepresentationItem::IfcTopologicalRepresentationItem(IfcEntityInstanceData&& e) : IfcRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcTopologicalRepresentationItem::IfcTopologicalRepresentationItem() : IfcRepresentationItem(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcTopologyRepresentation


const IfcParse::entity& Ifc4x3_tc1::IfcTopologyRepresentation::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1212]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTopologyRepresentation::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1212]); }
Ifc4x3_tc1::IfcTopologyRepresentation::IfcTopologyRepresentation(IfcEntityInstanceData&& e) : IfcShapeModel(std::move(e)) { }
Ifc4x3_tc1::IfcTopologyRepresentation::IfcTopologyRepresentation(::Ifc4x3_tc1::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_tc1::IfcRepresentationItem >::ptr v4_Items) : IfcShapeModel(IfcEntityInstanceData(storage_t(4))) { set_attribute_value(0, v1_ContextOfItems ? v1_ContextOfItems->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_RepresentationIdentifier) {set_attribute_value(1, (*v2_RepresentationIdentifier)); } if (v3_RepresentationType) {set_attribute_value(2, (*v3_RepresentationType)); }set_attribute_value(3, (v4_Items)->generalize());; populate_derived(); }

// Function implementations for IfcToroidalSurface
double Ifc4x3_tc1::IfcToroidalSurface::MajorRadius() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcToroidalSurface::setMajorRadius(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }
double Ifc4x3_tc1::IfcToroidalSurface::MinorRadius() const {  double v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcToroidalSurface::setMinorRadius(double v) { set_attribute_value(2, v);if constexpr (false)unset_attribute_value(2); }


const IfcParse::entity& Ifc4x3_tc1::IfcToroidalSurface::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1213]); }
const IfcParse::entity& Ifc4x3_tc1::IfcToroidalSurface::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1213]); }
Ifc4x3_tc1::IfcToroidalSurface::IfcToroidalSurface(IfcEntityInstanceData&& e) : IfcElementarySurface(std::move(e)) { }
Ifc4x3_tc1::IfcToroidalSurface::IfcToroidalSurface(::Ifc4x3_tc1::IfcAxis2Placement3D* v1_Position, double v2_MajorRadius, double v3_MinorRadius) : IfcElementarySurface(IfcEntityInstanceData(storage_t(3))) { set_attribute_value(0, v1_Position ? v1_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_MajorRadius));set_attribute_value(2, (v3_MinorRadius));; populate_derived(); }

// Function implementations for IfcTrackElement
boost::optional< ::Ifc4x3_tc1::IfcTrackElementTypeEnum::Value > Ifc4x3_tc1::IfcTrackElement::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcTrackElementTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcTrackElement::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcTrackElementTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcTrackElementTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTrackElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1215]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTrackElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1215]); }
Ifc4x3_tc1::IfcTrackElement::IfcTrackElement(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcTrackElement::IfcTrackElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcTrackElementTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcTrackElementTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcTrackElementType
::Ifc4x3_tc1::IfcTrackElementTypeEnum::Value Ifc4x3_tc1::IfcTrackElementType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcTrackElementTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcTrackElementType::setPredefinedType(::Ifc4x3_tc1::IfcTrackElementTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcTrackElementTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcTrackElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1216]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTrackElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1216]); }
Ifc4x3_tc1::IfcTrackElementType::IfcTrackElementType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcTrackElementType::IfcTrackElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcTrackElementTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcTrackElementTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcTransformer
boost::optional< ::Ifc4x3_tc1::IfcTransformerTypeEnum::Value > Ifc4x3_tc1::IfcTransformer::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcTransformerTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcTransformer::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcTransformerTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcTransformerTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTransformer::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1218]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTransformer::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1218]); }
Ifc4x3_tc1::IfcTransformer::IfcTransformer(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcTransformer::IfcTransformer(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcTransformerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcTransformerTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcTransformerType
::Ifc4x3_tc1::IfcTransformerTypeEnum::Value Ifc4x3_tc1::IfcTransformerType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcTransformerTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcTransformerType::setPredefinedType(::Ifc4x3_tc1::IfcTransformerTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcTransformerTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcTransformerType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1219]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTransformerType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1219]); }
Ifc4x3_tc1::IfcTransformerType::IfcTransformerType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcTransformerType::IfcTransformerType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcTransformerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcTransformerTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcTransportElement
boost::optional< ::Ifc4x3_tc1::IfcTransportElementTypeEnum::Value > Ifc4x3_tc1::IfcTransportElement::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcTransportElementTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcTransportElement::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcTransportElementTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcTransportElementTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTransportElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1225]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTransportElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1225]); }
Ifc4x3_tc1::IfcTransportElement::IfcTransportElement(IfcEntityInstanceData&& e) : IfcTransportationDevice(std::move(e)) { }
Ifc4x3_tc1::IfcTransportElement::IfcTransportElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcTransportElementTypeEnum::Value > v9_PredefinedType) : IfcTransportationDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcTransportElementTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcTransportElementType
::Ifc4x3_tc1::IfcTransportElementTypeEnum::Value Ifc4x3_tc1::IfcTransportElementType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcTransportElementTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcTransportElementType::setPredefinedType(::Ifc4x3_tc1::IfcTransportElementTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcTransportElementTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcTransportElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1226]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTransportElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1226]); }
Ifc4x3_tc1::IfcTransportElementType::IfcTransportElementType(IfcEntityInstanceData&& e) : IfcTransportationDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcTransportElementType::IfcTransportElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcTransportElementTypeEnum::Value v10_PredefinedType) : IfcTransportationDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcTransportElementTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcTransportationDevice


const IfcParse::entity& Ifc4x3_tc1::IfcTransportationDevice::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1223]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTransportationDevice::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1223]); }
Ifc4x3_tc1::IfcTransportationDevice::IfcTransportationDevice(IfcEntityInstanceData&& e) : IfcElement(std::move(e)) { }
Ifc4x3_tc1::IfcTransportationDevice::IfcTransportationDevice(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcTransportationDeviceType


const IfcParse::entity& Ifc4x3_tc1::IfcTransportationDeviceType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1224]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTransportationDeviceType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1224]); }
Ifc4x3_tc1::IfcTransportationDeviceType::IfcTransportationDeviceType(IfcEntityInstanceData&& e) : IfcElementType(std::move(e)) { }
Ifc4x3_tc1::IfcTransportationDeviceType::IfcTransportationDeviceType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementType(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }; populate_derived(); }

// Function implementations for IfcTrapeziumProfileDef
double Ifc4x3_tc1::IfcTrapeziumProfileDef::BottomXDim() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcTrapeziumProfileDef::setBottomXDim(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcTrapeziumProfileDef::TopXDim() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcTrapeziumProfileDef::setTopXDim(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
double Ifc4x3_tc1::IfcTrapeziumProfileDef::YDim() const {  double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcTrapeziumProfileDef::setYDim(double v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
double Ifc4x3_tc1::IfcTrapeziumProfileDef::TopXOffset() const {  double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcTrapeziumProfileDef::setTopXOffset(double v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }


const IfcParse::entity& Ifc4x3_tc1::IfcTrapeziumProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1228]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTrapeziumProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1228]); }
Ifc4x3_tc1::IfcTrapeziumProfileDef::IfcTrapeziumProfileDef(IfcEntityInstanceData&& e) : IfcParameterizedProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcTrapeziumProfileDef::IfcTrapeziumProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_BottomXDim, double v5_TopXDim, double v6_YDim, double v7_TopXOffset) : IfcParameterizedProfileDef(IfcEntityInstanceData(storage_t(7))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_BottomXDim));set_attribute_value(4, (v5_TopXDim));set_attribute_value(5, (v6_YDim));set_attribute_value(6, (v7_TopXOffset));; populate_derived(); }

// Function implementations for IfcTriangulatedFaceSet
boost::optional< std::vector< std::vector< double > > > Ifc4x3_tc1::IfcTriangulatedFaceSet::Normals() const { if(data_.get_attribute_value(1).isNull()) { return boost::none; } std::vector< std::vector< double > > v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcTriangulatedFaceSet::setNormals(boost::optional< std::vector< std::vector< double > > > v) { if (v) {set_attribute_value(1, *v);} else {unset_attribute_value(1);} }
boost::optional< bool > Ifc4x3_tc1::IfcTriangulatedFaceSet::Closed() const { if(data_.get_attribute_value(2).isNull()) { return boost::none; } bool v = data_.get_attribute_value(2); return v; }
void Ifc4x3_tc1::IfcTriangulatedFaceSet::setClosed(boost::optional< bool > v) { if (v) {set_attribute_value(2, *v);} else {unset_attribute_value(2);} }
std::vector< std::vector< int > > Ifc4x3_tc1::IfcTriangulatedFaceSet::CoordIndex() const {  std::vector< std::vector< int > > v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcTriangulatedFaceSet::setCoordIndex(std::vector< std::vector< int > > v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
boost::optional< std::vector< int > /*[1:?]*/ > Ifc4x3_tc1::IfcTriangulatedFaceSet::PnIndex() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::vector< int > /*[1:?]*/ v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcTriangulatedFaceSet::setPnIndex(boost::optional< std::vector< int > /*[1:?]*/ > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTriangulatedFaceSet::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1229]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTriangulatedFaceSet::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1229]); }
Ifc4x3_tc1::IfcTriangulatedFaceSet::IfcTriangulatedFaceSet(IfcEntityInstanceData&& e) : IfcTessellatedFaceSet(std::move(e)) { }
Ifc4x3_tc1::IfcTriangulatedFaceSet::IfcTriangulatedFaceSet(::Ifc4x3_tc1::IfcCartesianPointList3D* v1_Coordinates, boost::optional< std::vector< std::vector< double > > > v2_Normals, boost::optional< bool > v3_Closed, std::vector< std::vector< int > > v4_CoordIndex, boost::optional< std::vector< int > /*[1:?]*/ > v5_PnIndex) : IfcTessellatedFaceSet(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_Coordinates ? v1_Coordinates->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_Normals) {set_attribute_value(1, (*v2_Normals)); } if (v3_Closed) {set_attribute_value(2, (*v3_Closed)); }set_attribute_value(3, (v4_CoordIndex)); if (v5_PnIndex) {set_attribute_value(4, (*v5_PnIndex)); }; populate_derived(); }

// Function implementations for IfcTriangulatedIrregularNetwork
std::vector< int > /*[1:?]*/ Ifc4x3_tc1::IfcTriangulatedIrregularNetwork::Flags() const {  std::vector< int > /*[1:?]*/ v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcTriangulatedIrregularNetwork::setFlags(std::vector< int > /*[1:?]*/ v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }


const IfcParse::entity& Ifc4x3_tc1::IfcTriangulatedIrregularNetwork::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1230]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTriangulatedIrregularNetwork::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1230]); }
Ifc4x3_tc1::IfcTriangulatedIrregularNetwork::IfcTriangulatedIrregularNetwork(IfcEntityInstanceData&& e) : IfcTriangulatedFaceSet(std::move(e)) { }
Ifc4x3_tc1::IfcTriangulatedIrregularNetwork::IfcTriangulatedIrregularNetwork(::Ifc4x3_tc1::IfcCartesianPointList3D* v1_Coordinates, boost::optional< std::vector< std::vector< double > > > v2_Normals, boost::optional< bool > v3_Closed, std::vector< std::vector< int > > v4_CoordIndex, boost::optional< std::vector< int > /*[1:?]*/ > v5_PnIndex, std::vector< int > /*[1:?]*/ v6_Flags) : IfcTriangulatedFaceSet(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, v1_Coordinates ? v1_Coordinates->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v2_Normals) {set_attribute_value(1, (*v2_Normals)); } if (v3_Closed) {set_attribute_value(2, (*v3_Closed)); }set_attribute_value(3, (v4_CoordIndex)); if (v5_PnIndex) {set_attribute_value(4, (*v5_PnIndex)); }set_attribute_value(5, (v6_Flags));; populate_derived(); }

// Function implementations for IfcTrimmedCurve
::Ifc4x3_tc1::IfcCurve* Ifc4x3_tc1::IfcTrimmedCurve::BasisCurve() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcCurve>(true); }
void Ifc4x3_tc1::IfcTrimmedCurve::setBasisCurve(::Ifc4x3_tc1::IfcCurve* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
aggregate_of< ::Ifc4x3_tc1::IfcTrimmingSelect >::ptr Ifc4x3_tc1::IfcTrimmedCurve::Trim1() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(1); return es->as< ::Ifc4x3_tc1::IfcTrimmingSelect >(); }
void Ifc4x3_tc1::IfcTrimmedCurve::setTrim1(aggregate_of< ::Ifc4x3_tc1::IfcTrimmingSelect >::ptr v) { set_attribute_value(1, (v)->generalize());if constexpr (false)unset_attribute_value(1); }
aggregate_of< ::Ifc4x3_tc1::IfcTrimmingSelect >::ptr Ifc4x3_tc1::IfcTrimmedCurve::Trim2() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(2); return es->as< ::Ifc4x3_tc1::IfcTrimmingSelect >(); }
void Ifc4x3_tc1::IfcTrimmedCurve::setTrim2(aggregate_of< ::Ifc4x3_tc1::IfcTrimmingSelect >::ptr v) { set_attribute_value(2, (v)->generalize());if constexpr (false)unset_attribute_value(2); }
bool Ifc4x3_tc1::IfcTrimmedCurve::SenseAgreement() const {  bool v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcTrimmedCurve::setSenseAgreement(bool v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
::Ifc4x3_tc1::IfcTrimmingPreference::Value Ifc4x3_tc1::IfcTrimmedCurve::MasterRepresentation() const {  return ::Ifc4x3_tc1::IfcTrimmingPreference::FromString(data_.get_attribute_value(4)); }
void Ifc4x3_tc1::IfcTrimmedCurve::setMasterRepresentation(::Ifc4x3_tc1::IfcTrimmingPreference::Value v) { set_attribute_value(4, EnumerationReference(&::Ifc4x3_tc1::IfcTrimmingPreference::Class(), (size_t) v));if constexpr (false)unset_attribute_value(4); }


const IfcParse::entity& Ifc4x3_tc1::IfcTrimmedCurve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1231]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTrimmedCurve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1231]); }
Ifc4x3_tc1::IfcTrimmedCurve::IfcTrimmedCurve(IfcEntityInstanceData&& e) : IfcBoundedCurve(std::move(e)) { }
Ifc4x3_tc1::IfcTrimmedCurve::IfcTrimmedCurve(::Ifc4x3_tc1::IfcCurve* v1_BasisCurve, aggregate_of< ::Ifc4x3_tc1::IfcTrimmingSelect >::ptr v2_Trim1, aggregate_of< ::Ifc4x3_tc1::IfcTrimmingSelect >::ptr v3_Trim2, bool v4_SenseAgreement, ::Ifc4x3_tc1::IfcTrimmingPreference::Value v5_MasterRepresentation) : IfcBoundedCurve(IfcEntityInstanceData(storage_t(5))) { set_attribute_value(0, v1_BasisCurve ? v1_BasisCurve->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Trim1)->generalize());set_attribute_value(2, (v3_Trim2)->generalize());set_attribute_value(3, (v4_SenseAgreement));set_attribute_value(4, (EnumerationReference(&::Ifc4x3_tc1::IfcTrimmingPreference::Class(),(size_t)v5_MasterRepresentation)));; populate_derived(); }

// Function implementations for IfcTubeBundle
boost::optional< ::Ifc4x3_tc1::IfcTubeBundleTypeEnum::Value > Ifc4x3_tc1::IfcTubeBundle::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcTubeBundleTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcTubeBundle::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcTubeBundleTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcTubeBundleTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcTubeBundle::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1235]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTubeBundle::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1235]); }
Ifc4x3_tc1::IfcTubeBundle::IfcTubeBundle(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcTubeBundle::IfcTubeBundle(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcTubeBundleTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcTubeBundleTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcTubeBundleType
::Ifc4x3_tc1::IfcTubeBundleTypeEnum::Value Ifc4x3_tc1::IfcTubeBundleType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcTubeBundleTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcTubeBundleType::setPredefinedType(::Ifc4x3_tc1::IfcTubeBundleTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcTubeBundleTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcTubeBundleType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1236]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTubeBundleType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1236]); }
Ifc4x3_tc1::IfcTubeBundleType::IfcTubeBundleType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcTubeBundleType::IfcTubeBundleType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcTubeBundleTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcTubeBundleTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcTypeObject
boost::optional< std::string > Ifc4x3_tc1::IfcTypeObject::ApplicableOccurrence() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcTypeObject::setApplicableOccurrence(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > Ifc4x3_tc1::IfcTypeObject::HasPropertySets() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(5); return es->as< ::Ifc4x3_tc1::IfcPropertySetDefinition >(); }
void Ifc4x3_tc1::IfcTypeObject::setHasPropertySets(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v) { if (v) {set_attribute_value(5, (*v)->generalize());} else {unset_attribute_value(5);} }

::Ifc4x3_tc1::IfcRelDefinesByType::list::ptr Ifc4x3_tc1::IfcTypeObject::Types() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[933], 5)->as<IfcRelDefinesByType>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcTypeObject::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1238]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTypeObject::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1238]); }
Ifc4x3_tc1::IfcTypeObject::IfcTypeObject(IfcEntityInstanceData&& e) : IfcObjectDefinition(std::move(e)) { }
Ifc4x3_tc1::IfcTypeObject::IfcTypeObject(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets) : IfcObjectDefinition(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); }; populate_derived(); }

// Function implementations for IfcTypeProcess
boost::optional< std::string > Ifc4x3_tc1::IfcTypeProcess::Identification() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcTypeProcess::setIdentification(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTypeProcess::LongDescription() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcTypeProcess::setLongDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTypeProcess::ProcessType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcTypeProcess::setProcessType(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }

::Ifc4x3_tc1::IfcRelAssignsToProcess::list::ptr Ifc4x3_tc1::IfcTypeProcess::OperatesOn() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[903], 6)->as<IfcRelAssignsToProcess>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcTypeProcess::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1239]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTypeProcess::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1239]); }
Ifc4x3_tc1::IfcTypeProcess::IfcTypeProcess(IfcEntityInstanceData&& e) : IfcTypeObject(std::move(e)) { }
Ifc4x3_tc1::IfcTypeProcess::IfcTypeProcess(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ProcessType) : IfcTypeObject(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_Identification) {set_attribute_value(6, (*v7_Identification)); } if (v8_LongDescription) {set_attribute_value(7, (*v8_LongDescription)); } if (v9_ProcessType) {set_attribute_value(8, (*v9_ProcessType)); }; populate_derived(); }

// Function implementations for IfcTypeProduct
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > Ifc4x3_tc1::IfcTypeProduct::RepresentationMaps() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(6); return es->as< ::Ifc4x3_tc1::IfcRepresentationMap >(); }
void Ifc4x3_tc1::IfcTypeProduct::setRepresentationMaps(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v) { if (v) {set_attribute_value(6, (*v)->generalize());} else {unset_attribute_value(6);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTypeProduct::Tag() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcTypeProduct::setTag(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }

::Ifc4x3_tc1::IfcRelAssignsToProduct::list::ptr Ifc4x3_tc1::IfcTypeProduct::ReferencedBy() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[904], 6)->as<IfcRelAssignsToProduct>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcTypeProduct::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1240]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTypeProduct::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1240]); }
Ifc4x3_tc1::IfcTypeProduct::IfcTypeProduct(IfcEntityInstanceData&& e) : IfcTypeObject(std::move(e)) { }
Ifc4x3_tc1::IfcTypeProduct::IfcTypeProduct(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag) : IfcTypeObject(IfcEntityInstanceData(storage_t(8))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); }; populate_derived(); }

// Function implementations for IfcTypeResource
boost::optional< std::string > Ifc4x3_tc1::IfcTypeResource::Identification() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcTypeResource::setIdentification(boost::optional< std::string > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTypeResource::LongDescription() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcTypeResource::setLongDescription(boost::optional< std::string > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< std::string > Ifc4x3_tc1::IfcTypeResource::ResourceType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcTypeResource::setResourceType(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }

::Ifc4x3_tc1::IfcRelAssignsToResource::list::ptr Ifc4x3_tc1::IfcTypeResource::ResourceOf() const { if (!file_) { return nullptr; } return file_->getInverse(id_, IFC4X3_TC1_types[905], 6)->as<IfcRelAssignsToResource>(); }

const IfcParse::entity& Ifc4x3_tc1::IfcTypeResource::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1241]); }
const IfcParse::entity& Ifc4x3_tc1::IfcTypeResource::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1241]); }
Ifc4x3_tc1::IfcTypeResource::IfcTypeResource(IfcEntityInstanceData&& e) : IfcTypeObject(std::move(e)) { }
Ifc4x3_tc1::IfcTypeResource::IfcTypeResource(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType) : IfcTypeObject(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_Identification) {set_attribute_value(6, (*v7_Identification)); } if (v8_LongDescription) {set_attribute_value(7, (*v8_LongDescription)); } if (v9_ResourceType) {set_attribute_value(8, (*v9_ResourceType)); }; populate_derived(); }

// Function implementations for IfcUShapeProfileDef
double Ifc4x3_tc1::IfcUShapeProfileDef::Depth() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcUShapeProfileDef::setDepth(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcUShapeProfileDef::FlangeWidth() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcUShapeProfileDef::setFlangeWidth(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
double Ifc4x3_tc1::IfcUShapeProfileDef::WebThickness() const {  double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcUShapeProfileDef::setWebThickness(double v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
double Ifc4x3_tc1::IfcUShapeProfileDef::FlangeThickness() const {  double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcUShapeProfileDef::setFlangeThickness(double v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
boost::optional< double > Ifc4x3_tc1::IfcUShapeProfileDef::FilletRadius() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcUShapeProfileDef::setFilletRadius(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< double > Ifc4x3_tc1::IfcUShapeProfileDef::EdgeRadius() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcUShapeProfileDef::setEdgeRadius(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< double > Ifc4x3_tc1::IfcUShapeProfileDef::FlangeSlope() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcUShapeProfileDef::setFlangeSlope(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }


const IfcParse::entity& Ifc4x3_tc1::IfcUShapeProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1252]); }
const IfcParse::entity& Ifc4x3_tc1::IfcUShapeProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1252]); }
Ifc4x3_tc1::IfcUShapeProfileDef::IfcUShapeProfileDef(IfcEntityInstanceData&& e) : IfcParameterizedProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcUShapeProfileDef::IfcUShapeProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_Depth, double v5_FlangeWidth, double v6_WebThickness, double v7_FlangeThickness, boost::optional< double > v8_FilletRadius, boost::optional< double > v9_EdgeRadius, boost::optional< double > v10_FlangeSlope) : IfcParameterizedProfileDef(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Depth));set_attribute_value(4, (v5_FlangeWidth));set_attribute_value(5, (v6_WebThickness));set_attribute_value(6, (v7_FlangeThickness)); if (v8_FilletRadius) {set_attribute_value(7, (*v8_FilletRadius)); } if (v9_EdgeRadius) {set_attribute_value(8, (*v9_EdgeRadius)); } if (v10_FlangeSlope) {set_attribute_value(9, (*v10_FlangeSlope)); }; populate_derived(); }

// Function implementations for IfcUnitAssignment
aggregate_of< ::Ifc4x3_tc1::IfcUnit >::ptr Ifc4x3_tc1::IfcUnitAssignment::Units() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcUnit >(); }
void Ifc4x3_tc1::IfcUnitAssignment::setUnits(aggregate_of< ::Ifc4x3_tc1::IfcUnit >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcUnitAssignment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1249]); }
const IfcParse::entity& Ifc4x3_tc1::IfcUnitAssignment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1249]); }
Ifc4x3_tc1::IfcUnitAssignment::IfcUnitAssignment(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcUnitAssignment::IfcUnitAssignment(aggregate_of< ::Ifc4x3_tc1::IfcUnit >::ptr v1_Units) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, (v1_Units)->generalize());; populate_derived(); }

// Function implementations for IfcUnitaryControlElement
boost::optional< ::Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Value > Ifc4x3_tc1::IfcUnitaryControlElement::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcUnitaryControlElement::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcUnitaryControlElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1243]); }
const IfcParse::entity& Ifc4x3_tc1::IfcUnitaryControlElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1243]); }
Ifc4x3_tc1::IfcUnitaryControlElement::IfcUnitaryControlElement(IfcEntityInstanceData&& e) : IfcDistributionControlElement(std::move(e)) { }
Ifc4x3_tc1::IfcUnitaryControlElement::IfcUnitaryControlElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcUnitaryControlElementType
::Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Value Ifc4x3_tc1::IfcUnitaryControlElementType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcUnitaryControlElementType::setPredefinedType(::Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcUnitaryControlElementType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1244]); }
const IfcParse::entity& Ifc4x3_tc1::IfcUnitaryControlElementType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1244]); }
Ifc4x3_tc1::IfcUnitaryControlElementType::IfcUnitaryControlElementType(IfcEntityInstanceData&& e) : IfcDistributionControlElementType(std::move(e)) { }
Ifc4x3_tc1::IfcUnitaryControlElementType::IfcUnitaryControlElementType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcUnitaryControlElementTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcUnitaryEquipment
boost::optional< ::Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Value > Ifc4x3_tc1::IfcUnitaryEquipment::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcUnitaryEquipment::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcUnitaryEquipment::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1246]); }
const IfcParse::entity& Ifc4x3_tc1::IfcUnitaryEquipment::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1246]); }
Ifc4x3_tc1::IfcUnitaryEquipment::IfcUnitaryEquipment(IfcEntityInstanceData&& e) : IfcEnergyConversionDevice(std::move(e)) { }
Ifc4x3_tc1::IfcUnitaryEquipment::IfcUnitaryEquipment(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcUnitaryEquipmentType
::Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Value Ifc4x3_tc1::IfcUnitaryEquipmentType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcUnitaryEquipmentType::setPredefinedType(::Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcUnitaryEquipmentType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1247]); }
const IfcParse::entity& Ifc4x3_tc1::IfcUnitaryEquipmentType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1247]); }
Ifc4x3_tc1::IfcUnitaryEquipmentType::IfcUnitaryEquipmentType(IfcEntityInstanceData&& e) : IfcEnergyConversionDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcUnitaryEquipmentType::IfcUnitaryEquipmentType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcUnitaryEquipmentTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcValve
boost::optional< ::Ifc4x3_tc1::IfcValveTypeEnum::Value > Ifc4x3_tc1::IfcValve::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcValveTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcValve::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcValveTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcValveTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcValve::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1254]); }
const IfcParse::entity& Ifc4x3_tc1::IfcValve::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1254]); }
Ifc4x3_tc1::IfcValve::IfcValve(IfcEntityInstanceData&& e) : IfcFlowController(std::move(e)) { }
Ifc4x3_tc1::IfcValve::IfcValve(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcValveTypeEnum::Value > v9_PredefinedType) : IfcFlowController(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcValveTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcValveType
::Ifc4x3_tc1::IfcValveTypeEnum::Value Ifc4x3_tc1::IfcValveType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcValveTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcValveType::setPredefinedType(::Ifc4x3_tc1::IfcValveTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcValveTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcValveType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1255]); }
const IfcParse::entity& Ifc4x3_tc1::IfcValveType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1255]); }
Ifc4x3_tc1::IfcValveType::IfcValveType(IfcEntityInstanceData&& e) : IfcFlowControllerType(std::move(e)) { }
Ifc4x3_tc1::IfcValveType::IfcValveType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcValveTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcValveTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcVector
::Ifc4x3_tc1::IfcDirection* Ifc4x3_tc1::IfcVector::Orientation() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcDirection>(true); }
void Ifc4x3_tc1::IfcVector::setOrientation(::Ifc4x3_tc1::IfcDirection* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }
double Ifc4x3_tc1::IfcVector::Magnitude() const {  double v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcVector::setMagnitude(double v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcVector::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1258]); }
const IfcParse::entity& Ifc4x3_tc1::IfcVector::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1258]); }
Ifc4x3_tc1::IfcVector::IfcVector(IfcEntityInstanceData&& e) : IfcGeometricRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcVector::IfcVector(::Ifc4x3_tc1::IfcDirection* v1_Orientation, double v2_Magnitude) : IfcGeometricRepresentationItem(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, v1_Orientation ? v1_Orientation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(1, (v2_Magnitude));; populate_derived(); }

// Function implementations for IfcVehicle
boost::optional< ::Ifc4x3_tc1::IfcVehicleTypeEnum::Value > Ifc4x3_tc1::IfcVehicle::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcVehicleTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcVehicle::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcVehicleTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcVehicleTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcVehicle::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1260]); }
const IfcParse::entity& Ifc4x3_tc1::IfcVehicle::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1260]); }
Ifc4x3_tc1::IfcVehicle::IfcVehicle(IfcEntityInstanceData&& e) : IfcTransportationDevice(std::move(e)) { }
Ifc4x3_tc1::IfcVehicle::IfcVehicle(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcVehicleTypeEnum::Value > v9_PredefinedType) : IfcTransportationDevice(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcVehicleTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcVehicleType
::Ifc4x3_tc1::IfcVehicleTypeEnum::Value Ifc4x3_tc1::IfcVehicleType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcVehicleTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcVehicleType::setPredefinedType(::Ifc4x3_tc1::IfcVehicleTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcVehicleTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcVehicleType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1261]); }
const IfcParse::entity& Ifc4x3_tc1::IfcVehicleType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1261]); }
Ifc4x3_tc1::IfcVehicleType::IfcVehicleType(IfcEntityInstanceData&& e) : IfcTransportationDeviceType(std::move(e)) { }
Ifc4x3_tc1::IfcVehicleType::IfcVehicleType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcVehicleTypeEnum::Value v10_PredefinedType) : IfcTransportationDeviceType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcVehicleTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcVertex


const IfcParse::entity& Ifc4x3_tc1::IfcVertex::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1263]); }
const IfcParse::entity& Ifc4x3_tc1::IfcVertex::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1263]); }
Ifc4x3_tc1::IfcVertex::IfcVertex(IfcEntityInstanceData&& e) : IfcTopologicalRepresentationItem(std::move(e)) { }
Ifc4x3_tc1::IfcVertex::IfcVertex() : IfcTopologicalRepresentationItem(IfcEntityInstanceData(storage_t(0))) { ; populate_derived(); }

// Function implementations for IfcVertexLoop
::Ifc4x3_tc1::IfcVertex* Ifc4x3_tc1::IfcVertexLoop::LoopVertex() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcVertex>(true); }
void Ifc4x3_tc1::IfcVertexLoop::setLoopVertex(::Ifc4x3_tc1::IfcVertex* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcVertexLoop::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1264]); }
const IfcParse::entity& Ifc4x3_tc1::IfcVertexLoop::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1264]); }
Ifc4x3_tc1::IfcVertexLoop::IfcVertexLoop(IfcEntityInstanceData&& e) : IfcLoop(std::move(e)) { }
Ifc4x3_tc1::IfcVertexLoop::IfcVertexLoop(::Ifc4x3_tc1::IfcVertex* v1_LoopVertex) : IfcLoop(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_LoopVertex ? v1_LoopVertex->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcVertexPoint
::Ifc4x3_tc1::IfcPoint* Ifc4x3_tc1::IfcVertexPoint::VertexGeometry() const {  return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(0)))->as<::Ifc4x3_tc1::IfcPoint>(true); }
void Ifc4x3_tc1::IfcVertexPoint::setVertexGeometry(::Ifc4x3_tc1::IfcPoint* v) { set_attribute_value(0, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(0); }


const IfcParse::entity& Ifc4x3_tc1::IfcVertexPoint::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1265]); }
const IfcParse::entity& Ifc4x3_tc1::IfcVertexPoint::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1265]); }
Ifc4x3_tc1::IfcVertexPoint::IfcVertexPoint(IfcEntityInstanceData&& e) : IfcVertex(std::move(e)) { }
Ifc4x3_tc1::IfcVertexPoint::IfcVertexPoint(::Ifc4x3_tc1::IfcPoint* v1_VertexGeometry) : IfcVertex(IfcEntityInstanceData(storage_t(1))) { set_attribute_value(0, v1_VertexGeometry ? v1_VertexGeometry->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcVibrationDamper
boost::optional< ::Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Value > Ifc4x3_tc1::IfcVibrationDamper::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcVibrationDamperTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcVibrationDamper::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcVibrationDamper::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1266]); }
const IfcParse::entity& Ifc4x3_tc1::IfcVibrationDamper::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1266]); }
Ifc4x3_tc1::IfcVibrationDamper::IfcVibrationDamper(IfcEntityInstanceData&& e) : IfcElementComponent(std::move(e)) { }
Ifc4x3_tc1::IfcVibrationDamper::IfcVibrationDamper(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Value > v9_PredefinedType) : IfcElementComponent(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcVibrationDamperType
::Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Value Ifc4x3_tc1::IfcVibrationDamperType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcVibrationDamperTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcVibrationDamperType::setPredefinedType(::Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcVibrationDamperType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1267]); }
const IfcParse::entity& Ifc4x3_tc1::IfcVibrationDamperType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1267]); }
Ifc4x3_tc1::IfcVibrationDamperType::IfcVibrationDamperType(IfcEntityInstanceData&& e) : IfcElementComponentType(std::move(e)) { }
Ifc4x3_tc1::IfcVibrationDamperType::IfcVibrationDamperType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Value v10_PredefinedType) : IfcElementComponentType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcVibrationDamperTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcVibrationIsolator
boost::optional< ::Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Value > Ifc4x3_tc1::IfcVibrationIsolator::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcVibrationIsolator::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcVibrationIsolator::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1269]); }
const IfcParse::entity& Ifc4x3_tc1::IfcVibrationIsolator::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1269]); }
Ifc4x3_tc1::IfcVibrationIsolator::IfcVibrationIsolator(IfcEntityInstanceData&& e) : IfcElementComponent(std::move(e)) { }
Ifc4x3_tc1::IfcVibrationIsolator::IfcVibrationIsolator(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Value > v9_PredefinedType) : IfcElementComponent(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcVibrationIsolatorType
::Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Value Ifc4x3_tc1::IfcVibrationIsolatorType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcVibrationIsolatorType::setPredefinedType(::Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcVibrationIsolatorType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1270]); }
const IfcParse::entity& Ifc4x3_tc1::IfcVibrationIsolatorType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1270]); }
Ifc4x3_tc1::IfcVibrationIsolatorType::IfcVibrationIsolatorType(IfcEntityInstanceData&& e) : IfcElementComponentType(std::move(e)) { }
Ifc4x3_tc1::IfcVibrationIsolatorType::IfcVibrationIsolatorType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Value v10_PredefinedType) : IfcElementComponentType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcVibrationIsolatorTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcVirtualElement
boost::optional< ::Ifc4x3_tc1::IfcVirtualElementTypeEnum::Value > Ifc4x3_tc1::IfcVirtualElement::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcVirtualElementTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcVirtualElement::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcVirtualElementTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcVirtualElementTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcVirtualElement::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1272]); }
const IfcParse::entity& Ifc4x3_tc1::IfcVirtualElement::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1272]); }
Ifc4x3_tc1::IfcVirtualElement::IfcVirtualElement(IfcEntityInstanceData&& e) : IfcElement(std::move(e)) { }
Ifc4x3_tc1::IfcVirtualElement::IfcVirtualElement(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcVirtualElementTypeEnum::Value > v9_PredefinedType) : IfcElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcVirtualElementTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcVirtualGridIntersection
aggregate_of< ::Ifc4x3_tc1::IfcGridAxis >::ptr Ifc4x3_tc1::IfcVirtualGridIntersection::IntersectingAxes() const {  aggregate_of_instance::ptr es = data_.get_attribute_value(0); return es->as< ::Ifc4x3_tc1::IfcGridAxis >(); }
void Ifc4x3_tc1::IfcVirtualGridIntersection::setIntersectingAxes(aggregate_of< ::Ifc4x3_tc1::IfcGridAxis >::ptr v) { set_attribute_value(0, (v)->generalize());if constexpr (false)unset_attribute_value(0); }
std::vector< double > /*[2:3]*/ Ifc4x3_tc1::IfcVirtualGridIntersection::OffsetDistances() const {  std::vector< double > /*[2:3]*/ v = data_.get_attribute_value(1); return v; }
void Ifc4x3_tc1::IfcVirtualGridIntersection::setOffsetDistances(std::vector< double > /*[2:3]*/ v) { set_attribute_value(1, v);if constexpr (false)unset_attribute_value(1); }


const IfcParse::entity& Ifc4x3_tc1::IfcVirtualGridIntersection::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1274]); }
const IfcParse::entity& Ifc4x3_tc1::IfcVirtualGridIntersection::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1274]); }
Ifc4x3_tc1::IfcVirtualGridIntersection::IfcVirtualGridIntersection(IfcEntityInstanceData&& e) : IfcUtil::IfcBaseEntity(std::move(e)) { }
Ifc4x3_tc1::IfcVirtualGridIntersection::IfcVirtualGridIntersection(aggregate_of< ::Ifc4x3_tc1::IfcGridAxis >::ptr v1_IntersectingAxes, std::vector< double > /*[2:3]*/ v2_OffsetDistances) : IfcUtil::IfcBaseEntity(IfcEntityInstanceData(storage_t(2))) { set_attribute_value(0, (v1_IntersectingAxes)->generalize());set_attribute_value(1, (v2_OffsetDistances));; populate_derived(); }

// Function implementations for IfcVoidingFeature
boost::optional< ::Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::Value > Ifc4x3_tc1::IfcVoidingFeature::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcVoidingFeature::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcVoidingFeature::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1275]); }
const IfcParse::entity& Ifc4x3_tc1::IfcVoidingFeature::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1275]); }
Ifc4x3_tc1::IfcVoidingFeature::IfcVoidingFeature(IfcEntityInstanceData&& e) : IfcFeatureElementSubtraction(std::move(e)) { }
Ifc4x3_tc1::IfcVoidingFeature::IfcVoidingFeature(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::Value > v9_PredefinedType) : IfcFeatureElementSubtraction(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcVoidingFeatureTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcWall
boost::optional< ::Ifc4x3_tc1::IfcWallTypeEnum::Value > Ifc4x3_tc1::IfcWall::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcWallTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcWall::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcWallTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcWallTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcWall::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1279]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWall::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1279]); }
Ifc4x3_tc1::IfcWall::IfcWall(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcWall::IfcWall(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcWallTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcWallTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcWallStandardCase


const IfcParse::entity& Ifc4x3_tc1::IfcWallStandardCase::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1280]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWallStandardCase::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1280]); }
Ifc4x3_tc1::IfcWallStandardCase::IfcWallStandardCase(IfcEntityInstanceData&& e) : IfcWall(std::move(e)) { }
Ifc4x3_tc1::IfcWallStandardCase::IfcWallStandardCase(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcWallTypeEnum::Value > v9_PredefinedType) : IfcWall(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcWallTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcWallType
::Ifc4x3_tc1::IfcWallTypeEnum::Value Ifc4x3_tc1::IfcWallType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcWallTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcWallType::setPredefinedType(::Ifc4x3_tc1::IfcWallTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcWallTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcWallType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1281]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWallType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1281]); }
Ifc4x3_tc1::IfcWallType::IfcWallType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcWallType::IfcWallType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcWallTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcWallTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcWasteTerminal
boost::optional< ::Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Value > Ifc4x3_tc1::IfcWasteTerminal::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcWasteTerminalTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcWasteTerminal::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcWasteTerminal::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1286]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWasteTerminal::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1286]); }
Ifc4x3_tc1::IfcWasteTerminal::IfcWasteTerminal(IfcEntityInstanceData&& e) : IfcFlowTerminal(std::move(e)) { }
Ifc4x3_tc1::IfcWasteTerminal::IfcWasteTerminal(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcWasteTerminalType
::Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Value Ifc4x3_tc1::IfcWasteTerminalType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcWasteTerminalTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcWasteTerminalType::setPredefinedType(::Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }


const IfcParse::entity& Ifc4x3_tc1::IfcWasteTerminalType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1287]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWasteTerminalType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1287]); }
Ifc4x3_tc1::IfcWasteTerminalType::IfcWasteTerminalType(IfcEntityInstanceData&& e) : IfcFlowTerminalType(std::move(e)) { }
Ifc4x3_tc1::IfcWasteTerminalType::IfcWasteTerminalType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType(IfcEntityInstanceData(storage_t(10))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcWasteTerminalTypeEnum::Class(),(size_t)v10_PredefinedType)));; populate_derived(); }

// Function implementations for IfcWindow
boost::optional< double > Ifc4x3_tc1::IfcWindow::OverallHeight() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcWindow::setOverallHeight(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< double > Ifc4x3_tc1::IfcWindow::OverallWidth() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcWindow::setOverallWidth(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< ::Ifc4x3_tc1::IfcWindowTypeEnum::Value > Ifc4x3_tc1::IfcWindow::PredefinedType() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcWindowTypeEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcWindow::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcWindowTypeEnum::Value > v) { if (v) {set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcWindowTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(10);} }
boost::optional< ::Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Value > Ifc4x3_tc1::IfcWindow::PartitioningType() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcWindowTypePartitioningEnum::FromString(data_.get_attribute_value(11)); }
void Ifc4x3_tc1::IfcWindow::setPartitioningType(boost::optional< ::Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Value > v) { if (v) {set_attribute_value(11, EnumerationReference(&::Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Class(), (size_t) *v));} else {unset_attribute_value(11);} }
boost::optional< std::string > Ifc4x3_tc1::IfcWindow::UserDefinedPartitioningType() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcWindow::setUserDefinedPartitioningType(boost::optional< std::string > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }


const IfcParse::entity& Ifc4x3_tc1::IfcWindow::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1289]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWindow::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1289]); }
Ifc4x3_tc1::IfcWindow::IfcWindow(IfcEntityInstanceData&& e) : IfcBuiltElement(std::move(e)) { }
Ifc4x3_tc1::IfcWindow::IfcWindow(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_tc1::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_tc1::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< double > v9_OverallHeight, boost::optional< double > v10_OverallWidth, boost::optional< ::Ifc4x3_tc1::IfcWindowTypeEnum::Value > v11_PredefinedType, boost::optional< ::Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Value > v12_PartitioningType, boost::optional< std::string > v13_UserDefinedPartitioningType) : IfcBuiltElement(IfcEntityInstanceData(storage_t(13))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); }set_attribute_value(5, v6_ObjectPlacement ? v6_ObjectPlacement->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(6, v7_Representation ? v7_Representation->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_OverallHeight) {set_attribute_value(8, (*v9_OverallHeight)); } if (v10_OverallWidth) {set_attribute_value(9, (*v10_OverallWidth)); } if (v11_PredefinedType) {set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcWindowTypeEnum::Class(),(size_t)*v11_PredefinedType))); } if (v12_PartitioningType) {set_attribute_value(11, (EnumerationReference(&::Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Class(),(size_t)*v12_PartitioningType))); } if (v13_UserDefinedPartitioningType) {set_attribute_value(12, (*v13_UserDefinedPartitioningType)); }; populate_derived(); }

// Function implementations for IfcWindowLiningProperties
boost::optional< double > Ifc4x3_tc1::IfcWindowLiningProperties::LiningDepth() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcWindowLiningProperties::setLiningDepth(boost::optional< double > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< double > Ifc4x3_tc1::IfcWindowLiningProperties::LiningThickness() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcWindowLiningProperties::setLiningThickness(boost::optional< double > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }
boost::optional< double > Ifc4x3_tc1::IfcWindowLiningProperties::TransomThickness() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcWindowLiningProperties::setTransomThickness(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< double > Ifc4x3_tc1::IfcWindowLiningProperties::MullionThickness() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcWindowLiningProperties::setMullionThickness(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< double > Ifc4x3_tc1::IfcWindowLiningProperties::FirstTransomOffset() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcWindowLiningProperties::setFirstTransomOffset(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< double > Ifc4x3_tc1::IfcWindowLiningProperties::SecondTransomOffset() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } double v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcWindowLiningProperties::setSecondTransomOffset(boost::optional< double > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< double > Ifc4x3_tc1::IfcWindowLiningProperties::FirstMullionOffset() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } double v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcWindowLiningProperties::setFirstMullionOffset(boost::optional< double > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
boost::optional< double > Ifc4x3_tc1::IfcWindowLiningProperties::SecondMullionOffset() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } double v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcWindowLiningProperties::setSecondMullionOffset(boost::optional< double > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
::Ifc4x3_tc1::IfcShapeAspect* Ifc4x3_tc1::IfcWindowLiningProperties::ShapeAspectStyle() const { if(data_.get_attribute_value(12).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(12)))->as<::Ifc4x3_tc1::IfcShapeAspect>(true); }
void Ifc4x3_tc1::IfcWindowLiningProperties::setShapeAspectStyle(::Ifc4x3_tc1::IfcShapeAspect* v) { set_attribute_value(12, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(12); }
boost::optional< double > Ifc4x3_tc1::IfcWindowLiningProperties::LiningOffset() const { if(data_.get_attribute_value(13).isNull()) { return boost::none; } double v = data_.get_attribute_value(13); return v; }
void Ifc4x3_tc1::IfcWindowLiningProperties::setLiningOffset(boost::optional< double > v) { if (v) {set_attribute_value(13, *v);} else {unset_attribute_value(13);} }
boost::optional< double > Ifc4x3_tc1::IfcWindowLiningProperties::LiningToPanelOffsetX() const { if(data_.get_attribute_value(14).isNull()) { return boost::none; } double v = data_.get_attribute_value(14); return v; }
void Ifc4x3_tc1::IfcWindowLiningProperties::setLiningToPanelOffsetX(boost::optional< double > v) { if (v) {set_attribute_value(14, *v);} else {unset_attribute_value(14);} }
boost::optional< double > Ifc4x3_tc1::IfcWindowLiningProperties::LiningToPanelOffsetY() const { if(data_.get_attribute_value(15).isNull()) { return boost::none; } double v = data_.get_attribute_value(15); return v; }
void Ifc4x3_tc1::IfcWindowLiningProperties::setLiningToPanelOffsetY(boost::optional< double > v) { if (v) {set_attribute_value(15, *v);} else {unset_attribute_value(15);} }


const IfcParse::entity& Ifc4x3_tc1::IfcWindowLiningProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1290]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWindowLiningProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1290]); }
Ifc4x3_tc1::IfcWindowLiningProperties::IfcWindowLiningProperties(IfcEntityInstanceData&& e) : IfcPreDefinedPropertySet(std::move(e)) { }
Ifc4x3_tc1::IfcWindowLiningProperties::IfcWindowLiningProperties(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< double > v5_LiningDepth, boost::optional< double > v6_LiningThickness, boost::optional< double > v7_TransomThickness, boost::optional< double > v8_MullionThickness, boost::optional< double > v9_FirstTransomOffset, boost::optional< double > v10_SecondTransomOffset, boost::optional< double > v11_FirstMullionOffset, boost::optional< double > v12_SecondMullionOffset, ::Ifc4x3_tc1::IfcShapeAspect* v13_ShapeAspectStyle, boost::optional< double > v14_LiningOffset, boost::optional< double > v15_LiningToPanelOffsetX, boost::optional< double > v16_LiningToPanelOffsetY) : IfcPreDefinedPropertySet(IfcEntityInstanceData(storage_t(16))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_LiningDepth) {set_attribute_value(4, (*v5_LiningDepth)); } if (v6_LiningThickness) {set_attribute_value(5, (*v6_LiningThickness)); } if (v7_TransomThickness) {set_attribute_value(6, (*v7_TransomThickness)); } if (v8_MullionThickness) {set_attribute_value(7, (*v8_MullionThickness)); } if (v9_FirstTransomOffset) {set_attribute_value(8, (*v9_FirstTransomOffset)); } if (v10_SecondTransomOffset) {set_attribute_value(9, (*v10_SecondTransomOffset)); } if (v11_FirstMullionOffset) {set_attribute_value(10, (*v11_FirstMullionOffset)); } if (v12_SecondMullionOffset) {set_attribute_value(11, (*v12_SecondMullionOffset)); }set_attribute_value(12, v13_ShapeAspectStyle ? v13_ShapeAspectStyle->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v14_LiningOffset) {set_attribute_value(13, (*v14_LiningOffset)); } if (v15_LiningToPanelOffsetX) {set_attribute_value(14, (*v15_LiningToPanelOffsetX)); } if (v16_LiningToPanelOffsetY) {set_attribute_value(15, (*v16_LiningToPanelOffsetY)); }; populate_derived(); }

// Function implementations for IfcWindowPanelProperties
::Ifc4x3_tc1::IfcWindowPanelOperationEnum::Value Ifc4x3_tc1::IfcWindowPanelProperties::OperationType() const {  return ::Ifc4x3_tc1::IfcWindowPanelOperationEnum::FromString(data_.get_attribute_value(4)); }
void Ifc4x3_tc1::IfcWindowPanelProperties::setOperationType(::Ifc4x3_tc1::IfcWindowPanelOperationEnum::Value v) { set_attribute_value(4, EnumerationReference(&::Ifc4x3_tc1::IfcWindowPanelOperationEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(4); }
::Ifc4x3_tc1::IfcWindowPanelPositionEnum::Value Ifc4x3_tc1::IfcWindowPanelProperties::PanelPosition() const {  return ::Ifc4x3_tc1::IfcWindowPanelPositionEnum::FromString(data_.get_attribute_value(5)); }
void Ifc4x3_tc1::IfcWindowPanelProperties::setPanelPosition(::Ifc4x3_tc1::IfcWindowPanelPositionEnum::Value v) { set_attribute_value(5, EnumerationReference(&::Ifc4x3_tc1::IfcWindowPanelPositionEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(5); }
boost::optional< double > Ifc4x3_tc1::IfcWindowPanelProperties::FrameDepth() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcWindowPanelProperties::setFrameDepth(boost::optional< double > v) { if (v) {set_attribute_value(6, *v);} else {unset_attribute_value(6);} }
boost::optional< double > Ifc4x3_tc1::IfcWindowPanelProperties::FrameThickness() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcWindowPanelProperties::setFrameThickness(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
::Ifc4x3_tc1::IfcShapeAspect* Ifc4x3_tc1::IfcWindowPanelProperties::ShapeAspectStyle() const { if(data_.get_attribute_value(8).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(8)))->as<::Ifc4x3_tc1::IfcShapeAspect>(true); }
void Ifc4x3_tc1::IfcWindowPanelProperties::setShapeAspectStyle(::Ifc4x3_tc1::IfcShapeAspect* v) { set_attribute_value(8, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(8); }


const IfcParse::entity& Ifc4x3_tc1::IfcWindowPanelProperties::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1293]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWindowPanelProperties::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1293]); }
Ifc4x3_tc1::IfcWindowPanelProperties::IfcWindowPanelProperties(IfcEntityInstanceData&& e) : IfcPreDefinedPropertySet(std::move(e)) { }
Ifc4x3_tc1::IfcWindowPanelProperties::IfcWindowPanelProperties(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_tc1::IfcWindowPanelOperationEnum::Value v5_OperationType, ::Ifc4x3_tc1::IfcWindowPanelPositionEnum::Value v6_PanelPosition, boost::optional< double > v7_FrameDepth, boost::optional< double > v8_FrameThickness, ::Ifc4x3_tc1::IfcShapeAspect* v9_ShapeAspectStyle) : IfcPreDefinedPropertySet(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); }set_attribute_value(4, (EnumerationReference(&::Ifc4x3_tc1::IfcWindowPanelOperationEnum::Class(),(size_t)v5_OperationType)));set_attribute_value(5, (EnumerationReference(&::Ifc4x3_tc1::IfcWindowPanelPositionEnum::Class(),(size_t)v6_PanelPosition))); if (v7_FrameDepth) {set_attribute_value(6, (*v7_FrameDepth)); } if (v8_FrameThickness) {set_attribute_value(7, (*v8_FrameThickness)); }set_attribute_value(8, v9_ShapeAspectStyle ? v9_ShapeAspectStyle->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);; populate_derived(); }

// Function implementations for IfcWindowType
::Ifc4x3_tc1::IfcWindowTypeEnum::Value Ifc4x3_tc1::IfcWindowType::PredefinedType() const {  return ::Ifc4x3_tc1::IfcWindowTypeEnum::FromString(data_.get_attribute_value(9)); }
void Ifc4x3_tc1::IfcWindowType::setPredefinedType(::Ifc4x3_tc1::IfcWindowTypeEnum::Value v) { set_attribute_value(9, EnumerationReference(&::Ifc4x3_tc1::IfcWindowTypeEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(9); }
::Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Value Ifc4x3_tc1::IfcWindowType::PartitioningType() const {  return ::Ifc4x3_tc1::IfcWindowTypePartitioningEnum::FromString(data_.get_attribute_value(10)); }
void Ifc4x3_tc1::IfcWindowType::setPartitioningType(::Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Value v) { set_attribute_value(10, EnumerationReference(&::Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Class(), (size_t) v));if constexpr (false)unset_attribute_value(10); }
boost::optional< bool > Ifc4x3_tc1::IfcWindowType::ParameterTakesPrecedence() const { if(data_.get_attribute_value(11).isNull()) { return boost::none; } bool v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcWindowType::setParameterTakesPrecedence(boost::optional< bool > v) { if (v) {set_attribute_value(11, *v);} else {unset_attribute_value(11);} }
boost::optional< std::string > Ifc4x3_tc1::IfcWindowType::UserDefinedPartitioningType() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcWindowType::setUserDefinedPartitioningType(boost::optional< std::string > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }


const IfcParse::entity& Ifc4x3_tc1::IfcWindowType::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1294]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWindowType::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1294]); }
Ifc4x3_tc1::IfcWindowType::IfcWindowType(IfcEntityInstanceData&& e) : IfcBuiltElementType(std::move(e)) { }
Ifc4x3_tc1::IfcWindowType::IfcWindowType(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_tc1::IfcWindowTypeEnum::Value v10_PredefinedType, ::Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Value v11_PartitioningType, boost::optional< bool > v12_ParameterTakesPrecedence, boost::optional< std::string > v13_UserDefinedPartitioningType) : IfcBuiltElementType(IfcEntityInstanceData(storage_t(13))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ApplicableOccurrence) {set_attribute_value(4, (*v5_ApplicableOccurrence)); } if (v6_HasPropertySets) {set_attribute_value(5, (*v6_HasPropertySets)->generalize()); } if (v7_RepresentationMaps) {set_attribute_value(6, (*v7_RepresentationMaps)->generalize()); } if (v8_Tag) {set_attribute_value(7, (*v8_Tag)); } if (v9_ElementType) {set_attribute_value(8, (*v9_ElementType)); }set_attribute_value(9, (EnumerationReference(&::Ifc4x3_tc1::IfcWindowTypeEnum::Class(),(size_t)v10_PredefinedType)));set_attribute_value(10, (EnumerationReference(&::Ifc4x3_tc1::IfcWindowTypePartitioningEnum::Class(),(size_t)v11_PartitioningType))); if (v12_ParameterTakesPrecedence) {set_attribute_value(11, (*v12_ParameterTakesPrecedence)); } if (v13_UserDefinedPartitioningType) {set_attribute_value(12, (*v13_UserDefinedPartitioningType)); }; populate_derived(); }

// Function implementations for IfcWorkCalendar
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcWorkTime >::ptr > Ifc4x3_tc1::IfcWorkCalendar::WorkingTimes() const { if(data_.get_attribute_value(6).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(6); return es->as< ::Ifc4x3_tc1::IfcWorkTime >(); }
void Ifc4x3_tc1::IfcWorkCalendar::setWorkingTimes(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcWorkTime >::ptr > v) { if (v) {set_attribute_value(6, (*v)->generalize());} else {unset_attribute_value(6);} }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcWorkTime >::ptr > Ifc4x3_tc1::IfcWorkCalendar::ExceptionTimes() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(7); return es->as< ::Ifc4x3_tc1::IfcWorkTime >(); }
void Ifc4x3_tc1::IfcWorkCalendar::setExceptionTimes(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcWorkTime >::ptr > v) { if (v) {set_attribute_value(7, (*v)->generalize());} else {unset_attribute_value(7);} }
boost::optional< ::Ifc4x3_tc1::IfcWorkCalendarTypeEnum::Value > Ifc4x3_tc1::IfcWorkCalendar::PredefinedType() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcWorkCalendarTypeEnum::FromString(data_.get_attribute_value(8)); }
void Ifc4x3_tc1::IfcWorkCalendar::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcWorkCalendarTypeEnum::Value > v) { if (v) {set_attribute_value(8, EnumerationReference(&::Ifc4x3_tc1::IfcWorkCalendarTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcWorkCalendar::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1297]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWorkCalendar::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1297]); }
Ifc4x3_tc1::IfcWorkCalendar::IfcWorkCalendar(IfcEntityInstanceData&& e) : IfcControl(std::move(e)) { }
Ifc4x3_tc1::IfcWorkCalendar::IfcWorkCalendar(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcWorkTime >::ptr > v7_WorkingTimes, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcWorkTime >::ptr > v8_ExceptionTimes, boost::optional< ::Ifc4x3_tc1::IfcWorkCalendarTypeEnum::Value > v9_PredefinedType) : IfcControl(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); } if (v7_WorkingTimes) {set_attribute_value(6, (*v7_WorkingTimes)->generalize()); } if (v8_ExceptionTimes) {set_attribute_value(7, (*v8_ExceptionTimes)->generalize()); } if (v9_PredefinedType) {set_attribute_value(8, (EnumerationReference(&::Ifc4x3_tc1::IfcWorkCalendarTypeEnum::Class(),(size_t)*v9_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcWorkControl
std::string Ifc4x3_tc1::IfcWorkControl::CreationDate() const {  std::string v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcWorkControl::setCreationDate(std::string v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPerson >::ptr > Ifc4x3_tc1::IfcWorkControl::Creators() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } aggregate_of_instance::ptr es = data_.get_attribute_value(7); return es->as< ::Ifc4x3_tc1::IfcPerson >(); }
void Ifc4x3_tc1::IfcWorkControl::setCreators(boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPerson >::ptr > v) { if (v) {set_attribute_value(7, (*v)->generalize());} else {unset_attribute_value(7);} }
boost::optional< std::string > Ifc4x3_tc1::IfcWorkControl::Purpose() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcWorkControl::setPurpose(boost::optional< std::string > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }
boost::optional< std::string > Ifc4x3_tc1::IfcWorkControl::Duration() const { if(data_.get_attribute_value(9).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(9); return v; }
void Ifc4x3_tc1::IfcWorkControl::setDuration(boost::optional< std::string > v) { if (v) {set_attribute_value(9, *v);} else {unset_attribute_value(9);} }
boost::optional< std::string > Ifc4x3_tc1::IfcWorkControl::TotalFloat() const { if(data_.get_attribute_value(10).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(10); return v; }
void Ifc4x3_tc1::IfcWorkControl::setTotalFloat(boost::optional< std::string > v) { if (v) {set_attribute_value(10, *v);} else {unset_attribute_value(10);} }
std::string Ifc4x3_tc1::IfcWorkControl::StartTime() const {  std::string v = data_.get_attribute_value(11); return v; }
void Ifc4x3_tc1::IfcWorkControl::setStartTime(std::string v) { set_attribute_value(11, v);if constexpr (false)unset_attribute_value(11); }
boost::optional< std::string > Ifc4x3_tc1::IfcWorkControl::FinishTime() const { if(data_.get_attribute_value(12).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(12); return v; }
void Ifc4x3_tc1::IfcWorkControl::setFinishTime(boost::optional< std::string > v) { if (v) {set_attribute_value(12, *v);} else {unset_attribute_value(12);} }


const IfcParse::entity& Ifc4x3_tc1::IfcWorkControl::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1299]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWorkControl::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1299]); }
Ifc4x3_tc1::IfcWorkControl::IfcWorkControl(IfcEntityInstanceData&& e) : IfcControl(std::move(e)) { }
Ifc4x3_tc1::IfcWorkControl::IfcWorkControl(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, std::string v7_CreationDate, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPerson >::ptr > v8_Creators, boost::optional< std::string > v9_Purpose, boost::optional< std::string > v10_Duration, boost::optional< std::string > v11_TotalFloat, std::string v12_StartTime, boost::optional< std::string > v13_FinishTime) : IfcControl(IfcEntityInstanceData(storage_t(13))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); }set_attribute_value(6, (v7_CreationDate)); if (v8_Creators) {set_attribute_value(7, (*v8_Creators)->generalize()); } if (v9_Purpose) {set_attribute_value(8, (*v9_Purpose)); } if (v10_Duration) {set_attribute_value(9, (*v10_Duration)); } if (v11_TotalFloat) {set_attribute_value(10, (*v11_TotalFloat)); }set_attribute_value(11, (v12_StartTime)); if (v13_FinishTime) {set_attribute_value(12, (*v13_FinishTime)); }; populate_derived(); }

// Function implementations for IfcWorkPlan
boost::optional< ::Ifc4x3_tc1::IfcWorkPlanTypeEnum::Value > Ifc4x3_tc1::IfcWorkPlan::PredefinedType() const { if(data_.get_attribute_value(13).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcWorkPlanTypeEnum::FromString(data_.get_attribute_value(13)); }
void Ifc4x3_tc1::IfcWorkPlan::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcWorkPlanTypeEnum::Value > v) { if (v) {set_attribute_value(13, EnumerationReference(&::Ifc4x3_tc1::IfcWorkPlanTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(13);} }


const IfcParse::entity& Ifc4x3_tc1::IfcWorkPlan::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1300]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWorkPlan::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1300]); }
Ifc4x3_tc1::IfcWorkPlan::IfcWorkPlan(IfcEntityInstanceData&& e) : IfcWorkControl(std::move(e)) { }
Ifc4x3_tc1::IfcWorkPlan::IfcWorkPlan(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, std::string v7_CreationDate, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPerson >::ptr > v8_Creators, boost::optional< std::string > v9_Purpose, boost::optional< std::string > v10_Duration, boost::optional< std::string > v11_TotalFloat, std::string v12_StartTime, boost::optional< std::string > v13_FinishTime, boost::optional< ::Ifc4x3_tc1::IfcWorkPlanTypeEnum::Value > v14_PredefinedType) : IfcWorkControl(IfcEntityInstanceData(storage_t(14))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); }set_attribute_value(6, (v7_CreationDate)); if (v8_Creators) {set_attribute_value(7, (*v8_Creators)->generalize()); } if (v9_Purpose) {set_attribute_value(8, (*v9_Purpose)); } if (v10_Duration) {set_attribute_value(9, (*v10_Duration)); } if (v11_TotalFloat) {set_attribute_value(10, (*v11_TotalFloat)); }set_attribute_value(11, (v12_StartTime)); if (v13_FinishTime) {set_attribute_value(12, (*v13_FinishTime)); } if (v14_PredefinedType) {set_attribute_value(13, (EnumerationReference(&::Ifc4x3_tc1::IfcWorkPlanTypeEnum::Class(),(size_t)*v14_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcWorkSchedule
boost::optional< ::Ifc4x3_tc1::IfcWorkScheduleTypeEnum::Value > Ifc4x3_tc1::IfcWorkSchedule::PredefinedType() const { if(data_.get_attribute_value(13).isNull()) { return boost::none; } return ::Ifc4x3_tc1::IfcWorkScheduleTypeEnum::FromString(data_.get_attribute_value(13)); }
void Ifc4x3_tc1::IfcWorkSchedule::setPredefinedType(boost::optional< ::Ifc4x3_tc1::IfcWorkScheduleTypeEnum::Value > v) { if (v) {set_attribute_value(13, EnumerationReference(&::Ifc4x3_tc1::IfcWorkScheduleTypeEnum::Class(), (size_t) *v));} else {unset_attribute_value(13);} }


const IfcParse::entity& Ifc4x3_tc1::IfcWorkSchedule::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1302]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWorkSchedule::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1302]); }
Ifc4x3_tc1::IfcWorkSchedule::IfcWorkSchedule(IfcEntityInstanceData&& e) : IfcWorkControl(std::move(e)) { }
Ifc4x3_tc1::IfcWorkSchedule::IfcWorkSchedule(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, std::string v7_CreationDate, boost::optional< aggregate_of< ::Ifc4x3_tc1::IfcPerson >::ptr > v8_Creators, boost::optional< std::string > v9_Purpose, boost::optional< std::string > v10_Duration, boost::optional< std::string > v11_TotalFloat, std::string v12_StartTime, boost::optional< std::string > v13_FinishTime, boost::optional< ::Ifc4x3_tc1::IfcWorkScheduleTypeEnum::Value > v14_PredefinedType) : IfcWorkControl(IfcEntityInstanceData(storage_t(14))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_Identification) {set_attribute_value(5, (*v6_Identification)); }set_attribute_value(6, (v7_CreationDate)); if (v8_Creators) {set_attribute_value(7, (*v8_Creators)->generalize()); } if (v9_Purpose) {set_attribute_value(8, (*v9_Purpose)); } if (v10_Duration) {set_attribute_value(9, (*v10_Duration)); } if (v11_TotalFloat) {set_attribute_value(10, (*v11_TotalFloat)); }set_attribute_value(11, (v12_StartTime)); if (v13_FinishTime) {set_attribute_value(12, (*v13_FinishTime)); } if (v14_PredefinedType) {set_attribute_value(13, (EnumerationReference(&::Ifc4x3_tc1::IfcWorkScheduleTypeEnum::Class(),(size_t)*v14_PredefinedType))); }; populate_derived(); }

// Function implementations for IfcWorkTime
::Ifc4x3_tc1::IfcRecurrencePattern* Ifc4x3_tc1::IfcWorkTime::RecurrencePattern() const { if(data_.get_attribute_value(3).isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(data_.get_attribute_value(3)))->as<::Ifc4x3_tc1::IfcRecurrencePattern>(true); }
void Ifc4x3_tc1::IfcWorkTime::setRecurrencePattern(::Ifc4x3_tc1::IfcRecurrencePattern* v) { set_attribute_value(3, v->as<IfcUtil::IfcBaseClass>());if constexpr (false)unset_attribute_value(3); }
boost::optional< std::string > Ifc4x3_tc1::IfcWorkTime::StartDate() const { if(data_.get_attribute_value(4).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcWorkTime::setStartDate(boost::optional< std::string > v) { if (v) {set_attribute_value(4, *v);} else {unset_attribute_value(4);} }
boost::optional< std::string > Ifc4x3_tc1::IfcWorkTime::FinishDate() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcWorkTime::setFinishDate(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }


const IfcParse::entity& Ifc4x3_tc1::IfcWorkTime::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1304]); }
const IfcParse::entity& Ifc4x3_tc1::IfcWorkTime::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1304]); }
Ifc4x3_tc1::IfcWorkTime::IfcWorkTime(IfcEntityInstanceData&& e) : IfcSchedulingTime(std::move(e)) { }
Ifc4x3_tc1::IfcWorkTime::IfcWorkTime(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_tc1::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, ::Ifc4x3_tc1::IfcRecurrencePattern* v4_RecurrencePattern, boost::optional< std::string > v5_StartDate, boost::optional< std::string > v6_FinishDate) : IfcSchedulingTime(IfcEntityInstanceData(storage_t(6))) {  if (v1_Name) {set_attribute_value(0, (*v1_Name)); } if (v2_DataOrigin) {set_attribute_value(1, (EnumerationReference(&::Ifc4x3_tc1::IfcDataOriginEnum::Class(),(size_t)*v2_DataOrigin))); } if (v3_UserDefinedDataOrigin) {set_attribute_value(2, (*v3_UserDefinedDataOrigin)); }set_attribute_value(3, v4_RecurrencePattern ? v4_RecurrencePattern->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v5_StartDate) {set_attribute_value(4, (*v5_StartDate)); } if (v6_FinishDate) {set_attribute_value(5, (*v6_FinishDate)); }; populate_derived(); }

// Function implementations for IfcZShapeProfileDef
double Ifc4x3_tc1::IfcZShapeProfileDef::Depth() const {  double v = data_.get_attribute_value(3); return v; }
void Ifc4x3_tc1::IfcZShapeProfileDef::setDepth(double v) { set_attribute_value(3, v);if constexpr (false)unset_attribute_value(3); }
double Ifc4x3_tc1::IfcZShapeProfileDef::FlangeWidth() const {  double v = data_.get_attribute_value(4); return v; }
void Ifc4x3_tc1::IfcZShapeProfileDef::setFlangeWidth(double v) { set_attribute_value(4, v);if constexpr (false)unset_attribute_value(4); }
double Ifc4x3_tc1::IfcZShapeProfileDef::WebThickness() const {  double v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcZShapeProfileDef::setWebThickness(double v) { set_attribute_value(5, v);if constexpr (false)unset_attribute_value(5); }
double Ifc4x3_tc1::IfcZShapeProfileDef::FlangeThickness() const {  double v = data_.get_attribute_value(6); return v; }
void Ifc4x3_tc1::IfcZShapeProfileDef::setFlangeThickness(double v) { set_attribute_value(6, v);if constexpr (false)unset_attribute_value(6); }
boost::optional< double > Ifc4x3_tc1::IfcZShapeProfileDef::FilletRadius() const { if(data_.get_attribute_value(7).isNull()) { return boost::none; } double v = data_.get_attribute_value(7); return v; }
void Ifc4x3_tc1::IfcZShapeProfileDef::setFilletRadius(boost::optional< double > v) { if (v) {set_attribute_value(7, *v);} else {unset_attribute_value(7);} }
boost::optional< double > Ifc4x3_tc1::IfcZShapeProfileDef::EdgeRadius() const { if(data_.get_attribute_value(8).isNull()) { return boost::none; } double v = data_.get_attribute_value(8); return v; }
void Ifc4x3_tc1::IfcZShapeProfileDef::setEdgeRadius(boost::optional< double > v) { if (v) {set_attribute_value(8, *v);} else {unset_attribute_value(8);} }


const IfcParse::entity& Ifc4x3_tc1::IfcZShapeProfileDef::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1306]); }
const IfcParse::entity& Ifc4x3_tc1::IfcZShapeProfileDef::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1306]); }
Ifc4x3_tc1::IfcZShapeProfileDef::IfcZShapeProfileDef(IfcEntityInstanceData&& e) : IfcParameterizedProfileDef(std::move(e)) { }
Ifc4x3_tc1::IfcZShapeProfileDef::IfcZShapeProfileDef(::Ifc4x3_tc1::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_tc1::IfcAxis2Placement2D* v3_Position, double v4_Depth, double v5_FlangeWidth, double v6_WebThickness, double v7_FlangeThickness, boost::optional< double > v8_FilletRadius, boost::optional< double > v9_EdgeRadius) : IfcParameterizedProfileDef(IfcEntityInstanceData(storage_t(9))) { set_attribute_value(0, (EnumerationReference(&::Ifc4x3_tc1::IfcProfileTypeEnum::Class(),(size_t)v1_ProfileType))); if (v2_ProfileName) {set_attribute_value(1, (*v2_ProfileName)); }set_attribute_value(2, v3_Position ? v3_Position->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr);set_attribute_value(3, (v4_Depth));set_attribute_value(4, (v5_FlangeWidth));set_attribute_value(5, (v6_WebThickness));set_attribute_value(6, (v7_FlangeThickness)); if (v8_FilletRadius) {set_attribute_value(7, (*v8_FilletRadius)); } if (v9_EdgeRadius) {set_attribute_value(8, (*v9_EdgeRadius)); }; populate_derived(); }

// Function implementations for IfcZone
boost::optional< std::string > Ifc4x3_tc1::IfcZone::LongName() const { if(data_.get_attribute_value(5).isNull()) { return boost::none; } std::string v = data_.get_attribute_value(5); return v; }
void Ifc4x3_tc1::IfcZone::setLongName(boost::optional< std::string > v) { if (v) {set_attribute_value(5, *v);} else {unset_attribute_value(5);} }


const IfcParse::entity& Ifc4x3_tc1::IfcZone::declaration() const { return *((IfcParse::entity*)IFC4X3_TC1_types[1305]); }
const IfcParse::entity& Ifc4x3_tc1::IfcZone::Class() { return *((IfcParse::entity*)IFC4X3_TC1_types[1305]); }
Ifc4x3_tc1::IfcZone::IfcZone(IfcEntityInstanceData&& e) : IfcSystem(std::move(e)) { }
Ifc4x3_tc1::IfcZone::IfcZone(std::string v1_GlobalId, ::Ifc4x3_tc1::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName) : IfcSystem(IfcEntityInstanceData(storage_t(6))) { set_attribute_value(0, (v1_GlobalId));set_attribute_value(1, v2_OwnerHistory ? v2_OwnerHistory->as<IfcUtil::IfcBaseClass>() : (IfcUtil::IfcBaseClass*) nullptr); if (v3_Name) {set_attribute_value(2, (*v3_Name)); } if (v4_Description) {set_attribute_value(3, (*v4_Description)); } if (v5_ObjectType) {set_attribute_value(4, (*v5_ObjectType)); } if (v6_LongName) {set_attribute_value(5, (*v6_LongName)); }; populate_derived(); }

