Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members

TypeInfo.h

00001 #ifndef ERIS_TYPE_INFO_H 00002 #define ERIS_TYPE_INFO_H 00003 00004 #include <Eris/Types.h> 00005 #include <Eris/typeService.h> 00006 00007 #include <sigc++/object.h> 00008 00009 #include <set> 00010 00011 namespace Atlas { namespace Objects { 00012 class Root; 00013 00014 } } 00015 00016 namespace Eris { 00017 00018 // lots of forward decleratrions 00019 class TypeInfo; 00020 class TypeService; 00021 class Connection; 00022 00023 const int INVALID_TYPEID = -1; 00024 00025 typedef TypeInfo* TypeInfoPtr; 00026 typedef std::set<TypeInfoPtr> TypeInfoSet; 00027 00043 class TypeInfo : virtual public SigC::Object 00044 { 00045 public: 00048 bool isA(TypeInfoPtr ti); 00049 00052 bool safeIsA(TypeInfoPtr ti); 00053 00056 bool isBound(); 00057 00058 // operators 00060 bool operator==(const TypeInfo &x) const; 00061 00063 bool operator<(const TypeInfo &x) const; 00064 00065 // accessors 00067 const std::string& getName() const; 00068 const TypeInfoSet & getChildren() const { 00069 return _children; 00070 } 00071 00073 int getTypeId() const 00074 { return _typeid; } 00075 00078 SigC::Signal0<void> & getBoundSignal(); 00079 00081 StringSet getParentsAsSet(); 00082 00083 protected: 00084 friend class TypeService; 00085 00087 TypeInfo(const std::string &id, TypeService*); 00088 00090 TypeInfo(const Atlas::Objects::Root &atype, TypeService*); 00091 00092 void addParent(TypeInfoPtr tp); 00093 void addChild(TypeInfoPtr tp); 00094 00096 void addAncestor(TypeInfoPtr tp); 00097 00099 void processTypeData(const Atlas::Objects::Root &atype); 00100 00101 void validateBind(); 00102 void setupDepends(); 00103 00104 // NOTE - I don't especially like the relations analogy, but it *is* very 00105 // clear what is meant, so I'm sticking with it. 00106 00108 TypeInfoSet _parents; 00110 TypeInfoSet _children; 00111 00113 TypeInfoSet _ancestors; 00114 00115 bool _bound; 00116 const std::string _name; 00117 int _typeid; 00118 00123 SigC::Signal0<void> Bound; 00124 00125 TypeService* _engine; 00126 }; 00127 00129 //TypeInfoPtr getTypeInfo(const std::string &type); 00130 00133 //TypeInfoPtr getTypeInfo(const Atlas::Objects::Root &obj) 00134 00135 } 00136 00137 #endif

Generated on Thu Jul 29 08:12:34 2004 for Eris by doxygen 1.3.7