00001
00002
00003
00004
00005
00006
00007
00008
00051 #ifdef _MSC_VER
00052 #pragma once
00053 #endif
00054
00055 #ifndef OGDF_HASH_ARRAY_H
00056 #define OGDF_HASH_ARRAY_H
00057
00058
00059 #include <ogdf/basic/Hashing.h>
00060
00061
00062 namespace ogdf {
00063
00064
00118 template<class I, class E, class H = DefHashFunc<I> >
00119 class HashArray : private Hashing<I,E,H>
00120 {
00121 E m_defaultValue;
00122
00123 public:
00125 typedef HashConstIterator<I,E,H> const_terator;
00126
00128 HashArray() : Hashing<I,E,H>() { }
00129
00131 HashArray(const E &defaultValue, const H &hashFunc = H())
00132 : Hashing<I,E,H>(256, hashFunc), m_defaultValue(defaultValue) { }
00133
00135 HashArray(const HashArray<I,E,H> &A) : Hashing<I,E,H>(A), m_defaultValue(A.m_defaultValue) { }
00136
00138 HashConstIterator<I,E,H> begin() const { return Hashing<I,E,H>::begin(); }
00139
00141 int size() const { return Hashing<I,E,H>::size(); }
00142
00144 int empty() const { return Hashing<I,E,H>::empty(); }
00145
00146
00148 const E &operator[](const I &i) const {
00149 HashElement<I,E> *pElement = Hashing<I,E,H>::lookup(i);
00150 if (pElement) return pElement->info();
00151 else return m_defaultValue;
00152 }
00153
00155 E &operator[](const I &i) {
00156 HashElement<I,E> *pElement = Hashing<I,E,H>::lookup(i);
00157 if (!pElement) pElement = Hashing<I,E,H>::fastInsert(i,m_defaultValue);
00158 return pElement->info();
00159 }
00160
00162 bool isDefined(const I &i) const {
00163 return Hashing<I,E,H>::member(i);
00164 }
00165
00167 void undefine(const I &i) {
00168 Hashing<I,E,H>::del(i);
00169 }
00170
00172 HashArray<I,E,H> &operator=(const HashArray<I,E,H> &A) {
00173 m_defaultValue = A.m_defaultValue;
00174 Hashing<I,E,H>::operator =(A);
00175 return *this;
00176 }
00177
00179 void clear() { Hashing<I,E,H>::clear(); }
00180 };
00181
00182
00183 }
00184
00185 #endif