00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #ifndef HxTagList_h
00013 #define HxTagList_h
00014
00015 #include "HxStd.h"
00016 #include "HxIoFwd.h"
00017 #include "HxString.h"
00018 #include <list>
00019
00020 #include "HxTagTem.h"
00021
00022
00035 class L_HXBASIS HxTagList {
00036 public:
00038 HxTagList() {}
00039
00041 HxTagList(const HxTagList&);
00042
00044 ~HxTagList();
00045
00047 HxTagList& operator=(const HxTagList&);
00048
00050 void erase();
00051
00053 void addTag(HxTag*);
00054
00056 HxTag* getTag(HxString name) const;
00057
00059 HxString toString() const;
00060
00062 STD_OSTREAM& put(STD_OSTREAM&) const;
00063
00064
00066 typedef HxTag* TagPtr;
00067
00069 typedef std::list<TagPtr> List;
00070
00071 private:
00072
00073 List::const_iterator findTag(HxString name) const;
00074 List::iterator findTag(HxString name);
00075
00076 #pragma warning (disable : 4251)
00077 List _list;
00078 #pragma warning (default : 4251)
00079 };
00080
00081 inline STD_OSTREAM&
00082 operator<<(STD_OSTREAM& os, const HxTagList& tags)
00083 {
00084 return tags.put(os);
00085 }
00086
00089 template<class ValT>
00090 inline void
00091 HxAddTag(HxTagList& tags, HxString name, ValT v)
00092 {
00093 typedef HxTagTem<ValT> Tag;
00094 tags.addTag(new Tag(name, v));
00095 }
00096
00099 template<class ValT>
00100 inline ValT
00101 HxGetTag(const HxTagList& tags, HxString name)
00102 {
00103 typedef HxTagTem<ValT>* TagPtr;
00104 TagPtr t = TagPtr(tags.getTag(name));
00105 ValT v;
00106 if (t)
00107 v = t->getValue();
00108 return v;
00109 }
00110
00114 template<class ValT>
00115 inline ValT
00116 HxGetTag(const HxTagList& tags, HxString name, ValT defV)
00117 {
00118 typedef HxTagTem<ValT>* TagPtr;
00119 TagPtr t = TagPtr(tags.getTag(name));
00120 return t ? t->getValue() : defV;
00121 }
00122
00125 inline bool
00126 HxTagIsSet(const HxTagList& tags, HxString name)
00127 {
00128 return tags.getTag(name) ? true : false;
00129 }
00130
00131
00132 extern L_HXBASIS HxTagList&
00133 HxMakeTagList();
00134
00135 #endif