00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00020 #ifndef SHINFO_HPP
00021 #define SHINFO_HPP
00022
00023 #include <list>
00024 #include <string>
00025 #include "ShDllExport.hpp"
00026
00027 namespace SH {
00028
00032 class
00033 SH_DLLEXPORT
00034 ShInfo {
00035 public:
00036 virtual ~ShInfo();
00037 virtual ShInfo* clone() const = 0;
00038
00039 protected:
00040 ShInfo();
00041 };
00042
00044 class
00045 SH_DLLEXPORT
00046 ShInfoComment: public ShInfo {
00047 public:
00048 ShInfoComment(const std::string& comment);
00049 ShInfo* clone() const;
00050
00051 std::string comment;
00052 };
00053
00059 class
00060 SH_DLLEXPORT ShInfoHolder {
00061 public:
00062
00063 ShInfoHolder();
00064
00065
00066 ShInfoHolder(const ShInfoHolder &other);
00067
00068
00069 ShInfoHolder& operator=(const ShInfoHolder &other);
00070
00071 ~ShInfoHolder();
00072
00073
00074
00075
00076 template<typename T>
00077 T* get_info();
00078 template<typename T>
00079 const T* get_info() const;
00080
00081
00082
00083 template<typename T>
00084 void destroy_info();
00085
00086
00087 void add_info(ShInfo* new_info);
00088
00089
00090
00091 void remove_info(ShInfo* old_info);
00092
00093 private:
00094 void erase_all();
00095
00096 typedef std::list<ShInfo*> InfoList;
00097 InfoList info;
00098
00099 };
00100
00101 }
00102
00103 #include "ShInfoImpl.hpp"
00104
00105 #endif