38 template<
class _TKey,
class _TValue>
49 TKey
const&
Key()
const {
return key; }
50 TValue
const&
Value()
const {
return value; }
51 TValue&
Value() {
return value; }
64 return (((XnSizeT)key) & 0xff);
69 return XnInt32(XnSizeT(key1)-XnSizeT(key2));
86 NUM_BINS = LAST_BIN + 1,
95 ConstIterator(TPairList*
const* apBins, XnUInt32 nCurrBin,
typename TPairList::ConstIterator currIt)
96 : m_ppBins(apBins), m_nCurrBin(nCurrBin), m_currIt(currIt)
98 if (nCurrBin != LAST_BIN && m_currIt == m_ppBins[m_nCurrBin]->End())
106 : m_ppBins(other.m_ppBins), m_nCurrBin(other.m_nCurrBin), m_currIt(other.m_currIt)
114 XN_ASSERT(m_nCurrBin != LAST_BIN);
117 if (m_currIt != m_ppBins[m_nCurrBin]->End())
123 if (m_currIt == m_ppBins[m_nCurrBin]->End())
129 }
while (m_nCurrBin < LAST_BIN &&
130 (m_ppBins[m_nCurrBin] == NULL || m_ppBins[m_nCurrBin]->IsEmpty()));
132 m_currIt = m_ppBins[m_nCurrBin]->Begin();
153 XN_ASSERT(m_nCurrBin != LAST_BIN);
156 if (m_currIt != m_ppBins[m_nCurrBin]->ReverseEnd())
162 if (m_currIt == m_ppBins[m_nCurrBin]->ReverseEnd())
169 m_nCurrBin = LAST_BIN;
176 }
while (m_ppBins[m_nCurrBin] == NULL || m_ppBins[m_nCurrBin]->IsEmpty());
178 m_currIt = m_ppBins[m_nCurrBin]->Begin();
227 return m_currIt.operator->();
244 Iterator(TPairList** apBins, XnUInt32 nCurrBin,
typename TPairList::Iterator currIt)
294 return const_cast<TPair&
>(*this->m_currIt);
302 return const_cast<TPair*
>(this->m_currIt.operator->());
323 for (ConstIterator it = other.
Begin(); it != other.
End(); ++it)
325 nRetVal = Set(it->Key(), it->Value());
335 for (XnUInt32 i = 0; i < LAST_BIN; ++i)
337 if (m_apBins[i] != NULL)
349 return Iterator(m_apBins, m_nMinBin, m_apBins[m_nMinBin]->Begin());
357 return ConstIterator(m_apBins, m_nMinBin, m_apBins[m_nMinBin]->Begin());
365 return Iterator(m_apBins, LAST_BIN, m_apBins[LAST_BIN]->Begin());
373 return ConstIterator(m_apBins, LAST_BIN, m_apBins[LAST_BIN]->Begin());
387 if (m_apBins[nHash] == NULL)
392 if (nHash < m_nMinBin)
399 for (
typename TPairList::Iterator it = m_apBins[nHash]->Begin(); it != m_apBins[nHash]->End(); ++it)
401 if (TKeyManager::Compare(it->Key(), key) == 0)
410 return m_apBins[nHash]->AddLast(TPair(key, value));
422 XnUInt32 nBin = LAST_BIN;
423 typename TPairList::ConstIterator it;
424 if (
TRUE == Find(key, nBin, it))
426 return ConstIterator(m_apBins, nBin, it);
443 XnUInt32 nBin = LAST_BIN;
444 typename TPairList::Iterator it;
445 if (
TRUE == Find(key, nBin, it))
447 return Iterator(m_apBins, nBin, it);
466 return (it == End() ? XN_STATUS_NO_MATCH :
XN_STATUS_OK);
480 return (it == End() ? XN_STATUS_NO_MATCH :
XN_STATUS_OK);
493 ConstIterator it = Find(key);
496 return XN_STATUS_NO_MATCH;
515 ConstIterator it = Find(key);
518 return XN_STATUS_NO_MATCH;
522 pValue = &it->Value();
537 Iterator it = Find(key);
540 return XN_STATUS_NO_MATCH;
559 Iterator it = Find(key);
562 return XN_STATUS_NO_MATCH;
566 pValue = &it->Value();
579 Iterator it = Find(key);
582 nRetVal = Set(key,
TValue());
586 XN_ASSERT(it != End());
598 return XN_STATUS_ILLEGAL_POSITION;
601 XN_ASSERT(m_apBins == it.m_ppBins);
602 XN_ASSERT(m_apBins[it.m_nCurrBin] != NULL);
604 return m_apBins[it.m_nCurrBin]->Remove(it.m_currIt);
609 ConstIterator it = Find(key);
616 return XN_STATUS_NO_MATCH;
625 while (Begin() != End())
636 return (Begin() == End());
645 for (ConstIterator iter = Begin(); iter != End(); ++iter, ++nSize)
652 XnBool Find(
TKey const& key, XnUInt32& nBin,
typename TPairList::ConstIterator& currIt)
const 656 if (m_apBins[nHash] != NULL)
659 for (
typename TPairList::ConstIterator it = m_apBins[nHash]->Begin(); it != m_apBins[nHash]->End(); ++it)
661 if (TKeyManager::Compare(it->Key(), key) == 0)
677 m_apBins[LAST_BIN] = &m_lastBin;
678 m_nMinBin = LAST_BIN;
681 TPairList* m_apBins[NUM_BINS];
688 #endif // _XN_HASH_T_H_ XnStatus Remove(TKey const &key)
Definition: XnHashT.h:607
XnStatus Set(const TKey &key, const TValue &value)
Definition: XnHashT.h:382
XnListT< TPair, TAlloc > TPairList
Definition: XnHashT.h:81
ConstIterator & operator--()
Definition: XnHashT.h:151
XnUInt32 Size() const
Definition: XnHashT.h:642
TPair const * operator->() const
Definition: XnHashT.h:225
Iterator()
Definition: XnHashT.h:241
XnHashT()
Definition: XnHashT.h:306
XnHashT(const XnHashT &other)
Definition: XnHashT.h:311
XnBool IsEmpty() const
Definition: XnHashT.h:634
#define XN_STATUS_OK
Definition: XnStatus.h:36
Definition: XnHashT.h:238
XnKeyValuePair< TKey, TValue > TPair
Definition: XnHashT.h:80
Iterator & operator--()
Definition: XnHashT.h:273
ConstIterator End() const
Definition: XnHashT.h:371
Iterator operator--(int)
Definition: XnHashT.h:282
#define XN_VALIDATE_NEW(ptr, type,...)
Definition: XnOS.h:171
_TValue TValue
Definition: XnHashT.h:42
TValue const & Value() const
Definition: XnHashT.h:50
ConstIterator Begin() const
Definition: XnHashT.h:355
XnUInt32 XnStatus
Definition: XnStatus.h:33
XnStatus Remove(ConstIterator it)
Definition: XnHashT.h:592
ConstIterator & operator++()
Definition: XnHashT.h:112
Iterator & operator++()
Definition: XnHashT.h:254
XnStatus Find(TKey const &key, Iterator &it)
Definition: XnHashT.h:477
XnStatus Get(TKey const &key, TValue *&pValue)
Definition: XnHashT.h:557
XnBool operator!=(const ConstIterator &other) const
Definition: XnHashT.h:209
ConstIterator(const ConstIterator &other)
Definition: XnHashT.h:105
XnKeyValuePair()
Definition: XnHashT.h:44
TValue & Value()
Definition: XnHashT.h:51
TValue & operator[](TKey const &key)
Definition: XnHashT.h:576
Iterator Begin()
Definition: XnHashT.h:347
XnKeyValuePair(const XnKeyValuePair &other)
Definition: XnHashT.h:46
~XnHashT()
Definition: XnHashT.h:332
XnKeyValuePair(TKey key, TValue value)
Definition: XnHashT.h:45
XnStatus Get(TKey const &key, TValue &value)
Definition: XnHashT.h:535
ConstIterator Find(TKey const &key) const
Definition: XnHashT.h:420
ConstIterator(TPairList *const *apBins, XnUInt32 nCurrBin, typename TPairList::ConstIterator currIt)
Definition: XnHashT.h:95
XnBool operator==(const ConstIterator &other) const
Definition: XnHashT.h:199
static XnInt32 Compare(TKey const &key1, TKey const &key2)
Definition: XnHashT.h:67
ConstIterator operator++(int)
Definition: XnHashT.h:141
ConstIterator operator--(int)
Definition: XnHashT.h:187
XnUInt8 XnHashCode
Definition: XnHashT.h:33
XN_C_API void XN_C_DECL xnOSMemSet(void *pDest, XnUInt8 nValue, XnSizeT nCount)
#define XN_DELETE(p)
Definition: XnOS.h:339
XnStatus Find(TKey const &key, ConstIterator &it) const
Definition: XnHashT.h:463
TPairList::ConstIterator m_currIt
Definition: XnHashT.h:235
Iterator End()
Definition: XnHashT.h:363
Iterator(TPairList **apBins, XnUInt32 nCurrBin, typename TPairList::Iterator currIt)
Definition: XnHashT.h:244
TPair const & operator*() const
Definition: XnHashT.h:217
Iterator operator++(int)
Definition: XnHashT.h:263
Iterator Find(TKey const &key)
Definition: XnHashT.h:441
TPairList *const * m_ppBins
Definition: XnHashT.h:233
Iterator(const Iterator &other)
Definition: XnHashT.h:248
_TKey TKey
Definition: XnHashT.h:41
XnStatus Clear()
Definition: XnHashT.h:623
XnStatus Get(TKey const &key, TValue const *&pValue) const
Definition: XnHashT.h:513
static XnHashCode Hash(TKey const &key)
Definition: XnHashT.h:62
XnStatus Get(TKey const &key, TValue &value) const
Definition: XnHashT.h:491
ConstIterator()
Definition: XnHashT.h:92
TPair * operator->() const
Definition: XnHashT.h:300
TPair & operator*() const
Definition: XnHashT.h:292
TKey const & Key() const
Definition: XnHashT.h:49
XnUInt32 m_nCurrBin
Definition: XnHashT.h:234
XnHashT & operator=(const XnHashT &other)
Definition: XnHashT.h:317