#ifndef  TYPE_SDAICONSTRAINT_GROUP_MEMBER_H
#define  TYPE_SDAICONSTRAINT_GROUP_MEMBER_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 SdaiConstraint_group_member
class SC_SCHEMA_EXPORT SdaiConstraint_group_member  :  public SDAI_Select {
  protected:
    //  types in SELECT 
    //   EXPLICIT_CONSTRAINT    --  sdaiINSTANCE
    //   SIMULTANEOUS_CONSTRAINT_GROUP    --  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
    SdaiConstraint_group_member( const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_constraint_group_member );
    //  part 1
    SdaiConstraint_group_member( const SdaiExplicit_constraint_ptr&,
                                 const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_constraint_group_member );
    SdaiConstraint_group_member( const SdaiSimultaneous_constraint_group_ptr&,
                                 const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_constraint_group_member );
    virtual ~SdaiConstraint_group_member();

    //  part 2
    operator SdaiExplicit_constraint_ptr();
    operator SdaiSimultaneous_constraint_group_ptr();

    //  part 3
        SdaiConstraint_group_member_agg_ptr_c constraint_group_() const;
        SdaiConstraint_group_member_agg_ptr   constraint_group_();
        void constraint_group_( const SdaiConstraint_group_member_agg_ptr x );

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

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

  const SdaiText   description_() const;
        SdaiText   description_();
        void description_( const SdaiText x );

  const SdaiLabel   name_() const;
        SdaiLabel   name_();
        void name_( const SdaiLabel x );


    //  part 4
    SdaiConstraint_group_member& operator =( const SdaiExplicit_constraint_ptr& );
    SdaiConstraint_group_member& operator =( const SdaiSimultaneous_constraint_group_ptr& );
    // not in SDAI
    SdaiConstraint_group_member& ShallowCopy ( const SdaiConstraint_group_member& );

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

    //  part 5
    Logical IsExplicit_constraint() const;
    Logical IsSimultaneous_constraint_group() const;

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

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

inline SDAI_Select * create_SdaiConstraint_group_member () { return new SdaiConstraint_group_member; }
typedef SdaiConstraint_group_member * SdaiConstraint_group_memberH;
typedef SdaiConstraint_group_member_ptr SdaiConstraint_group_member_var;


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

  public:
    SdaiConstraint_group_member_agg( SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_constraint_group_member );
    ~SdaiConstraint_group_member_agg();
    virtual SingleLinkNode * NewNode()
     { return new SelectNode (new SdaiConstraint_group_member( sel_type )); }
};
inline STEPaggregate * create_SdaiConstraint_group_member_agg () { return new SdaiConstraint_group_member_agg; }
typedef SdaiConstraint_group_member_agg_ptr SdaiConstraint_group_member_agg_var;

/////  END SELECT TYPE constraint_group_member

void init_SdaiConstraint_group_member(Registry& reg);

#endif
