00001 #ifndef REFERENCEREP_H 00002 #define REFERENCEREP_H 00003 00004 #include "Any.h" 00005 #include "FCO.h" 00006 #include "vector" 00007 00008 class ReferenceRep : public FCO 00009 { 00010 public: // types 00011 typedef std::vector<FCO *> RefereeList; 00012 typedef std::vector<FCO *>::iterator RefereeList_Iterator; 00013 typedef std::vector<FCO *>::const_iterator RefereeList_ConstIterator; 00014 00015 public: 00016 ReferenceRep( BON::FCO& ptr, BON::FCO& resp_ptr); 00017 ~ReferenceRep(); 00018 /*virtual*/ Any::KIND_TYPE getMyKind() const { return Any::REF; } 00019 /*virtual*/ std::string doDump(); 00020 00021 void addInitialReferee( FCO * refd ); 00022 FCO * getInitialReferee() const; 00023 const RefereeList& getInitialReferees() const; 00024 00025 void addFinalReferees( FCO * referee); 00026 void addFinalReferees( RefereeList & referees); 00027 const RefereeList& getFinalReferees() const; 00028 00029 bool finalize(); 00030 void inherit(); 00031 00032 bool pointsToModels() const; // true if points to models only 00033 std::vector<const ModelRep *> getModelRefVector() const; 00034 00035 bool checkNotEmpty() const; 00036 bool checkAllTheSameKind() const; 00037 00038 std::string refGetterTemplate(FCO *); 00039 00040 std::string dumpUsing(); 00041 std::string dumpUsingLine( FCO *); 00042 void createMethods(); 00043 std::string expose( const std::string& repl_container); 00044 std::string hide(); 00045 00046 protected: 00047 std::vector<Method> m_refGetterMethods; 00048 // initialy "this" refers to 00049 RefereeList m_initialReferees; 00050 // finally "this" refers to 00051 RefereeList m_finalReferees; 00052 // member that contains all the referees (including multiple steps by referring to a reference) 00053 RefereeList m_allReferees; 00054 00055 private: // forbiding copy 00056 ReferenceRep( const ReferenceRep&); 00057 const ReferenceRep& operator=( const ReferenceRep&); 00058 00059 }; 00060 00061 #endif //REFERENCEREP_H