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