#ifndef  TYPE_SDAIIFCOBJECTREFERENCESELECT_H
#define  TYPE_SDAIIFCOBJECTREFERENCESELECT_H

// This file was generated by exp2cxx,
// 0.8.1.
// You probably don't want to edit it since your modifications
// will be lost if exp2cxx is used to regenerate it.


//////////  SELECT TYPE SdaiIfcobjectreferenceselect
class SC_SCHEMA_EXPORT SdaiIfcobjectreferenceselect  :  public SDAI_Select {
  protected:
    //  types in SELECT 
    //   IFCMATERIAL    --  sdaiINSTANCE
    //   IFCPERSON    --  sdaiINSTANCE
    //   IFCDATEANDTIME    --  sdaiINSTANCE
    //   IFCMATERIALLIST    --  sdaiINSTANCE
    //   IFCORGANIZATION    --  sdaiINSTANCE
    //   IFCCALENDARDATE    --  sdaiINSTANCE
    //   IFCLOCALTIME    --  sdaiINSTANCE
    //   IFCPERSONANDORGANIZATION    --  sdaiINSTANCE
    //   IFCMATERIALLAYER    --  sdaiINSTANCE
    //   IFCEXTERNALREFERENCE    --  sdaiINSTANCE
    //   IFCTIMESERIES    --  sdaiINSTANCE
    //   IFCADDRESS    --  sdaiINSTANCE
    //   IFCAPPLIEDVALUE    --  sdaiINSTANCE
       SDAI_Application_instance_ptr _app_inst;

  public:
    virtual const TypeDescriptor * AssignEntity (SDAI_Application_instance * se);
    virtual SDAI_Select * NewSelect ();

