- Page principale
- Espaces de nommage
- Classes
- Fichiers

- Liste des fichiers
- Membres de fichier

# src/DataManager/DataManager.hpp

Aller à la documentation de ce fichier.

    00001 #ifndef DATA_MANAGER_HPP
    00002 #define DATA_MANAGER_HPP
    00003
    00004 // Détection du système cible...
    00005 #include "usgeDetectSystem.h"
    00006
    00007 // C++
    00008 #include <string>
    00009 #include <map>
    00010
    00011
    00017 namespace USpeedGameEngine
    00018 {
    00019
    00025 template <class DataType> class DataManager
    00026 {
    00027     // Liste des variables
    00028     public:
    00029     protected:
    00030     private:
    00031         std::map<std::string, void*> dataMap;
    00032
    00033     // Liste des fonctions
    00034     public:
    00039         DataManager() { this->clear(); }
    00040
    00045         ~DataManager() { this->clear(); }
    00046
    00053         void clear()
    00054         {
    00055             // Vider la liste
    00056             this->clear(false);
    00057         }
    00058
    00064         void clear(bool delData)
    00065         {
    00066             if (delData == true)
    00067             {
    00068                 // Parcours de la liste des données pour les supprimer
    00069                 std::map<std::string, void*>::iterator elt;
    00070                 for (elt = this->dataMap.begin(); elt != this->dataMap.end(); elt++)
    00071                 {
    00072                     delete (DataType*)elt->second;
    00073                 }
    00074             }
    00075             // Vider la liste
    00076             this->dataMap.clear();
    00077         }
    00078
    00086         void erase(std::string const &key)
    00087         {
    00088             this->erase(key, false);
    00089         }
    00090
    00097         void erase(std::string const &key, bool delData)
    00098         {
    00099             // Une clé valide ?
    00100             if (key.size() > 0)
    00101             {
    00102                 // Recherche de l'élément
    00103                 std::map<std::string, void*>::iterator elt = this->dataMap.find(key);
    00104                 if (elt != this->dataMap.end())
    00105                 {
    00106                     // Suppression effective
    00107                     if (delData == true)
    00108                     {
    00109                         delete (DataType*)elt->second;
    00110                     }
    00111                     // Retrait de la liste
    00112                     this->dataMap.erase(elt);
    00113                 }
    00114             }
    00115         }
    00116
    00124         bool add(std::string const &key, DataType *data)
    00125         {
    00126             bool result = false;
    00127             // La clé et la texture doit être valide !
    00128             if ((key.size() > 0) && (data != 0))
    00129             {
    00130                 // Si la clé n'est pas déjà utilisée...
    00131                 if (this->find(key) == 0)
    00132                 {
    00133                     // ...on peut ajouter la texture fournie !
    00134                     this->dataMap.insert(std::make_pair(key, data));
    00135                 }
    00136             }
    00137             return result;
    00138         }
    00139
    00146         DataType *find(std::string const &key)
    00147         {
    00148             DataType *data = 0;
    00149             // Une clé valide ?
    00150             if (key.size() > 0)
    00151             {
    00152                 // Recherche de l'élément
    00153                 std::map<std::string, void*>::iterator elt = this->dataMap.find(key);
    00154                 if (elt != this->dataMap.end())
    00155                 {
    00156                     // Élément trouvé
    00157                     data = (DataType *)elt->second;
    00158                 }
    00159             }
    00160             return data;
    00161         }
    00162
    00163     protected:
    00164     private:
    00165 };
    00166
    00167 }
    00168
    00169 #endif