29BEGIN_MOOTOOLS_NAMESPACE
 
   32    #if defined(__WINDOWS__) && (_MSC_VER <= 1500) 
   35        #pragma warning(disable : 4181) 
   40    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions = CHashMethods<KEY> > 
 
   45            Active, Empty, Deleted 
 
   53    #ifdef MOOTOOLS_PRIVATE_DEBUG 
   55                MOOTOOLS_PRIVATE_TRACE(
traceStruct, 1, 
"HashMap ratio %f\n", ActiveSize/(
float)ArraySize);
 
   57            xDeleteArray(Array, ArraySize);
 
   72        unsigned int GetCount() 
const; 
 
   73        HashPos GetFirst() 
const;
 
   76        KEY& GetNext(HashPos& pos , 
VALUE& value) 
const;
 
   78        KEY *GetNext(HashPos& pos , 
VALUE *&value) 
const;
 
   80        unsigned int GetHashTableSize() 
const;
 
   86    #ifdef MOOTOOLS_PRIVATE_DEBUG 
   97    #ifdef MOOTOOLS_PRIVATE_DEBUG 
  104        HashPos FindActiveElement(HashPos pos) 
const;
 
  115            inline HashEntry() : Info(Empty) {}
 
  118        unsigned int DefaultSize;
 
  119        unsigned int ArraySize; 
 
  120        unsigned int CurrentSize; 
 
  121        unsigned int ActiveSize; 
 
  125        void AllocateArray();
 
  127        unsigned int FindPos(
const ARG_KEY K) 
const;
 
 
  131    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions> 
bool IsSameHashMap(
const CHashMap<KEY, ARG_KEY, VALUE, HashFunctions> & 
Rhs1, 
const CHashMap<KEY, ARG_KEY, VALUE, HashFunctions> & 
Rhs2);
 
  133    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  140    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  143        Array = xNewArray(HashEntry, ArraySize);
 
  148    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  151    #ifdef MOOTOOLS_PRIVATE_DEBUG 
  158        ActiveSize = CurrentSize = 0;
 
  167    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  170#ifdef MOOTOOLS_PRIVATE_DEBUG 
  178        DefaultSize = 
Rhs.DefaultSize;
 
  181        ActiveSize = CurrentSize = 0;
 
  187    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  208        XASSERT(ActiveSize == 0 && CurrentSize == 0);
 
  209        xDeleteArray(Array, ArraySize);
 
  214        ActiveSize = CurrentSize = 0;
 
  219    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  222    #ifdef MOOTOOLS_PRIVATE_DEBUG 
  224            MOOTOOLS_PRIVATE_TRACE(
traceStruct, 1, 
"HashMap ratio %f\n", ActiveSize/(
float)ArraySize);
 
  227        xDeleteArray(Array, ArraySize);
 
  229        ArraySize = DefaultSize = DefaultHashSize;
 
  230        ActiveSize = CurrentSize = 0;
 
  235    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  238    #ifdef MOOTOOLS_PRIVATE_DEBUG 
  240            MOOTOOLS_PRIVATE_TRACE(
traceStruct, 1, 
"HashMap ratio %f\n", ActiveSize/(
float)ArraySize);
 
  243        ActiveSize = CurrentSize = 0;
 
  244        for (
unsigned int i = 0; 
i < ArraySize; 
i++)
 
  245            Array[
i].Info = Empty;
 
  249    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  263    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  277    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  288    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  294    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  297        HashPos pos = hash.GetFirst();
 
  299        while (pos != HashEnd)
 
  301            KEY *key = hash.GetNext(pos, value);
 
  306    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  309        HashPos pos = hash.GetFirst();
 
  311        while (pos != HashEnd)
 
  313            KEY *key = hash.GetNext(pos, value);
 
  314            Insert(*key, *value);
 
  322    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  326        unsigned int CurrentPos = HashFunctions::HashValue(X) % ArraySize;
 
  333                if (HashFunctions::HashCompare(Array[
CurrentPos].Key, X))
 
  355    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  365    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  373        XASSERT(ActiveSize >= 0);
 
  384    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  389        return Insert(X, 
tmp);
 
  393    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  406            newSize = 2*(ActiveSize+1) < MinimalHashSize ? MinimalHashSize : 2*(ActiveSize+1); 
 
  410                MOOTOOLS_PRIVATE_ASSERT(CurrentSize < ArraySize/2);
 
  416            if (CurrentSize < ArraySize/2) 
 
  419            float ratio = (ActiveSize / (
float)CurrentSize);
 
  432                newSize = ArraySize < 251 ? 4*ArraySize : 2*ArraySize; 
 
  444        ActiveSize = CurrentSize = 0;
 
  447    #ifdef MOOTOOLS_PRIVATE_DEBUG 
  460    #ifdef MOOTOOLS_PRIVATE_DEBUG 
  473    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  497        if (CurrentSize < ArraySize/2)  
 
  500#ifdef MOOTOOLS_PRIVATE_DEBUG 
  509    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  515            if (ArraySize != 
Rhs.ArraySize)
 
  517                xDeleteArray(Array, ArraySize);
 
  518                ArraySize = 
