Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's quick Index  

HxRegKey.h

00001 /*
00002  *  Copyright (c) 1998, University of Amsterdam, The Netherlands.
00003  *  All rights reserved.
00004  *
00005  *
00006  *  Author(s):
00007  *  Dennis Koelma (koelma@wins.uva.nl)
00008  *  Edo Poll (poll@wins.uva.nl)
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 // Take care in using delete on HxRegKey*, keys can be part of a registry.
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

Generated on Tue Feb 3 14:18:41 2004 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001