Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | 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 Sun Sep 4 14:14:04 2005 for Eris by  doxygen 1.4.4