Rhs.ArraySize;
 
  522            for (
unsigned int i = 0; 
i < ArraySize; 
i++)
 
  524                Array[
i].Info = 
Rhs.Array[
i].Info;
 
  525                if (Array[
i].Info == Active)
 
  527                    Array[
i].Key = 
Rhs.Array[
i].Key;
 
  528                    Array[
i].Value = 
Rhs.Array[
i].Value;
 
  532            DefaultSize = 
Rhs.DefaultSize;
 
  533            CurrentSize = 
Rhs.CurrentSize;
 
  534            ActiveSize = 
Rhs.ActiveSize;
 
  540    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  543        return (ActiveSize == 0);
 
  547    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  553    #ifdef MOOTOOLS_PRIVATE_DEBUG 
  554    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  557        if (CurrentSize == 0)
 
  560        unsigned int size1 = 0;
 
  561        unsigned int size2 = 0;
 
  564        for (
unsigned int i = 0; 
i < ArraySize; 
i++)
 
  566            if (Array[
i].Info == Active)
 
  568            if (Array[
i].Info != Empty)
 
  572        XASSERT(ActiveSize == 
size1);
 
  573        XASSERT(CurrentSize == 
size2);
 
  580    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  583        for (
unsigned int i = pos; 
i < ArraySize; 
i++)
 
  585            if (Array[
i].Info == Active)
 
  592    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  599        return FindActiveElement(0);
 
  602    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  605        XASSERT(pos < ArraySize);
 
  606        XASSERT(Array[pos].Info == Active);
 
  610        key = Array[pos].Key;
 
  611        value = Array[pos].Value;
 
  612        pos = FindActiveElement(pos + 1);
 
  615    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  618        XASSERT(pos < ArraySize);
 
  619        XASSERT(Array[pos].Info == Active);
 
  623        key = Array[pos].Key;
 
  624        value = &Array[pos].Value;
 
  625        pos = FindActiveElement(pos + 1);
 
  628    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  631        XASSERT(pos < ArraySize);
 
  632        XASSERT(Array[pos].Info == Active);
 
  636        key = &Array[pos].Key;
 
  637        value = &Array[pos].Value;
 
  638        pos = FindActiveElement(pos + 1);
 
  641    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  644        XASSERT(pos < ArraySize);
 
  645        XASSERT(Array[pos].Info == Active);
 
  650        pos = FindActiveElement(pos + 1);
 
  656    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  659        XASSERT(pos < ArraySize);
 
  660        XASSERT(Array[pos].Info == Active);
 
  665        pos = FindActiveElement(pos + 1);
 
  675    #if defined(__WINDOWS__) && (_MSC_VER <= 1500) 
  679    template<
class KEY, 
class ARG_KEY, 
class VALUE, 
typename HashFunctions>
 
  682        if (
Rhs1.GetCount() != 
Rhs2.GetCount())
 
  687        HashPos pos = 
Rhs1.GetFirst();
 
  688        while (pos != HashEnd)
 
  701END_MOOTOOLS_NAMESPACE
 
The class defines an x, y, z 3D point which can use int, float or double.
Definition 3DPoint.h:27
 
CHashMap is a template class that associates key to a single value through an hash table.
Definition HashMap.h:42