#ifndef  ENTITY_SDAIIFCRECURRENCEPATTERN_H
#define  ENTITY_SDAIIFCRECURRENCEPATTERN_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.

class SC_SCHEMA_EXPORT SdaiIfcrecurrencepattern : public SDAI_Application_instance {
    protected:
        SdaiIfcrecurrencetypeenum_var _recurrencetype;
        IntAggregate_ptr _daycomponent = NULL;    //  OPTIONAL          //  of  ifcdayinmonthnumber

        IntAggregate_ptr _weekdaycomponent = NULL;    //  OPTIONAL          //  of  ifcdayinweeknumber

        IntAggregate_ptr _monthcomponent = NULL;    //  OPTIONAL          //  of  ifcmonthinyearnumber

        SDAI_Integer _position = 0;    //  OPTIONAL
        SDAI_Integer _interval = 0;    //  OPTIONAL
        SDAI_Integer _occurrences = 0;    //  OPTIONAL
        EntityAggregate_ptr _timeperiods = NULL;    //  OPTIONAL          //  of  ifctimeperiod

    public: 
        SdaiIfcrecurrencepattern();
        SdaiIfcrecurrencepattern( SDAI_Application_instance *se, bool addAttrs = true );
        SdaiIfcrecurrencepattern( SdaiIfcrecurrencepattern & e );
        ~SdaiIfcrecurrencepattern();
        int opcode() {
            return 82;
        }
  const SdaiIfcrecurrencetypeenum_var   recurrencetype_() const;
        SdaiIfcrecurrencetypeenum_var   recurrencetype_();
        void recurrencetype_( const SdaiIfcrecurrencetypeenum_var x );

        IntAggregate_ptr_c daycomponent_() const;
        IntAggregate_ptr   daycomponent_();
        void daycomponent_( const IntAggregate_ptr x );

        IntAggregate_ptr_c weekdaycomponent_() const;
        IntAggregate_ptr   weekdaycomponent_();
        void weekdaycomponent_( const IntAggregate_ptr x );

        IntAggregate_ptr_c monthcomponent_() const;
        IntAggregate_ptr   monthcomponent_();
        void monthcomponent_( const IntAggregate_ptr x );

        SdaiIfcinteger   position_() const;
        void position_( const SdaiIfcinteger x );

        SdaiIfcinteger   interval_() const;
        void interval_( const SdaiIfcinteger x );

        SdaiIfcinteger   occurrences_() const;
        void occurrences_( const SdaiIfcinteger x );

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

};

inline SdaiIfcrecurrencepattern * create_SdaiIfcrecurrencepattern() {
    return new SdaiIfcrecurrencepattern;
}

void init_SdaiIfcrecurrencepattern(Registry& reg);

namespace ifc4 {
    extern EntityDescriptor *e_ifcrecurrencepattern;
    extern AttrDescriptor *a_176recurrencetype;
    extern AttrDescriptor *a_177daycomponent;
    extern AttrDescriptor *a_178weekdaycomponent;
    extern AttrDescriptor *a_179monthcomponent;
    extern AttrDescriptor *a_180position;
    extern AttrDescriptor *a_181interval;
    extern AttrDescriptor *a_182occurrences;
    extern AttrDescriptor *a_183timeperiods;
}

#endif
