Resource.hpp
00001 00002 // 00003 // SFML - Simple and Fast Multimedia Library 00004 // Copyright (C) 2007 Laurent Gomila ([email protected]) 00005 // 00006 // This software is provided 'as-is', without any express or implied warranty. 00007 // In no event will the authors be held liable for any damages 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 freely, 00011 // subject to the following restrictions: 00012 // 00013 // 1. The origin of this software must not be misrepresented; 00014 // you must not claim that you wrote the original software. 00015 // If you use this software in a product, an acknowledgment 00016 // in the product documentation would be appreciated but is not required. 00017 // 00018 // 2. Altered source versions must be plainly marked as such, 00019 // and must not be misrepresented as being the original software. 00020 // 00021 // 3. This notice may not be removed or altered from any source distribution. 00022 // 00024 00025 #ifndef SFML_RESOURCE_HPP 00026 #define SFML_RESOURCE_HPP 00027 00029 // Headers 00031 #include <set> 00032 00033 00034 namespace sf 00035 { 00037 // These two classes are defined in the same header because 00038 // they depend on each other. And as they're template classes, 00039 // they must be entirely defined in header files, which 00040 // prevents from proper separate compiling 00042 00043 template <typename> class ResourcePtr; 00044 00049 template <typename T> 00050 class Resource 00051 { 00052 protected : 00053 00058 Resource(); 00059 00066 Resource(const Resource<T>& Copy); 00067 00072 ~Resource(); 00073 00082 Resource<T>& operator =(const Resource<T>& Other); 00083 00084 private : 00085 00086 friend class ResourcePtr<T>; 00087 00094 void Connect(ResourcePtr<T>& Observer) const; 00095 00102 void Disconnect(ResourcePtr<T>& Observer) const; 00103 00105 // Member data 00107 mutable std::set<ResourcePtr<T>*> myObservers; 00108 }; 00109 00110 00115 template <typename T> 00116 class ResourcePtr 00117 { 00118 public : 00119 00124 ResourcePtr(); 00125 00132 ResourcePtr(const T* Resource); 00133 00140 ResourcePtr(const ResourcePtr<T>& Copy); 00141 00146 ~ResourcePtr(); 00147 00156 ResourcePtr<T>& operator =(const ResourcePtr<T>& Other); 00157 00166 ResourcePtr<T>& operator =(const T* Resource); 00167 00177 operator const T*() const; 00178 00185 const T& operator *() const; 00186 00193 const T* operator ->() const; 00194 00200 void OnResourceDestroyed(); 00201 00202 private : 00203 00205 // Member data 00207 const T* myResource; 00208 }; 00209 00210 #include <SFML/System/Resource.inl> 00211 #include <SFML/System/ResourcePtr.inl> 00212 00213 } // namespace sf 00214 00215 00216 #endif // SFML_RESOURCE_HPP
:: Copyright © 2007-2008 Laurent Gomila, all rights reserved :: Documentation generated by doxygen 1.5.2 ::