00001
00002
00003
00004
00005
00006
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 }
00176
00177 #endif