00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef HxNameTable_h
00012 #define HxNameTable_h
00013
00014 #include "HxIoFwd.h"
00015 #include "HxString.h"
00016
00017 #include <vector>
00018 #include <map>
00019
00020 #pragma warning (disable : 4786)
00021
00022
00023
00024
00029 class L_HXBASIS HxNameTable
00030 {
00031 public:
00033 typedef size_t sizeType;
00034
00036 HxNameTable();
00037
00039 virtual ~HxNameTable();
00040
00042 void insert(HxString name, sizeType id);
00043
00045 sizeType getId(HxString name);
00046
00048 HxString getName(sizeType id) const;
00049
00051 std::vector<HxString> getNames() const;
00052
00054 STD_OSTREAM& put(STD_OSTREAM&) const;
00055
00056 private:
00057 typedef std::map<HxString, sizeType, std::less<HxString> > Map;
00058 typedef Map::value_type Entry;
00059 typedef std::vector<HxString> Index;
00060
00061 #pragma warning (disable : 4251 4786)
00062 Map _map;
00063 Index _index;
00064 #pragma warning (default : 4251)
00065 };
00066
00067 inline STD_OSTREAM&
00068 operator<<(STD_OSTREAM& os, const HxNameTable& nameTable)
00069 {
00070 return nameTable.put(os);
00071 }
00072
00073 #endif