00001 #ifndef RFL_NAMESPACE_HH
00002 #define RFL_NAMESPACE_HH
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <set>
00025 #include <mpu/String.hh>
00026
00027 namespace rfl {
00028
00029 class Type;
00030
00031 class Namespace {
00032 public:
00033
00034 struct RepoLink {};
00035
00036 static Namespace& id( void );
00037
00038 Namespace( const std::string& name, Namespace* parent = 0 );
00039
00040 Namespace* insert( Namespace& nmspc );
00041
00042 private:
00043
00044 struct Element {
00045 Namespace* nmspc_;
00046 const Type* type_;
00047 bool operator<( const Element& elm ) const;
00048 };
00049
00050 typedef std::set<Element> ElmSet;
00051
00052 mpu::String name_;
00053 const Namespace* parent_;
00054 const Namespace* root_;
00055 ElmSet elms_;
00056
00057 RepoLink* repo_;
00058
00059 Namespace( void );
00060 Namespace( const Namespace& );
00061 Namespace& operator=( const Namespace& );
00062 };
00063
00064 }
00065 #endif // RFL_NAMESPACE_HH