File dialog code CEGUIHashMapTemplates.h         A Common File Dialog window for CEGUI - hashmap templates

CEGUIHashMapTemplates.h

#ifndef _CEGUI_HASHMAP_TEMPLATES_H_
#define _CEGUI_HASHMAP_TEMPLATES_H_
#include <hash_map>

#if defined(_MSC_VER)
#    pragma warning(push)
#    pragma warning(disable : 4786)
#endif

using namespace std;

namespace CEGUI
{
    /*********************************************************************************************
    Method      : getEntryFromHashMap
    Description : The following template methods provide generic methods, such as adding,
                  searching and deleting entries to/from a HashMap. The HashMap is a hash_map
                  with attributes of type Z as an identifying key and attributes of class T as
                  the object to be stored.
                  This template method is used to search an object in the HashMap, using the id
                  as search key.
    Parameters  : NA
    Returnvalue : NA
    **********************************************************************************************/
    template<typename Z, class T>
    T getEntryFromHashMap (Z id, hash_map<Z, T>* hashMap)
    {
        // Search the entry in the hashMap
        if (hashMap)
        {
            hash_map<Z, T>::iterator hashMapIterator;
            hashMapIterator = hashMap->find (id);
            if (hashMapIterator != hashMap->end())
            {
                // Found it
                return hashMapIterator->second;
            }
        }

        return NULL;
    };

    /*********************************************************************************************
    Method      : addEntryToHashMap
    Description : This template method is used to add an entry to the hashMap. If an entry
                  with the same key is already present, the stored object is deleted!
    Parameters  : NA
    Returnvalue : NA
    **********************************************************************************************/
    template<typename Z, class T>
    void addEntryToHashMap (Z id, T object, hash_map<Z, T>* hashMap)
    {
        if (hashMap)
        {
            T existingObject = getEntryFromHashMap (id, hashMap);
            if (existingObject == NULL)
            {
                // Not found; insert it
                hashMap->insert (make_pair(id, object));
            }
            else
            {
                if (object != existingObject)
                {
                    // The key exists, but the object differs
                    hashMap->erase (id); // Remove the entry from the hash_map
                    delete existingObject; // Delete the object
                    hashMap->insert (make_pair(id, object));
                }
            }
        }
    };

    /*********************************************************************************************
    Method      : eraseEntryFromHashMap
    Description : This template method is used to remove one entry from the hashMap. The entry itself
                  will not be deleted!
    Parameters  : NA
    Returnvalue : NA
    **********************************************************************************************/
    template<typename Z, class T>
    void eraseEntryFromHashMap (Z id, hash_map<Z, T>* hashMap)
    {
        // Remove one entry; it wil not be deleted
        if (hashMap)
        {
            hash_map<Z, T>::iterator hashMapIterator;
            hashMapIterator = hashMap->find (id);
            if (hashMapIterator != hashMap->end())
            {
                // Found it
                hashMap->erase (hashMapIterator);
            }
        }
    };

    /*********************************************************************************************
    Method      : deleteEntryFromHashMap
    Description : This template method is used to remove one entry from the hashMap and delete it.
    Parameters  : NA
    Returnvalue : NA
    **********************************************************************************************/
    template<typename Z, class T>
    void deleteEntryFromHashMap (Z id, hash_map<Z, T>* hashMap)
    {
        // Remove one entry; it wil not be deleted
        if (hashMap)
        {
            hash_map<Z, T>::iterator hashMapIterator;
            hashMapIterator = hashMap->find (id);
            if (hashMapIterator != hashMap->end())
            {
                // Found it
                hashMap->erase (hashMapIterator);
                delete hashMapIterator->second;
            }
        }
    };

    /*********************************************************************************************
    Method      : deleteAllEntriesFromHashMap
    Description : This template method is used to delete all entries from the hashMap.
    Parameters  : NA
    Returnvalue : NA
    **********************************************************************************************/
    template<typename Z, class T>
    void deleteAllEntriesFromHashMap (hash_map<Z, T>* hashMap)
    {
        // Delete all hashMap entries
        if (hashMap)
        {
            hash_map<Z, T>::iterator hashMapIterator;
            for (hashMapIterator = hashMap->begin(); hashMapIterator != hashMap->end(); hashMapIterator++)
            {
                if (hashMapIterator->second)
                    delete hashMapIterator->second;
            }
            hashMap->clear();
        }
    };
};
#endif