Sleeping Wombat Graphic API  1.010
swGraphicAPI
Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | Friends | List of all members
ResourceContainer< TYPE > Class Template Reference

Szablon klasy do przechowywania assetów. More...

#include <ResourceContainer.h>

Public Member Functions

 ~ResourceContainer ()
 Destruktor zwalnia wszystkie elementy w mapie (także pamięć po nich)
 
int Remove (const std::wstring &name)
 Usuwa element o podanej nazwie, jeżeli nie ma do niego odwołań. More...
 
int Remove (unsigned int id)
 Usuwa element o podanym indeksie, jeżeli nie ma do niego odwołań. More...
 
int RemoveUnused ()
 Kasuje wszystkie elementy w kontenerze, które nie są używane przez żaden obiekt. Kasowanie jest w pełni bezpieczne. More...
 
void UnsafeAdd (const std::wstring &name, TYPE *resource)
 Dodaje element do kontanera + nadaje mu unikalny identyfikator. More...
 
TYPE * get (unsigned int id)
 Zwraca element na podstawie identyfikatora. More...
 
unsigned int GetNextId ()
 Zwraca identyfikator, który zostanie przydzielony kolejnemu elementowi.
 
TYPE * get (const std::wstring &name)
 Zwraca element na podstawie jego nazwy. More...
 
template<typename DescType >
TYPE * Find (const DescType &desc)
 Finds resource matching given descriptor. More...
 
std::vector< ResourcePtr< TYPE > > List ()
 Listuje wszystkie assety danego typu.
 

Protected Member Functions

int ForceRemove (const std::wstring &name)
 Wymusza skasowanie podanego elementu, nawet jeżeli jest używany. More...
 
int ForceRemove (unsigned int id)
 Wymusza skasowanie podanego elementu. More...
 
void ForceRemoveAll ()
 Kasuje wszystkie elementy niezależnie od tego czy były używane, a następnie czyści mapę.
 
void ReleaseMemory (TYPE *)
 Zwalnia obiekt podany w parametrze. More...
 

Protected Attributes

std::map< std::wstring, TYPE * > container
 Kontener zawierający assety powiazane z ich nazwą
 

Private Attributes

unsigned int count
 Indentyfikator jaki zostanie przydzielony kolejnemy elementowi.
 

Friends

class AssetsManager
 
class ResourceManager
 

Detailed Description

template<class TYPE>
class ResourceContainer< TYPE >

Szablon klasy do przechowywania assetów.

Todo:

Dodać IDki obok ścieżek.

Kontrner powinien obsługiwać ścieżki, jako obiekty typu Path zamiast wstringów.

Wszystkie assety są identyfikowane po nazwie, która najczęściej jest nazwą pliku, z którego asset pochodzi. Mapa zapewnia logarytmiczny czas dostępu po nazwie. Istnieje też możliwość odwołania się po identyfikatorze, wtedy czas dostępu jest liniowy (chyba że iterowanie po kolejnych elementacj mapy nie odbywa się liniowo.

Member Function Documentation

template<class TYPE >
template<typename DescType >
TYPE * ResourceContainer< TYPE >::Find ( const DescType &  desc)
inline

Finds resource matching given descriptor.

Resource must implement GetDescriptor function. Descriptor must implement operator==.

Function finds resource in linear time. Use only for small containers.

template<class TYPE >
int ResourceContainer< TYPE >::ForceRemove ( const std::wstring &  name)
protected

Wymusza skasowanie podanego elementu, nawet jeżeli jest używany.

Parameters
[in]nameNazwa elementu do usunięcia.
Returns
Zwracana wartość:
  • 0 - w przypadku powodzenia,
  • -1 - nie znaleziono elementu
template<class TYPE >
int ResourceContainer< TYPE >::ForceRemove ( unsigned int  id)
protected

Wymusza skasowanie podanego elementu.

Parameters
[in]idIdentyfkator elementu do usunięcia
Returns
Zwracana wartość:
  • 0 - w przypadku powodzenia,
  • -1 - nie znaleziono elementu
template<class TYPE >
TYPE * ResourceContainer< TYPE >::get ( unsigned int  id)

Zwraca element na podstawie identyfikatora.

Wyszukiwanie po identyfikatorze jest liniowe, a po nazwie logarytmiczne. Jednakże porównania stringów mogą się okazać bardziej kosztowne.

Parameters
[in]idIdentyfikator elementu.
Returns
Wskaźnik na poszukiwany element.
template<class TYPE>
TYPE* ResourceContainer< TYPE >::get ( const std::wstring &  name)
inline

Zwraca element na podstawie jego nazwy.

Parameters
[in]nameNazwa elementu, który chcemy dostać
Returns
Wskaźnik na obiekt assetu
template<class TYPE>
void ResourceContainer< TYPE >::ReleaseMemory ( TYPE *  object)
protected

Zwalnia obiekt podany w parametrze.

Kasowanie pamięci nie jest możliwe przy pomocy operatora delete, ponieważ destruktory w tych klasach są prywatne. Dlatego trzeba zrobić to za pośrednictwem obiektu, który ma uprawnienia do tego.

Parameters
[in]objectObjekt do skasowania.
template<class TYPE >
int ResourceContainer< TYPE >::Remove ( const std::wstring &  name)

Usuwa element o podanej nazwie, jeżeli nie ma do niego odwołań.

Parameters
[in]namenazwa elementu do usunięcia.
Returns
Zwracana wartość:
  • 0 - w przypadku powodzenia,
  • -1 - nie znaleziono elementu,
  • 1 - nie da się usunąć, bo jest w użyciu
template<class TYPE >
int ResourceContainer< TYPE >::Remove ( unsigned int  id)

Usuwa element o podanym indeksie, jeżeli nie ma do niego odwołań.

Parameters
[in]idIdentyfikator elementu
Returns
Zwracana wartość:
  • 0 - w przypadku powodzenia,
  • -1 - nie znaleziono elementu,
  • 1 - nie da się usunąć, bo jest w użyciu
template<class TYPE >
int ResourceContainer< TYPE >::RemoveUnused ( )

Kasuje wszystkie elementy w kontenerze, które nie są używane przez żaden obiekt. Kasowanie jest w pełni bezpieczne.

Returns
Zwraca liczbę usuniętych elementów.
template<class TYPE>
void ResourceContainer< TYPE >::UnsafeAdd ( const std::wstring &  name,
TYPE *  resource 
)

Dodaje element do kontanera + nadaje mu unikalny identyfikator.

Jeżeli element już istniał, to zostanie nadpisany nowym, dlatego należy zawsze przed użyciem sprawdzić czy pod taką nazwą, coś już się nie znajduje.

Parameters
[in]nameNazwa elementu, pod jaką zostanie dodany.
[in]resourceElement dodania.

The documentation for this class was generated from the following file: