00001 #ifndef _CEGUI_HASHMAP_TEMPLATES_H_
00002 #define _CEGUI_HASHMAP_TEMPLATES_H_
00003 #include <hash_map>
00004
00005 #if defined(_MSC_VER)
00006 # pragma warning(push)
00007 # pragma warning(disable : 4786)
00008 #endif
00009
00010 using namespace std;
00011 using namespace stdext;
00012
00013 namespace CEGUI
00014 {
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00033 template<typename Z, class T>
00034 T getEntryFromHashMap (Z id, hash_map<Z, T>* hashMap)
00035 {
00036
00037 if (hashMap)
00038 {
00039 hash_map<Z, T>::iterator hashMapIterator;
00040 hashMapIterator = hashMap->find (id);
00041 if (hashMapIterator != hashMap->end())
00042 {
00043
00044 return hashMapIterator->second;
00045 }
00046 }
00047
00048 return NULL;
00049 };
00050
00051
00052
00053
00054
00055
00056
00057
00058 template<typename Z, class T>
00059 void addEntryToHashMap (Z id, T object, hash_map<Z, T>* hashMap)
00060 {
00061 if (hashMap)
00062 {
00063 T existingObject = getEntryFromHashMap (id, hashMap);
00064 if (existingObject == NULL)
00065 {
00066
00067 hashMap->insert (make_pair(id, object));
00068 }
00069 else
00070 {
00071 if (object != existingObject)
00072 {
00073
00074 hashMap->erase (id);
00075 delete existingObject;
00076 hashMap->insert (make_pair(id, object));
00077 }
00078 }
00079 }
00080 };
00081
00082
00083
00084
00085
00086
00087
00088
00089 template<typename Z, class T>
00090 void eraseEntryFromHashMap (Z id, hash_map<Z, T>* hashMap)
00091 {
00092
00093 if (hashMap)
00094 {
00095 hash_map<Z, T>::iterator hashMapIterator;
00096 hashMapIterator = hashMap->find (id);
00097 if (hashMapIterator != hashMap->end())
00098 {
00099
00100 hashMap->erase (hashMapIterator);
00101 }
00102 }
00103 };
00104
00105
00106
00107
00108
00109
00110
00111 template<typename Z, class T>
00112 void deleteEntryFromHashMap (Z id, hash_map<Z, T>* hashMap)
00113 {
00114
00115 if (hashMap)
00116 {
00117 hash_map<Z, T>::iterator hashMapIterator;
00118 hashMapIterator = hashMap->find (id);
00119 if (hashMapIterator != hashMap->end())
00120 {
00121
00122 hashMap->erase (hashMapIterator);
00123 delete hashMapIterator->second;
00124 }
00125 }
00126 };
00127
00128
00129
00130
00131
00132
00133
00134 template<typename Z, class T>
00135 void deleteAllEntriesFromHashMap (hash_map<Z, T>* hashMap)
00136 {
00137
00138 if (hashMap)
00139 {
00140 hash_map<Z, T>::iterator hashMapIterator;
00141 for (hashMapIterator = hashMap->begin(); hashMapIterator != hashMap->end(); hashMapIterator++)
00142 {
00143 if (hashMapIterator->second)
00144 delete hashMapIterator->second;
00145 }
00146 hashMap->clear();
00147 }
00148 };
00149 };
00150 #endif