17 #include <type_traits>
29 template <
class TYPE >
50 int Remove (
const std::wstring& name );
51 int Remove (
unsigned int id );
55 void UnsafeAdd (
const std::wstring& name, TYPE* resource );
58 TYPE*
get (
unsigned int id );
64 inline TYPE*
get(
const std::wstring& name )
66 auto iter = container.find( name );
67 if ( iter != container.end() )
78 template<
typename DescType >
79 TYPE*
Find (
const DescType& desc );
82 std::vector< ResourcePtr< TYPE > >
List();
95 for (
auto iter = container.begin( ); iter != container.end( ); iter++ )
97 ReleaseMemory( iter->second );
108 template <
class TYPE>
111 for (
auto iter = container.begin(); iter != container.end(); iter++ )
113 if ( iter->second->GetID() == id )
121 template<
class TYPE >
122 template<
typename DescType >
125 static_assert( std::is_member_function_pointer< decltype( &TYPE::GetDescriptor ) >::value,
"TYPE must implement GetDescriptor function." );
127 for(
auto& resource : container )
129 if( resource.second->GetDescriptor() == desc )
130 return resource.second;
154 template <
class TYPE>
160 container[name] = resource;
162 resource->SetID( count );
177 template <
class TYPE>
193 template <
class TYPE>
196 auto iter = container.find( name );
197 if ( iter != container.end() )
200 if ( !iter->second->CanDelete() )
203 ReleaseMemory( iter->second );
204 container.erase( iter );
217 template <
class TYPE>
220 for (
auto iter = container.begin( ); iter != container.end( ); iter++ )
222 if ( iter->second->GetID() == id )
225 if ( !iter->second->CanDelete() )
228 ReleaseMemory( iter->second );
229 container.erase( iter );
241 template <
class TYPE>
245 for (
auto iter = container.begin(); iter != container.end(); iter++ )
247 if ( iter->second->CanDelete() )
250 ReleaseMemory( iter->second );
251 container.erase( iter );
267 template <
class TYPE>
270 auto iter = container.find( name );
271 if ( iter != container.end( ) )
284 template <
class TYPE>
287 for (
auto iter = container.begin( ); iter != container.end( ); iter++ )
289 if ( iter->second->GetID( ) == id )
300 template <
class TYPE>
303 for (
auto iter = container.begin(); iter != container.end(); iter++ )
311 template<
class TYPE >
314 std::vector< ResourcePtr< TYPE > > resourcesList;
315 resourcesList.reserve( container.size() );
317 for(
auto iter = container.begin(); iter != container.end(); iter++ )
322 return resourcesList;
std::map< std::wstring, TYPE * > container
Kontener zawierający assety powiazane z ich nazwą
Definition: ResourceContainer.h:38
unsigned int count
Indentyfikator jaki zostanie przydzielony kolejnemy elementowi.
Definition: ResourceContainer.h:35
void ForceRemoveAll()
Kasuje wszystkie elementy niezależnie od tego czy były używane, a następnie czyści mapę...
Definition: ResourceContainer.h:301
Szablon klasy do przechowywania assetów.
Definition: ResourceContainer.h:30
Wrapper for low level resources and high level assets.
Definition: ResourcePtr.h:18
Klasa służy do kasowania obiektów, których destruktor jest prywatny.Taka sytuacja zachodzi w momencie...
Definition: ObjectDeleter.h:59
You can specify classes that can delete objects with private constructors.
Definition: ObjectDeleter.h:35
TYPE * get(unsigned int id)
Zwraca element na podstawie identyfikatora.
Definition: ResourceContainer.h:109
int RemoveUnused()
Kasuje wszystkie elementy w kontenerze, które nie są używane przez żaden obiekt. Kasowanie jest w peł...
Definition: ResourceContainer.h:242
void ReleaseMemory(TYPE *)
Zwalnia obiekt podany w parametrze.
Definition: ResourceContainer.h:178
int ForceRemove(const std::wstring &name)
Wymusza skasowanie podanego elementu, nawet jeżeli jest używany.
Definition: ResourceContainer.h:268
~ResourceContainer()
Destruktor zwalnia wszystkie elementy w mapie (także pamięć po nich)
Definition: ResourceContainer.h:93
int Remove(const std::wstring &name)
Usuwa element o podanej nazwie, jeżeli nie ma do niego odwołań.
Definition: ResourceContainer.h:194
TYPE * Find(const DescType &desc)
Finds resource matching given descriptor.
Definition: ResourceContainer.h:123
void UnsafeAdd(const std::wstring &name, TYPE *resource)
Dodaje element do kontanera + nadaje mu unikalny identyfikator.
Definition: ResourceContainer.h:155
friend class AssetsManager
Definition: ResourceContainer.h:32
void delete_object(class_type *object)
Jedyny dostępny do wywołania konstruktor, tylko dla wybrańców.
Definition: ObjectDeleter.h:70
std::vector< ResourcePtr< TYPE > > List()
Listuje wszystkie assety danego typu.
Definition: ResourceContainer.h:312
unsigned int GetNextId()
Zwraca identyfikator, który zostanie przydzielony kolejnemu elementowi.
Definition: ResourceContainer.h:59
ResourceContainer()
Definition: ResourceContainer.h:86
Manager for low level resources.
Definition: ResourceManager.h:24