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
00041 class L_HXBASIS HxRegKey
00042 {
00043 public:
00045 ~HxRegKey();
00046
00048 static HxRegKey* createRootKey();
00049
00051 HxString getName() const;
00053 HxRegKey* getParent() const;
00054
00056 HxRegKey* insertKey(HxString path);
00058 void eraseKey(HxString name);
00059
00061 HxRegKey* findKey(HxString path) const;
00063 HxRegKey* findKey(
00064 HxStringListConstIter first,
00065 HxStringListConstIter last) const;
00066
00068 int getKeyList(HxRegKeyListBackInserter) const;
00070 size_t keyListSize() const;
00071
00073 void insertValue(HxString name, const HxRegData& data);
00075 void insertValue(const HxRegValue& value);
00077 void eraseValue(HxString name);
00078
00080 const HxRegValue* findValue(HxString name) const;
00081
00086 int getInt(HxString name) const;
00091 HxString getString(HxString name) const;
00092
00097 int getValueList(HxRegValueListBackInserter);
00102 size_t valueListSize() const;
00103
00105 STD_OSTREAM& put(STD_OSTREAM&) const;
00107 STD_OSTREAM& put(STD_OSTREAM&, HxString path, int cCode = 0) const;
00108
00109 private:
00110 HxRegKey(HxString name, HxRegKey* parent);
00111 HxRegKey();
00112 HxRegKey(const HxRegKey&);
00113
00114 const HxRegKey& operator=(const HxRegKey&);
00115
00116 typedef std::vector<HxRegValue> ValueVector;
00117
00118 HxRegKey* insertOneKey(HxString name);
00119
00120 #pragma warning (disable : 4251)
00121 HxString _name;
00122 HxRegKeyMap* _keys;
00123 ValueVector _values;
00124 HxRegKey* _parent;
00125 #pragma warning (default : 4251)
00126
00127 friend class HxRegKeyFriend;
00128 };
00129
00130 inline STD_OSTREAM&
00131 operator<<(STD_OSTREAM& os, const HxRegKey& key)
00132 {
00133 return key.put(os);
00134 }
00135
00136 inline HxString
00137 HxRegKey::getName() const
00138 {
00139 return _name;
00140 }
00141
00142 inline HxRegKey*
00143 HxRegKey::getParent() const
00144 {
00145 return _parent;
00146 }
00147
00148 inline void
00149 HxRegKey::insertValue(HxString name, const HxRegData& data)
00150 {
00151 insertValue(HxRegValue(name, data));
00152 }
00153
00154 inline int
00155 HxRegKey::getInt(HxString name) const
00156 {
00157 const HxRegValue* val = findValue(name);
00158 return val ? val->getData().getInt() : 0;
00159 }
00160
00161 inline HxString
00162 HxRegKey::getString(HxString name) const
00163 {
00164 const HxRegValue* val = findValue(name);
00165 return val ? val->getData().getString() : HxString();
00166 }
00167
00168 #endif