00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00020 #ifndef SHINFOIMPL_HPP
00021 #define SHINFOIMPL_HPP
00022
00023 #include "ShInfo.hpp"
00024
00025 namespace SH {
00026
00027 template<typename T>
00028 T* ShInfoHolder::get_info()
00029 {
00030 for (InfoList::iterator I = info.begin(); I != info.end(); ++I) {
00031 T* item = dynamic_cast<T*>(*I);
00032 if (item) {
00033 return item;
00034 }
00035 }
00036 return 0;
00037 }
00038
00039 template<typename T>
00040 const T* ShInfoHolder::get_info() const
00041 {
00042 for (InfoList::const_iterator I = info.begin(); I != info.end(); ++I) {
00043 const T* item = dynamic_cast<const T*>(*I);
00044 if (item) {
00045 return item;
00046 }
00047 }
00048 return 0;
00049 }
00050
00051 template<typename T>
00052 void ShInfoHolder::destroy_info()
00053 {
00054 for (InfoList::iterator I = info.begin(); I != info.end();) {
00055 T* item = dynamic_cast<T*>(*I);
00056 if (item) {
00057 I = info.erase(I);
00058 delete item;
00059 } else {
00060 ++I;
00061 }
00062 }
00063 }
00064
00065 }
00066
00067 #endif