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

HxTagList.h

Go to the documentation of this file.
00001 /*
00002  *  Copyright (c) 1998, University of Amsterdam, The Netherlands.
00003  *  All rights reserved.
00004  *
00005  *  Author(s):
00006  *  Edo Poll                (poll@wins.uva.nl)
00007  *  Marc Navarro            (mnavarro@wins.uva.nl)
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

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