    virtual BASE_TYPE ValueType() const;


// STEP Part 21
    virtual void STEPwrite_content (ostream& out =std::cout,
                    const char *currSch =0) const;
    virtual void STEPwrite_verbose (ostream& out =std::cout,
                    const char *currSch =0) const;
    virtual Severity STEPread_content (istream& in =cin,
        InstMgrBase * instances =0, const char *utype =0,
        int addFileId =0, const char *currSch =0);
    virtual Severity StrToVal_content (const char *,
        InstMgrBase * instances =0);

// STEP Part 22:  SDAI

// constructors
    SdaiIfcobjectreferenceselect( const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    //  part 1
    SdaiIfcobjectreferenceselect( const SdaiIfcmaterial_ptr&,
                                  const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    SdaiIfcobjectreferenceselect( const SdaiIfcperson_ptr&,
                                  const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    SdaiIfcobjectreferenceselect( const SdaiIfcdateandtime_ptr&,
                                  const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    SdaiIfcobjectreferenceselect( const SdaiIfcmateriallist_ptr&,
                                  const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    SdaiIfcobjectreferenceselect( const SdaiIfcorganization_ptr&,
                                  const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    SdaiIfcobjectreferenceselect( const SdaiIfccalendardate_ptr&,
                                  const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    SdaiIfcobjectreferenceselect( const SdaiIfclocaltime_ptr&,
                                  const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    SdaiIfcobjectreferenceselect( const SdaiIfcpersonandorganization_ptr&,
                                  const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    SdaiIfcobjectreferenceselect( const SdaiIfcmateriallayer_ptr&,
                                  const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    SdaiIfcobjectreferenceselect( const SdaiIfcexternalreference_ptr&,
                                  const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    SdaiIfcobjectreferenceselect( const SdaiIfctimeseries_ptr&,
                                  const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    SdaiIfcobjectreferenceselect( const SdaiIfcaddress_ptr&,
                                  const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    SdaiIfcobjectreferenceselect( const SdaiIfcappliedvalue_ptr&,
                                  const SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    virtual ~SdaiIfcobjectreferenceselect();

    //  part 2
    operator SdaiIfcmaterial_ptr();
    operator SdaiIfcperson_ptr();
    operator SdaiIfcdateandtime_ptr();
    operator SdaiIfcmateriallist_ptr();
    operator SdaiIfcorganization_ptr();
    operator SdaiIfccalendardate_ptr();
    operator SdaiIfclocaltime_ptr();
    operator SdaiIfcpersonandorganization_ptr();
    operator SdaiIfcmateriallayer_ptr();
    operator SdaiIfcexternalreference_ptr();
    operator SdaiIfctimeseries_ptr();
    operator SdaiIfcaddress_ptr();
    operator SdaiIfcappliedvalue_ptr();

    //  part 3
        EntityAggregate_ptr_c iscomponentin_() const;
        EntityAggregate_ptr   iscomponentin_();
        void iscomponentin_( const EntityAggregate_ptr x );

        EntityAggregate_ptr_c valueofcomponents_() const;
        EntityAggregate_ptr   valueofcomponents_();
        void valueofcomponents_( const EntityAggregate_ptr x );

        EntityAggregate_ptr_c valuesreferenced_() const;
        EntityAggregate_ptr   valuesreferenced_();
        void valuesreferenced_( const EntityAggregate_ptr x );

        SdaiIfcdatetimeselect_ptr_c fixeduntildate_() const;
        SdaiIfcdatetimeselect_ptr   fixeduntildate_();
        void fixeduntildate_( const SdaiIfcdatetimeselect_ptr x );

        SdaiIfcdatetimeselect_ptr_c applicabledate_() const;
        SdaiIfcdatetimeselect_ptr   applicabledate_();
        void applicabledate_( const SdaiIfcdatetimeselect_ptr x );

        SdaiIfcmeasurewithunit_ptr_c unitbasis_() const;
        SdaiIfcmeasurewithunit_ptr   unitbasis_();
        void unitbasis_( const SdaiIfcmeasurewithunit_ptr x );

        SdaiIfcappliedvalueselect_ptr_c appliedvalue_() const;
        SdaiIfcappliedvalueselect_ptr   appliedvalue_();
        void appliedvalue_( const SdaiIfcappliedvalueselect_ptr x );

        EntityAggregate_ptr_c oforganization_() const;
        EntityAggregate_ptr   oforganization_();
        void oforganization_( const EntityAggregate_ptr x );

        EntityAggregate_ptr_c ofperson_() const;
        EntityAggregate_ptr   ofperson_();
        void ofperson_( const EntityAggregate_ptr x );

  const SdaiIfclabel   userdefinedpurpose_() const;
        SdaiIfclabel   userdefinedpurpose_();
        void userdefinedpurpose_( const SdaiIfclabel x );

  const SdaiIfcaddresstypeenum_var   purpose_() const;
        SdaiIfcaddresstypeenum_var   purpose_();
        void purpose_( const SdaiIfcaddresstypeenum_var x );

        EntityAggregate_ptr_c documentedby_() const;
        EntityAggregate_ptr   documentedby_();
        void documentedby_( const EntityAggregate_ptr x );

        SdaiIfcunit_ptr_c unit_() const;
        SdaiIfcunit_ptr   unit_();
        void unit_( const SdaiIfcunit_ptr x );

  const SdaiIfclabel   userdefineddataorigin_() const;
        SdaiIfclabel   userdefineddataorigin_();
        void userdefineddataorigin_( const SdaiIfclabel x );

  const SdaiIfcdataoriginenum_var   dataorigin_() const;
        SdaiIfcdataoriginenum_var   dataorigin_();
        void dataorigin_( const SdaiIfcdataoriginenum_var x );

  const SdaiIfctimeseriesdatatypeenum_var   timeseriesdatatype_() const;
        SdaiIfctimeseriesdatatypeenum_var   timeseriesdatatype_();
        void timeseriesdatatype_( const SdaiIfctimeseriesdatatypeenum_var x );

        SdaiIfcdatetimeselect_ptr_c endtime_() const;
        SdaiIfcdatetimeselect_ptr   endtime_();
        void endtime_( const SdaiIfcdatetimeselect_ptr x );

        SdaiIfcdatetimeselect_ptr_c starttime_() const;
        SdaiIfcdatetimeselect_ptr   starttime_();
        void starttime_( const SdaiIfcdatetimeselect_ptr x );

  const SdaiIfcidentifier   itemreference_() const;
        SdaiIfcidentifier   itemreference_();
        void itemreference_( const SdaiIfcidentifier x );

  const SdaiIfclabel   location_() const;
        SdaiIfclabel   location_();
        void location_( const SdaiIfclabel x );

        SdaiIfcmateriallayerset_ptr_c tomateriallayerset_() const;
        SdaiIfcmateriallayerset_ptr   tomateriallayerset_();
        void tomateriallayerset_( const SdaiIfcmateriallayerset_ptr x );

        Logical   isventilated_() const;
        void isventilated_( const Logical x );

        SdaiIfcpositivelengthmeasure   layerthickness_() const;
        void layerthickness_( const SdaiIfcpositivelengthmeasure x );

        SdaiIfcmaterial_ptr_c material_() const;
        SdaiIfcmaterial_ptr   material_();
        void material_( const SdaiIfcmaterial_ptr x );

        SdaiIfcorganization_ptr_c theorganization_() const;
        SdaiIfcorganization_ptr   theorganization_();
        void theorganization_( const SdaiIfcorganization_ptr x );

        SdaiIfcperson_ptr_c theperson_() const;
        SdaiIfcperson_ptr   theperson_();
        void theperson_( const SdaiIfcperson_ptr x );

        SdaiIfcdaylightsavinghour   daylightsavingoffset_() const;
        void daylightsavingoffset_( const SdaiIfcdaylightsavinghour x );

        SdaiIfccoordinateduniversaltimeoffset_ptr_c zone_() const;
        SdaiIfccoordinateduniversaltimeoffset_ptr   zone_();
        void zone_( const SdaiIfccoordinateduniversaltimeoffset_ptr x );

        SdaiIfcsecondinminute   secondcomponent_() const;
        void secondcomponent_( const SdaiIfcsecondinminute x );

        SdaiIfcminuteinhour   minutecomponent_() const;
        void minutecomponent_( const SdaiIfcminuteinhour x );

        SdaiIfchourinday   hourcomponent_() const;
        void hourcomponent_( const SdaiIfchourinday x );

        SdaiIfcyearnumber   yearcomponent_() const;
        void yearcomponent_( const SdaiIfcyearnumber x );

        SdaiIfcmonthinyearnumber   monthcomponent_() const;
        void monthcomponent_( const SdaiIfcmonthinyearnumber x );

        SdaiIfcdayinmonthnumber   daycomponent_() const;
        void daycomponent_( const SdaiIfcdayinmonthnumber x );

        EntityAggregate_ptr_c engages_() const;
        EntityAggregate_ptr   engages_();
        void engages_( const EntityAggregate_ptr x );

        EntityAggregate_ptr_c relates_() const;
        EntityAggregate_ptr   relates_();
        void relates_( const EntityAggregate_ptr x );

        EntityAggregate_ptr_c isrelatedby_() const;
        EntityAggregate_ptr   isrelatedby_();
        void isrelatedby_( const EntityAggregate_ptr x );

  const SdaiIfctext   description_() const;
        SdaiIfctext   description_();
        void description_( const SdaiIfctext x );

        EntityAggregate_ptr_c materials_() const;
        EntityAggregate_ptr   materials_();
        void materials_( const EntityAggregate_ptr x );

        SdaiIfclocaltime_ptr_c timecomponent_() const;
        SdaiIfclocaltime_ptr   timecomponent_();
        void timecomponent_( const SdaiIfclocaltime_ptr x );

        SdaiIfccalendardate_ptr_c datecomponent_() const;
        SdaiIfccalendardate_ptr   datecomponent_();
        void datecomponent_( const SdaiIfccalendardate_ptr x );

        EntityAggregate_ptr_c engagedin_() const;
        EntityAggregate_ptr   engagedin_();
        void engagedin_( const EntityAggregate_ptr x );

        EntityAggregate_ptr_c addresses_() const;
        EntityAggregate_ptr   addresses_();
        void addresses_( const EntityAggregate_ptr x );

        EntityAggregate_ptr_c roles_() const;
        EntityAggregate_ptr   roles_();
        void roles_( const EntityAggregate_ptr x );

        StringAggregate_ptr_c suffixtitles_() const;
        StringAggregate_ptr   suffixtitles_();
        void suffixtitles_( const StringAggregate_ptr x );

        StringAggregate_ptr_c prefixtitles_() const;
        StringAggregate_ptr   prefixtitles_();
        void prefixtitles_( const StringAggregate_ptr x );

        StringAggregate_ptr_c middlenames_() const;
        StringAggregate_ptr   middlenames_();
        void middlenames_( const StringAggregate_ptr x );

  const SdaiIfclabel   givenname_() const;
        SdaiIfclabel   givenname_();
        void givenname_( const SdaiIfclabel x );

  const SdaiIfclabel   familyname_() const;
        SdaiIfclabel   familyname_();
        void familyname_( const SdaiIfclabel x );

  const SdaiIfcidentifier   id_() const;
        SdaiIfcidentifier   id_();
        void id_( const SdaiIfcidentifier x );

        EntityAggregate_ptr_c classifiedas_() const;
        EntityAggregate_ptr   classifiedas_();
        void classifiedas_( const EntityAggregate_ptr x );

        EntityAggregate_ptr_c hasrepresentation_() const;
        EntityAggregate_ptr   hasrepresentation_();
        void hasrepresentation_( const EntityAggregate_ptr x );

  const SdaiIfclabel   name_() const;
        SdaiIfclabel   name_();
        void name_( const SdaiIfclabel x );


    //  part 4
    SdaiIfcobjectreferenceselect& operator =( const SdaiIfcmaterial_ptr& );
    SdaiIfcobjectreferenceselect& operator =( const SdaiIfcperson_ptr& );
    SdaiIfcobjectreferenceselect& operator =( const SdaiIfcdateandtime_ptr& );
    SdaiIfcobjectreferenceselect& operator =( const SdaiIfcmateriallist_ptr& );
    SdaiIfcobjectreferenceselect& operator =( const SdaiIfcorganization_ptr& );
    SdaiIfcobjectreferenceselect& operator =( const SdaiIfccalendardate_ptr& );
    SdaiIfcobjectreferenceselect& operator =( const SdaiIfclocaltime_ptr& );
    SdaiIfcobjectreferenceselect& operator =( const SdaiIfcpersonandorganization_ptr& );
    SdaiIfcobjectreferenceselect& operator =( const SdaiIfcmateriallayer_ptr& );
    SdaiIfcobjectreferenceselect& operator =( const SdaiIfcexternalreference_ptr& );
    SdaiIfcobjectreferenceselect& operator =( const SdaiIfctimeseries_ptr& );
    SdaiIfcobjectreferenceselect& operator =( const SdaiIfcaddress_ptr& );
    SdaiIfcobjectreferenceselect& operator =( const SdaiIfcappliedvalue_ptr& );
    // not in SDAI
    SdaiIfcobjectreferenceselect& ShallowCopy ( const SdaiIfcobjectreferenceselect& );

#ifdef COMPILER_DEFINES_OPERATOR_EQ
#else
    SdaiIfcobjectreferenceselect& operator =( SdaiIfcobjectreferenceselect * const & );
    SDAI_Select& operator =( const SDAI_Select& );
#endif

    //  part 5
    Logical IsIfcmaterial() const;
    Logical IsIfcperson() const;
    Logical IsIfcdateandtime() const;
    Logical IsIfcmateriallist() const;
    Logical IsIfcorganization() const;
    Logical IsIfccalendardate() const;
    Logical IsIfclocaltime() const;
    Logical IsIfcpersonandorganization() const;
    Logical IsIfcmateriallayer() const;
    Logical IsIfcexternalreference() const;
    Logical IsIfctimeseries() const;
    Logical IsIfcaddress() const;
    Logical IsIfcappliedvalue() const;

    //  part 6 ... UnderlyingTypeName () implemented in SDAI_Select class ...

    //  part 7 ... NONE    only for complex selects...
};

inline SDAI_Select * create_SdaiIfcobjectreferenceselect () { return new SdaiIfcobjectreferenceselect; }
typedef SdaiIfcobjectreferenceselect * SdaiIfcobjectreferenceselectH;
typedef SdaiIfcobjectreferenceselect_ptr SdaiIfcobjectreferenceselect_var;


class SdaiIfcobjectreferenceselect_agg : public SelectAggregate {
  protected:
    SelectTypeDescriptor *sel_type;

  public:
    SdaiIfcobjectreferenceselect_agg( SelectTypeDescriptor * =ifc2x3::t_ifcobjectreferenceselect );
    ~SdaiIfcobjectreferenceselect_agg();
    virtual SingleLinkNode * NewNode()
     { return new SelectNode (new SdaiIfcobjectreferenceselect( sel_type )); }
};
inline STEPaggregate * create_SdaiIfcobjectreferenceselect_agg () { return new SdaiIfcobjectreferenceselect_agg; }
typedef SdaiIfcobjectreferenceselect_agg_ptr SdaiIfcobjectreferenceselect_agg_var;

/////  END SELECT TYPE ifcobjectreferenceselect

void init_SdaiIfcobjectreferenceselect(Registry& reg);

#endif
