Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

ShInfoImpl.hpp

00001 // Sh: A GPU metaprogramming language.
00002 //
00003 // Copyright 2003-2005 Serious Hack Inc.
00004 // 
00005 // This software is provided 'as-is', without any express or implied
00006 // warranty. In no event will the authors be held liable for any damages
00007 // arising from the use of this software.
00008 // 
00009 // Permission is granted to anyone to use this software for any purpose,
00010 // including commercial applications, and to alter it and redistribute it
00011 // freely, subject to the following restrictions:
00012 // 
00013 // 1. The origin of this software must not be misrepresented; you must
00014 // not claim that you wrote the original software. If you use this
00015 // software in a product, an acknowledgment in the product documentation
00016 // would be appreciated but is not required.
00017 // 
00018 // 2. Altered source versions must be plainly marked as such, and must
00019 // not be misrepresented as being the original software.
00020 // 
00021 // 3. This notice may not be removed or altered from any source
00022 // distribution.
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 } // namespace SH
00070 
00071 #endif

Generated on Thu Apr 21 17:32:47 2005 for Sh by  doxygen 1.4.2