Open
Graph Drawing
Framework

 v.2012.05
 

HashArray.h
Go to the documentation of this file.
00001 /*
00002  * $Revision: 2299 $
00003  * 
00004  * last checkin:
00005  *   $Author: gutwenger $ 
00006  *   $Date: 2012-05-07 15:57:08 +0200 (Mon, 07 May 2012) $ 
00007  ***************************************************************/
00008  
00043 #ifdef _MSC_VER
00044 #pragma once
00045 #endif
00046 
00047 #ifndef OGDF_HASH_ARRAY_H
00048 #define OGDF_HASH_ARRAY_H
00049 
00050 
00051 #include <ogdf/basic/Hashing.h>
00052 
00053 
00054 namespace ogdf {
00055 
00056 
00110 template<class I, class E, class H = DefHashFunc<I> >
00111 class HashArray : private Hashing<I,E,H>
00112 {
00113     E m_defaultValue; 
00114 
00115 public:
00117     typedef HashConstIterator<I,E,H> const_iterator;
00118 
00120     HashArray() : Hashing<I,E,H>() { }
00121 
00123     HashArray(const E &defaultValue, const H &hashFunc = H())
00124         : Hashing<I,E,H>(256, hashFunc), m_defaultValue(defaultValue) { }
00125 
00127     HashArray(const HashArray<I,E,H> &A) : Hashing<I,E,H>(A), m_defaultValue(A.m_defaultValue) { }
00128 
00130     HashConstIterator<I,E,H> begin() const { return Hashing<I,E,H>::begin(); }
00131 
00133     int size() const { return Hashing<I,E,H>::size(); }
00134     
00136     int empty() const { return Hashing<I,E,H>::empty(); }
00137 
00138 
00140     const E &operator[](const I &i) const {
00141         HashElement<I,E> *pElement = Hashing<I,E,H>::lookup(i);
00142         if (pElement) return pElement->info();
00143         else return m_defaultValue;
00144     }
00145 
00147     E &operator[](const I &i) {
00148         HashElement<I,E> *pElement = Hashing<I,E,H>::lookup(i);
00149         if (!pElement) pElement = Hashing<I,E,H>::fastInsert(i,m_defaultValue);
00150         return pElement->info();
00151     }
00152 
00154     bool isDefined(const I &i) const {
00155         return Hashing<I,E,H>::member(i);
00156     }
00157 
00159     void undefine(const I &i) {
00160         Hashing<I,E,H>::del(i);
00161     }
00162 
00164     HashArray<I,E,H> &operator=(const HashArray<I,E,H> &A) {
00165         m_defaultValue = A.m_defaultValue;
00166         Hashing<I,E,H>::operator =(A);
00167         return *this;
00168     }
00169 
00171     void clear() { Hashing<I,E,H>::clear(); }
00172 };
00173 
00174 
00175 } // end namespace ogdf
00176 
00177 #endif