SFML - Simple and Fast Multimedia Library
Main Page
Namespaces
Classes
Files
File List
Resource.hpp00001
00002 //
00003 // SFML - Simple and Fast Multimedia Library
00004 // Copyright (C) 2007 Laurent Gomila (laurent.gom@gmail.com)
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 ::
Wyszukiwarka
Podobne podstrony:
Resource 8inl sourceArial 8hpp sourceSleep 8hpp sourceResourcePtr 8inl sourceWin32 2Thread 8hpp sourceMutex 8hpp sourceFontLoader 8hpp sourceColor 8hpp sourceIPAddress 8hpp sourceSoundFileDefault 8hpp sourceNetwork 8hpp sourceSoundStream 8hpp sourceSelector 8hpp sourceVideoModeSupport 8hpp sourceMatrix3 8hpp sourceRandomizer 8hpp sourceContext 8hpp sourceUnicode 8hpp sourceImageLoader 8hpp sourcewięcej podobnych podstron