18 template<
class _TKey,
class _TValue>
29 TKey
const&
Key()
const {
return key; }
30 TValue
const&
Value()
const {
return value; }
31 TValue&
Value() {
return value; }
44 return (((XnSizeT)key) & 0xff);
49 return XnInt32(XnSizeT(key1)-XnSizeT(key2));
66 NUM_BINS = LAST_BIN + 1,
75 ConstIterator(TPairList*
const* apBins, XnUInt32 nCurrBin,
typename TPairList::ConstIterator currIt)
76 : m_ppBins(apBins), m_nCurrBin(nCurrBin), m_currIt(currIt)
78 if (nCurrBin != LAST_BIN && m_currIt == m_ppBins[m_nCurrBin]->End())
86 : m_ppBins(other.m_ppBins), m_nCurrBin(other.m_nCurrBin), m_currIt(other.m_currIt)
94 XN_ASSERT(m_nCurrBin != LAST_BIN);
97 if (m_currIt != m_ppBins[m_nCurrBin]->End())
103 if (m_currIt == m_ppBins[m_nCurrBin]->End())
109 }
while (m_nCurrBin < LAST_BIN &&
110 (m_ppBins[m_nCurrBin] == NULL || m_ppBins[m_nCurrBin]->IsEmpty()));
112 m_currIt = m_ppBins[m_nCurrBin]->Begin();
133 XN_ASSERT(m_nCurrBin != LAST_BIN);
136 if (m_currIt != m_ppBins[m_nCurrBin]->ReverseEnd())
142 if (m_currIt == m_ppBins[m_nCurrBin]->ReverseEnd())
149 m_nCurrBin = LAST_BIN;
156 }
while (m_ppBins[m_nCurrBin] == NULL || m_ppBins[m_nCurrBin]->IsEmpty());
158 m_currIt = m_ppBins[m_nCurrBin]->Begin();
207 return m_currIt.operator->();
224 Iterator(TPairList** apBins, XnUInt32 nCurrBin,
typename TPairList::Iterator currIt)
274 return const_cast<TPair&
>(*this->m_currIt);
282 return const_cast<TPair*
>(this->m_currIt.operator->());
303 for (ConstIterator it = other.
Begin(); it != other.
End(); ++it)
305 nRetVal = Set(it->Key(), it->Value());
315 for (XnUInt32 i = 0; i < LAST_BIN; ++i)
317 if (m_apBins[i] != NULL)
329 return Iterator(m_apBins, m_nMinBin, m_apBins[m_nMinBin]->Begin());
337 return ConstIterator(m_apBins, m_nMinBin, m_apBins[m_nMinBin]->Begin());
345 return Iterator(m_apBins, LAST_BIN, m_apBins[LAST_BIN]->Begin());
353 return ConstIterator(m_apBins, LAST_BIN, m_apBins[LAST_BIN]->Begin());
367 if (m_apBins[nHash] == NULL)
372 if (nHash < m_nMinBin)
379 for (
typename TPairList::Iterator it = m_apBins[nHash]->Begin(); it != m_apBins[nHash]->End(); ++it)
381 if (TKeyManager::Compare(it->Key(), key) == 0)
390 return m_apBins[nHash]->AddLast(TPair(key, value));
402 XnUInt32 nBin = LAST_BIN;
403 typename TPairList::ConstIterator it;
404 if (
TRUE == Find(key, nBin, it))
406 return ConstIterator(m_apBins, nBin, it);
423 XnUInt32 nBin = LAST_BIN;
424 typename TPairList::Iterator it;
425 if (
TRUE == Find(key, nBin, it))
427 return Iterator(m_apBins, nBin, it);
446 return (it == End() ? XN_STATUS_NO_MATCH :
XN_STATUS_OK);
460 return (it == End() ? XN_STATUS_NO_MATCH :
XN_STATUS_OK);
473 ConstIterator it = Find(key);
476 return XN_STATUS_NO_MATCH;
495 ConstIterator it = Find(key);
498 return XN_STATUS_NO_MATCH;
502 pValue = &it->Value();
517 Iterator it = Find(key);
520 return XN_STATUS_NO_MATCH;
539 Iterator it = Find(key);
542 return XN_STATUS_NO_MATCH;
546 pValue = &it->Value();
559 Iterator it = Find(key);
562 nRetVal = Set(key,
TValue());
566 XN_ASSERT(it != End());
578 return XN_STATUS_ILLEGAL_POSITION;
581 XN_ASSERT(m_apBins == it.m_ppBins);
582 XN_ASSERT(m_apBins[it.m_nCurrBin] != NULL);
584 return m_apBins[it.m_nCurrBin]->Remove(it.m_currIt);
589 ConstIterator it = Find(key);
596 return XN_STATUS_NO_MATCH;
605 while (Begin() != End())
616 return (Begin() == End());
625 for (ConstIterator iter = Begin(); iter != End(); ++iter, ++nSize)
632 XnBool Find(
TKey const& key, XnUInt32& nBin,
typename TPairList::ConstIterator& currIt)
const 636 if (m_apBins[nHash] != NULL)
639 for (
typename TPairList::ConstIterator it = m_apBins[nHash]->Begin(); it != m_apBins[nHash]->End(); ++it)
641 if (TKeyManager::Compare(it->Key(), key) == 0)
657 m_apBins[LAST_BIN] = &m_lastBin;
658 m_nMinBin = LAST_BIN;
661 TPairList* m_apBins[NUM_BINS];
668 #endif // _XN_HASH_T_H_ ConstIterator Begin() const
Definition: XnHashT.h:335
XnStatus Remove(TKey const &key)
Definition: XnHashT.h:587
XnStatus Set(const TKey &key, const TValue &value)
Definition: XnHashT.h:362
ConstIterator Find(TKey const &key) const
Definition: XnHashT.h:400
XnListT< TPair, TAlloc > TPairList
Definition: XnHashT.h:61
XnBool operator!=(const ConstIterator &other) const
Definition: XnHashT.h:189
ConstIterator & operator--()
Definition: XnHashT.h:131
Iterator()
Definition: XnHashT.h:221
XnHashT()
Definition: XnHashT.h:286
XnHashT(const XnHashT &other)
Definition: XnHashT.h:291
#define XN_STATUS_OK
Definition: XnStatus.h:37
Definition: XnHashT.h:218
ConstIterator End() const
Definition: XnHashT.h:351
XnKeyValuePair< TKey, TValue > TPair
Definition: XnHashT.h:60
XnBool operator==(const ConstIterator &other) const
Definition: XnHashT.h:179
TPair & operator*() const
Definition: XnHashT.h:272
Iterator & operator--()
Definition: XnHashT.h:253
Iterator operator--(int)
Definition: XnHashT.h:262
#define XN_VALIDATE_NEW(ptr, type,...)
Definition: XnOS.h:168
_TValue TValue
Definition: XnHashT.h:22
XnUInt32 XnStatus
Definition: XnStatus.h:34
XnStatus Remove(ConstIterator it)
Definition: XnHashT.h:572
XnUInt32 Size() const
Definition: XnHashT.h:622
ConstIterator & operator++()
Definition: XnHashT.h:92
Iterator & operator++()
Definition: XnHashT.h:234
XnStatus Find(TKey const &key, Iterator &it)
Definition: XnHashT.h:457
XnStatus Get(TKey const &key, TValue *&pValue)
Definition: XnHashT.h:537
ConstIterator(const ConstIterator &other)
Definition: XnHashT.h:85
XnKeyValuePair()
Definition: XnHashT.h:24
TValue & Value()
Definition: XnHashT.h:31
TValue & operator[](TKey const &key)
Definition: XnHashT.h:556
Iterator Begin()
Definition: XnHashT.h:327
XnKeyValuePair(const XnKeyValuePair &other)
Definition: XnHashT.h:26
~XnHashT()
Definition: XnHashT.h:312
XnKeyValuePair(TKey key, TValue value)
Definition: XnHashT.h:25
TValue const & Value() const
Definition: XnHashT.h:30
XnStatus Find(TKey const &key, ConstIterator &it) const
Definition: XnHashT.h:443
XnStatus Get(TKey const &key, TValue &value)
Definition: XnHashT.h:515
XnBool IsEmpty() const
Definition: XnHashT.h:614
TPair const & operator*() const
Definition: XnHashT.h:197
TPair const * operator->() const
Definition: XnHashT.h:205
XnStatus Get(TKey const &key, TValue const *&pValue) const
Definition: XnHashT.h:493
ConstIterator(TPairList *const *apBins, XnUInt32 nCurrBin, typename TPairList::ConstIterator currIt)
Definition: XnHashT.h:75
static XnInt32 Compare(TKey const &key1, TKey const &key2)
Definition: XnHashT.h:47
XnStatus Get(TKey const &key, TValue &value) const
Definition: XnHashT.h:471
ConstIterator operator++(int)
Definition: XnHashT.h:121
ConstIterator operator--(int)
Definition: XnHashT.h:167
XnUInt8 XnHashCode
Definition: XnHashT.h:13
XN_C_API void XN_C_DECL xnOSMemSet(void *pDest, XnUInt8 nValue, XnSizeT nCount)
TKey const & Key() const
Definition: XnHashT.h:29
#define XN_DELETE(p)
Definition: XnOS.h:336
TPairList::ConstIterator m_currIt
Definition: XnHashT.h:215
Iterator End()
Definition: XnHashT.h:343
Iterator(TPairList **apBins, XnUInt32 nCurrBin, typename TPairList::Iterator currIt)
Definition: XnHashT.h:224
Iterator operator++(int)
Definition: XnHashT.h:243
Iterator Find(TKey const &key)
Definition: XnHashT.h:421
TPairList *const * m_ppBins
Definition: XnHashT.h:213
Iterator(const Iterator &other)
Definition: XnHashT.h:228
_TKey TKey
Definition: XnHashT.h:21
XnStatus Clear()
Definition: XnHashT.h:603
static XnHashCode Hash(TKey const &key)
Definition: XnHashT.h:42
ConstIterator()
Definition: XnHashT.h:72
XnUInt32 m_nCurrBin
Definition: XnHashT.h:214
TPair * operator->() const
Definition: XnHashT.h:280
XnHashT & operator=(const XnHashT &other)
Definition: XnHashT.h:297