Main Page   Class Overview   Pixels   Images   Geometry   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 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                         // Below are shorthands for findValue.
00066                         // Existence of the values cannot be determined
00067                         // from the return value.
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

Generated on Tue Jan 8 13:59:16 2002 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001