Open
Graph Drawing
Framework

 v.2010.10
 

HashArray.h

Go to the documentation of this file.
00001 /*
00002  * $Revision: 2027 $
00003  * 
00004  * last checkin:
00005  *   $Author: gutwenger $ 
00006  *   $Date: 2010-09-01 11:55:17 +0200 (Wed, 01 Sep 2010) $ 
00007  ***************************************************************/
00008  
00053 #ifdef _MSC_VER
00054 #pragma once
00055 #endif
00056 
00057 #ifndef OGDF_HASH_ARRAY_H
00058 #define OGDF_HASH_ARRAY_H
00059 
00060 
00061 #include <ogdf/basic/Hashing.h>
00062 
00063 
00064 namespace ogdf {
00065 
00066 
00120 template<class I, class E, class H = DefHashFunc<I> >
00121 class HashArray : private Hashing<I,E,H>
00122 {
00123     E m_defaultValue; 
00124 
00125 public:
00127     typedef HashConstIterator<I,E,H> const_iterator;
00128 
00130     HashArray() : Hashing<I,E,H>() { }
00131 
00133     HashArray(const E &defaultValue, const H &hashFunc = H())
00134         : Hashing<I,E,H>(256, hashFunc), m_defaultValue(defaultValue) { }
00135 
00137     HashArray(const HashArray<I,E,H> &A) : Hashing<I,E,H>(A), m_defaultValue(A.m_defaultValue) { }
00138 
00140     HashConstIterator<I,E,H> begin() const { return Hashing<I,E,H>::begin(); }
00141 
00143     int size() const { return Hashing<I,E,H>::size(); }
00144     
00146     int empty() const { return Hashing<I,E,H>::empty(); }
00147 
00148 
00150     const E &operator[](const I &i) const {
00151         HashElement<I,E> *pElement = Hashing<I,E,H>::lookup(i);
00152         if (pElement) return pElement->info();
00153         else return m_defaultValue;
00154     }
00155 
00157     E &operator[](const I &i) {
00158         HashElement<I,E> *pElement = Hashing<I,E,H>::lookup(i);
00159         if (!pElement) pElement = Hashing<I,E,H>::fastInsert(i,m_defaultValue);
00160         return pElement->info();
00161     }
00162 
00164     bool isDefined(const I &i) const {
00165         return Hashing<I,E,H>::member(i);
00166     }
00167 
00169     void undefine(const I &i) {
00170         Hashing<I,E,H>::del(i);
00171     }
00172 
00174     HashArray<I,E,H> &operator=(const HashArray<I,E,H> &A) {
00175         m_defaultValue = A.m_defaultValue;
00176         Hashing<I,E,H>::operator =(A);
00177         return *this;
00178     }
00179 
00181     void clear() { Hashing<I,E,H>::clear(); }
00182 };
00183 
00184 
00185 } // end namespace ogdf
00186 
00187 #endif