Documentation of SFML 1.6

Warning: this page refers to an old version of SFML. Click here to switch to the latest version.
Resource.hpp
1 
2 //
3 // SFML - Simple and Fast Multimedia Library
4 // Copyright (C) 2007 Laurent Gomila (laurent.gom@gmail.com)
5 //
6 // This software is provided 'as-is', without any express or implied warranty.
7 // In no event will the authors be held liable for any damages arising from the use of this software.
8 //
9 // Permission is granted to anyone to use this software for any purpose,
10 // including commercial applications, and to alter it and redistribute it freely,
11 // subject to the following restrictions:
12 //
13 // 1. The origin of this software must not be misrepresented;
14 // you must not claim that you wrote the original software.
15 // If you use this software in a product, an acknowledgment
16 // in the product documentation would be appreciated but is not required.
17 //
18 // 2. Altered source versions must be plainly marked as such,
19 // and must not be misrepresented as being the original software.
20 //
21 // 3. This notice may not be removed or altered from any source distribution.
22 //
24 
25 #ifndef SFML_RESOURCE_HPP
26 #define SFML_RESOURCE_HPP
27 
29 // Headers
31 #include <set>
32 
33 
34 namespace sf
35 {
37 // These two classes are defined in the same header because
38 // they depend on each other. And as they're template classes,
39 // they must be entirely defined in header files, which
40 // prevents from proper separate compiling
42 
43 template <typename> class ResourcePtr;
44 
49 template <typename T>
50 class Resource
51 {
52 protected :
53 
58  Resource();
59 
66  Resource(const Resource<T>& Copy);
67 
72  ~Resource();
73 
82  Resource<T>& operator =(const Resource<T>& Other);
83 
84 private :
85 
86  friend class ResourcePtr<T>;
87 
94  void Connect(ResourcePtr<T>& Observer) const;
95 
102  void Disconnect(ResourcePtr<T>& Observer) const;
103 
105  // Member data
107  mutable std::set<ResourcePtr<T>*> myObservers;
108 };
109 
110 
115 template <typename T>
117 {
118 public :
119 
124  ResourcePtr();
125 
132  ResourcePtr(const T* Resource);
133 
140  ResourcePtr(const ResourcePtr<T>& Copy);
141 
146  ~ResourcePtr();
147 
157 
166  ResourcePtr<T>& operator =(const T* Resource);
167 
177  operator const T*() const;
178 
185  const T& operator *() const;
186 
193  const T* operator ->() const;
194 
200  void OnResourceDestroyed();
201 
202 private :
203 
205  // Member data
207  const T* myResource;
208 };
209 
210 #include <SFML/System/Resource.inl>
211 #include <SFML/System/ResourcePtr.inl>
212 
213 } // namespace sf
214 
215 
216 #endif // SFML_RESOURCE_HPP