00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef HxRegKey_h
00012 #define HxRegKey_h
00013
00014 #include "HxIoFwd.h"
00015 #include "HxString.h"
00016 #include "HxStringList.h"
00017
00018 #include "HxRegData.h"
00019 #include "HxRegValue.h"
00020
00021 #include "HxRegKeyList.h"
00022 #include "HxRegValueList.h"
00023
00024 #pragma warning (disable : 4786)
00025
00026 #include <list>
00027 #include <vector>
00028 #include <map>
00029 #include <algorithm>
00030
00031 typedef std::map<HxString, HxRegKeyPtr, std::less<HxString> > HxRegKeyMap;
00032 typedef HxRegKeyMap::value_type HxRegKeyEntry;
00033
00034
00035
00036
00037
00038 class L_HXBASIS HxRegKey
00039 {
00040 public:
00041 ~HxRegKey();
00042
00043 static HxRegKey* createRootKey();
00044
00045 HxString getName() const;
00046 HxRegKey* getParent() const;
00047
00048 HxRegKey* insertKey(HxString path);
00049 void eraseKey(HxString name);
00050
00051 HxRegKey* findKey(HxString path) const;
00052 HxRegKey* findKey(
00053 HxStringListConstIter first,
00054 HxStringListConstIter last) const;
00055
00056 int getKeyList(HxRegKeyListBackInserter) const;
00057 size_t keyListSize() const;
00058
00059 void insertValue(HxString name, const HxRegData& data);
00060 void insertValue(const HxRegValue& value);
00061 void eraseValue(HxString name);
00062
00063 const HxRegValue* findValue(HxString name) const;
00064
00065
00066
00067
00068 int getInt(HxString name) const;
00069 HxString getString(HxString name) const;
00070
00071 int getValueList(HxRegValueListBackInserter);
00072 size_t valueListSize() const;
00073
00074 STD_OSTREAM& put(STD_OSTREAM&) const;
00075 STD_OSTREAM& put(STD_OSTREAM&, HxString path, int cCode = 0) const;
00076
00077 private:
00078 HxRegKey(HxString name, HxRegKey* parent);
00079 HxRegKey();
00080 HxRegKey(const HxRegKey&);
00081
00082 const HxRegKey& operator=(const HxRegKey&);
00083
00084 typedef std::vector<HxRegValue> ValueVector;
00085
00086 HxRegKey* insertOneKey(HxString name);
00087
00088 #pragma warning (disable : 4251)
00089 HxString _name;
00090 HxRegKeyMap* _keys;
00091 ValueVector _values;
00092 HxRegKey* _parent;
00093 #pragma warning (default : 4251)
00094
00095 friend class HxRegKeyFriend;
00096 };
00097
00098 inline STD_OSTREAM&
00099 operator<<(STD_OSTREAM& os, const HxRegKey& key)
00100 {
00101 return key.put(os);
00102 }
00103
00104 inline HxString
00105 HxRegKey::getName() const
00106 {
00107 return _name;
00108 }
00109
00110 inline HxRegKey*
00111 HxRegKey::getParent() const
00112 {
00113 return _parent;
00114 }
00115
00116 inline void
00117 HxRegKey::insertValue(HxString name, const HxRegData& data)
00118 {
00119 insertValue(HxRegValue(name, data));
00120 }
00121
00122 inline int
00123 HxRegKey::getInt(HxString name) const
00124 {
00125 const HxRegValue* val = findValue(name);
00126 return val ? val->getData().getInt() : 0;
00127 }
00128
00129 inline HxString
00130 HxRegKey::getString(HxString name) const
00131 {
00132 const HxRegValue* val = findValue(name);
00133 return val ? val->getData().getString() : HxString();
00134 }
00135
00136 #endif