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