summaryrefslogtreecommitdiffstats
path: root/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHashT.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHashT.h')
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHashT.h668
1 files changed, 0 insertions, 668 deletions
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHashT.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHashT.h
deleted file mode 100644
index 7708fd45..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHashT.h
+++ /dev/null
@@ -1,668 +0,0 @@
-#ifndef _XN_HASH_T_H_
-#define _XN_HASH_T_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnOS.h>
-#include <XnListT.h>
-
-//---------------------------------------------------------------------------
-// Defines
-//---------------------------------------------------------------------------
-typedef XnUInt8 XnHashCode;
-
-//---------------------------------------------------------------------------
-// Code
-//---------------------------------------------------------------------------
-template<class _TKey, class _TValue>
-struct XnKeyValuePair
-{
- typedef _TKey TKey;
- typedef _TValue TValue;
-
- XnKeyValuePair() : key(TKey()), value(TValue()) {}
- XnKeyValuePair(TKey key, TValue value) : key(key), value(value) {}
- XnKeyValuePair(const XnKeyValuePair& other) : key(other.key), value(other.value) {}
-
-public:
- TKey const& Key() const { return key; }
- TValue const& Value() const { return value; }
- TValue& Value() { return value; }
-
-private:
- TKey key;
- TValue value;
-};
-
-template<class TKey>
-class XnDefaultKeyManagerT
-{
-public:
- static XnHashCode Hash(TKey const& key)
- {
- return (((XnSizeT)key) & 0xff);
- }
-
- static XnInt32 Compare(TKey const& key1, TKey const& key2)
- {
- return XnInt32(XnSizeT(key1)-XnSizeT(key2));
- }
-};
-
-template<class TKey,
- class TValue,
- class TKeyManager = XnDefaultKeyManagerT<TKey>,
- class TAlloc = XnLinkedNodeDefaultAllocatorT<XnKeyValuePair<TKey, TValue> > >
-class XnHashT
-{
-public:
- typedef XnKeyValuePair<TKey, TValue> TPair;
- typedef XnListT<TPair, TAlloc> TPairList;
-
- enum
- {
- LAST_BIN = (1 << (sizeof(XnHashCode)*8)),
- NUM_BINS = LAST_BIN + 1,
- };
-
- class ConstIterator
- {
- public:
- ConstIterator() : m_ppBins(NULL), m_nCurrBin(0)
- {}
-
- ConstIterator(TPairList* const* apBins, XnUInt32 nCurrBin, typename TPairList::ConstIterator currIt)
- : m_ppBins(apBins), m_nCurrBin(nCurrBin), m_currIt(currIt)
- {
- if (nCurrBin != LAST_BIN && m_currIt == m_ppBins[m_nCurrBin]->End())
- {
- // this does not point to an actual entry. run to next one.
- ++*this;
- }
- }
-
- ConstIterator(const ConstIterator& other)
- : m_ppBins(other.m_ppBins), m_nCurrBin(other.m_nCurrBin), m_currIt(other.m_currIt)
- {}
-
- /**
- * Support ++iterator, go to the next object in the list
- */
- ConstIterator& operator++()
- {
- XN_ASSERT(m_nCurrBin != LAST_BIN);
-
- // increment internal bin iterator
- if (m_currIt != m_ppBins[m_nCurrBin]->End())
- {
- ++m_currIt;
- }
-
- // check if we need to move to next bin
- if (m_currIt == m_ppBins[m_nCurrBin]->End())
- {
- // go forward through bins, until we either reach the end or a non-empty bin
- do
- {
- ++m_nCurrBin;
- } while (m_nCurrBin < LAST_BIN &&
- (m_ppBins[m_nCurrBin] == NULL || m_ppBins[m_nCurrBin]->IsEmpty()));
-
- m_currIt = m_ppBins[m_nCurrBin]->Begin();
- }
-
- return *this;
- }
-
- /**
- * Support iterator++, go to the next object in the list, returning the old value
- */
- ConstIterator operator++(int)
- {
- ConstIterator retVal(*this);
- ++*this;
- return retVal;
- }
-
- /**
- * Support --iterator, go to the previous object in the hash
- */
- ConstIterator& operator--()
- {
- XN_ASSERT(m_nCurrBin != LAST_BIN);
-
- // decrement internal bin iterator
- if (m_currIt != m_ppBins[m_nCurrBin]->ReverseEnd())
- {
- --m_currIt;
- }
-
- // check if we need to move to previous bin
- if (m_currIt == m_ppBins[m_nCurrBin]->ReverseEnd())
- {
- // go backwards through bins, until we either reach the end or a non-empty bin
- do
- {
- if (m_nCurrBin == 0)
- {
- m_nCurrBin = LAST_BIN;
- break;
- }
- else
- {
- --m_nCurrBin;
- }
- } while (m_ppBins[m_nCurrBin] == NULL || m_ppBins[m_nCurrBin]->IsEmpty());
-
- m_currIt = m_ppBins[m_nCurrBin]->Begin();
- }
-
- return *this;
- }
-
- /**
- * Support iterator--, go to the previous object in the hash, returning the old value
- */
- ConstIterator operator--(int)
- {
- ConstIterator retVal(*this);
- --*this;
- return retVal;
- }
-
- /**
- * Operator to check if two iterators point to the same object
- *
- * @param other [in] instance to compare with
- */
- inline XnBool operator==(const ConstIterator& other) const
- {
- return m_currIt == other.m_currIt;
- }
-
- /**
- * Operator to check if two iterators point to different objects
- *
- * @param other [in] instance to compare with
- */
- inline XnBool operator!=(const ConstIterator& other) const
- {
- return m_currIt != other.m_currIt;
- }
-
- /**
- * Get the value of the current object (const version)
- */
- inline TPair const& operator*() const
- {
- return *m_currIt;
- }
-
- /**
- * Get a pointer to the value of the current object (const version)
- */
- inline TPair const* operator->() const
- {
- return m_currIt.operator->();
- }
-
- protected:
- friend class XnHashT;
-
- TPairList* const* m_ppBins;
- XnUInt32 m_nCurrBin;
- typename TPairList::ConstIterator m_currIt;
- };
-
- class Iterator : public ConstIterator
- {
- public:
- Iterator() : ConstIterator()
- {}
-
- Iterator(TPairList** apBins, XnUInt32 nCurrBin, typename TPairList::Iterator currIt)
- : ConstIterator(apBins, nCurrBin, currIt)
- {}
-
- Iterator(const Iterator& other) : ConstIterator(other)
- {}
-
- /**
- * Support ++iterator, go to the next object in the list
- */
- Iterator& operator++()
- {
- ++(*(ConstIterator*)this);
- return (*this);
- }
-
- /**
- * Support iterator++, go to the next object in the list, returning the old value
- */
- inline Iterator operator++(int)
- {
- Iterator retVal(*this);
- ++*this;
- return (retVal);
- }
-
- /**
- * Support --iterator, go to the next object in the list
- */
- inline Iterator& operator--()
- {
- --(*(ConstIterator*)this);
- return (*this);
- }
-
- /**
- * Support iterator--, go to the next object in the list, returning the old value
- */
- inline Iterator operator--(int)
- {
- Iterator retVal(*this);
- --*this;
- return (retVal);
- }
-
- /**
- * Get the value of the current object
- */
- inline TPair& operator*() const
- {
- return const_cast<TPair&>(*this->m_currIt);
- }
-
- /**
- * Get a pointer to the value of the current object
- */
- inline TPair* operator->() const
- {
- return const_cast<TPair*>(this->m_currIt.operator->());
- }
- };
-
- XnHashT()
- {
- Init();
- }
-
- XnHashT(const XnHashT& other)
- {
- Init();
- *this = other;
- }
-
- XnHashT& operator=(const XnHashT& other)
- {
- Clear();
-
- XnStatus nRetVal = XN_STATUS_OK;
-
- for (ConstIterator it = other.Begin(); it != other.End(); ++it)
- {
- nRetVal = Set(it->Key(), it->Value());
- XN_ASSERT(nRetVal == XN_STATUS_OK);
- }
-
- return *this;
- }
-
- ~XnHashT()
- {
- // NOTE: we don't want to delete LAST_BIN (it points to the m_lastBin member)
- for (XnUInt32 i = 0; i < LAST_BIN; ++i)
- {
- if (m_apBins[i] != NULL)
- {
- XN_DELETE(m_apBins[i]);
- }
- }
- }
-
- /**
- * An iterator to the first entry of the list (non-const version)
- */
- Iterator Begin()
- {
- return Iterator(m_apBins, m_nMinBin, m_apBins[m_nMinBin]->Begin());
- }
-
- /**
- * An iterator to the first entry of the list (const version)
- */
- ConstIterator Begin() const
- {
- return ConstIterator(m_apBins, m_nMinBin, m_apBins[m_nMinBin]->Begin());
- }
-
- /**
- * An iterator 1to the end of the list (non-const version). The position is invalid.
- */
- Iterator End()
- {
- return Iterator(m_apBins, LAST_BIN, m_apBins[LAST_BIN]->Begin());
- }
-
- /**
- * An iterator to the end of the list (const version). The position is invalid.
- */
- ConstIterator End() const
- {
- return ConstIterator(m_apBins, LAST_BIN, m_apBins[LAST_BIN]->Begin());
- }
-
- /**
- * Set a new key-value entry. If key exists, will replace value.
- *
- * @param key [in] The key to which to associate the value
- * @param value [in] The value to add to the XnHash
- */
- XnStatus Set(const TKey& key, const TValue& value)
- {
- XnHashCode nHash = TKeyManager::Hash(key);
-
- // check if bin exists
- if (m_apBins[nHash] == NULL)
- {
- // create it
- XN_VALIDATE_NEW(m_apBins[nHash], TPairList);
-
- if (nHash < m_nMinBin)
- {
- m_nMinBin = nHash;
- }
- }
-
- // now check if key is already in the bin
- for (typename TPairList::Iterator it = m_apBins[nHash]->Begin(); it != m_apBins[nHash]->End(); ++it)
- {
- if (TKeyManager::Compare(it->Key(), key) == 0)
- {
- // replace it
- it->Value() = value;
- return (XN_STATUS_OK);
- }
- }
-
- // if we got here, key is not in bin. Add it.
- return m_apBins[nHash]->AddLast(TPair(key, value));
- }
-
- /**
- * Get an iterator pointing to the pair in the hash (const version).
- *
- * @param key [in] The searched key
- *
- * @return End() if value doesn't exist
- */
- ConstIterator Find(TKey const& key) const
- {
- XnUInt32 nBin = LAST_BIN;
- typename TPairList::ConstIterator it;
- if (TRUE == Find(key, nBin, it))
- {
- return ConstIterator(m_apBins, nBin, it);
- }
- else
- {
- return End();
- }
- }
-
- /**
- * Get an iterator pointing to the pair in the hash.
- *
- * @param key [in] The searched key
- *
- * @return End() if value doesn't exist
- */
- Iterator Find(TKey const& key)
- {
- XnUInt32 nBin = LAST_BIN;
- typename TPairList::Iterator it;
- if (TRUE == Find(key, nBin, it))
- {
- return Iterator(m_apBins, nBin, it);
- }
- else
- {
- return End();
- }
- }
-
- /**
- * Get an iterator pointing to the pair in the hash (const version).
- *
- * @param key [in] The searched key
- * @param it [out] An iterator to the entry in the hash.
- *
- * @return XN_STATUS_NO_MATCH if value doesn't exist
- */
- XnStatus Find(TKey const& key, ConstIterator& it) const
- {
- it = Find(key);
- return (it == End() ? XN_STATUS_NO_MATCH : XN_STATUS_OK);
- }
-
- /**
- * Get an iterator pointing to the pair in the hash (const version).
- *
- * @param key [in] The searched key
- * @param it [out] An iterator to the entry in the hash.
- *
- * @return XN_STATUS_NO_MATCH if value doesn't exist
- */
- XnStatus Find(TKey const& key, Iterator& it)
- {
- it = Find(key);
- return (it == End() ? XN_STATUS_NO_MATCH : XN_STATUS_OK);
- }
-
- /**
- * Get the value associated with the supplied key
- *
- * @param key [in] The key of the entry
- * @param value [out] The retrieved value
- *
- * @return XN_STATUS_NO_MATCH if no such key exists
- */
- XnStatus Get(TKey const& key, TValue& value) const
- {
- ConstIterator it = Find(key);
- if (it == End())
- {
- return XN_STATUS_NO_MATCH;
- }
- else
- {
- value = it->Value();
- return XN_STATUS_OK;
- }
- }
-
- /**
- * Get a pointer to the value associated with the supplied key
- *
- * @param key [in] The key of the entry
- * @param pValue [out] A const pointer to the value that is stored in the hash.
- *
- * @return XN_STATUS_NO_MATCH if no such key exists
- */
- XnStatus Get(TKey const& key, TValue const*& pValue) const
- {
- ConstIterator it = Find(key);
- if (it == End())
- {
- return XN_STATUS_NO_MATCH;
- }
- else
- {
- pValue = &it->Value();
- return XN_STATUS_OK;
- }
- }
-
- /**
- * Get the value associated with the supplied key
- *
- * @param key [in] The key of the entry
- * @param value [out] The retrieved value
- *
- * @return XN_STATUS_NO_MATCH if no such key exists
- */
- XnStatus Get(TKey const& key, TValue& value)
- {
- Iterator it = Find(key);
- if (it == End())
- {
- return XN_STATUS_NO_MATCH;
- }
- else
- {
- value = it->Value();
- return XN_STATUS_OK;
- }
- }
-
- /**
- * Get a pointer to the value associated with the supplied key
- *
- * @param key [in] The key of the entry
- * @param pValue [out] A pointer to the value that is stored in the hash
- *
- * @return XN_STATUS_NO_MATCH if no such key exists
- */
- XnStatus Get(TKey const& key, TValue*& pValue)
- {
- Iterator it = Find(key);
- if (it == End())
- {
- return XN_STATUS_NO_MATCH;
- }
- else
- {
- pValue = &it->Value();
- return XN_STATUS_OK;
- }
- }
-
- /**
- * Gets a reference to the value of a specific key. If this key is not in the hash, it will be added.
- *
- * @param key [in] The key of the entry.
- */
- TValue& operator[](TKey const& key)
- {
- XnStatus nRetVal = XN_STATUS_OK;
- Iterator it = Find(key);
- if (it == End())
- {
- nRetVal = Set(key, TValue());
- XN_ASSERT(nRetVal == XN_STATUS_OK);
-
- it = Find(key);
- XN_ASSERT(it != End());
- }
-
- return it->Value();
- }
-
- XnStatus Remove(ConstIterator it)
- {
- // Verify iterator is valid
- if (it == End())
- {
- XN_ASSERT(FALSE);
- return XN_STATUS_ILLEGAL_POSITION;
- }
-
- XN_ASSERT(m_apBins == it.m_ppBins);
- XN_ASSERT(m_apBins[it.m_nCurrBin] != NULL);
-
- return m_apBins[it.m_nCurrBin]->Remove(it.m_currIt);
- }
-
- XnStatus Remove(TKey const& key)
- {
- ConstIterator it = Find(key);
- if (it != End())
- {
- return Remove(it);
- }
- else
- {
- return XN_STATUS_NO_MATCH;
- }
- }
-
- /**
- * Remove all entries from the XnHash.
- */
- XnStatus Clear()
- {
- while (Begin() != End())
- Remove(Begin());
-
- return XN_STATUS_OK;
- }
-
- /**
- * Checks if hash is empty.
- */
- XnBool IsEmpty() const
- {
- return (Begin() == End());
- }
-
- /**
- * Gets the number of entries in the hash.
- */
- XnUInt32 Size() const
- {
- XnUInt32 nSize = 0;
- for (ConstIterator iter = Begin(); iter != End(); ++iter, ++nSize)
- ;
-
- return nSize;
- }
-
-private:
- XnBool Find(TKey const& key, XnUInt32& nBin, typename TPairList::ConstIterator& currIt) const
- {
- XnHashCode nHash = TKeyManager::Hash(key);
-
- if (m_apBins[nHash] != NULL)
- {
- // look for value in bin
- for (typename TPairList::ConstIterator it = m_apBins[nHash]->Begin(); it != m_apBins[nHash]->End(); ++it)
- {
- if (TKeyManager::Compare(it->Key(), key) == 0)
- {
- nBin = nHash;
- currIt = it;
- return TRUE;
- }
- }
- }
-
- // if we got here, key wasn't found
- return FALSE;
- }
-
- void Init()
- {
- xnOSMemSet(m_apBins, 0, sizeof(m_apBins));
- m_apBins[LAST_BIN] = &m_lastBin;
- m_nMinBin = LAST_BIN;
- }
-
- TPairList* m_apBins[NUM_BINS];
- TPairList m_lastBin;
- XnUInt32 m_nMinBin;
-};
-
-
-
-#endif // _XN_HASH_T_H_ \ No newline at end of file