summaryrefslogtreecommitdiffstats
path: root/tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h')
-rw-r--r--tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h b/tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h
new file mode 100644
index 00000000..57602211
--- /dev/null
+++ b/tests/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h
@@ -0,0 +1,90 @@
+#ifndef _XN_STRINGS_HASH_T_H_
+#define _XN_STRINGS_HASH_T_H_
+
+//---------------------------------------------------------------------------
+// Includes
+//---------------------------------------------------------------------------
+#include "XnHashT.h"
+
+//---------------------------------------------------------------------------
+// Code
+//---------------------------------------------------------------------------
+class XnStringsHashKeyManager
+{
+public:
+ static XnHashCode Hash(const XnChar* const& key)
+ {
+ XnUInt32 nCRC = 0;
+ xnOSStrCRC32(key, &nCRC);
+
+ // convert from UINT32 to XnHashValue
+ return nCRC % (1 << (sizeof(XnHashCode)*8));
+ }
+
+ static XnInt32 Compare(const XnChar* const& key1, const XnChar* const& key2)
+ {
+ return strcmp(key1, key2);
+ }
+};
+
+template<class TValue>
+class XnStringsNodeAllocator
+{
+public:
+ typedef XnKeyValuePair<const XnChar*, TValue> TPair;
+ typedef XnLinkedNodeT<TPair> TLinkedNode;
+
+ static TLinkedNode* Allocate(TPair const& pair)
+ {
+ XnChar* pKeyCopy = xnOSStrDup(pair.Key());
+ if (pKeyCopy == NULL)
+ {
+ return NULL;
+ }
+
+ return XN_NEW(TLinkedNode, TPair(pKeyCopy, pair.Value()));
+ }
+
+ static void Deallocate(TLinkedNode* pNode)
+ {
+ XN_ASSERT(pNode != NULL);
+ XN_ASSERT(pNode->value.Key() != NULL);
+
+ xnOSFree(pNode->value.Key());
+ XN_DELETE(pNode);
+ }
+};
+
+template<class TValue>
+class XnStringsHashT : public XnHashT<const XnChar*, TValue, XnStringsHashKeyManager, XnStringsNodeAllocator<TValue> >
+{
+ typedef XnHashT<const XnChar*, TValue, XnStringsHashKeyManager, XnStringsNodeAllocator<TValue> > Base;
+
+public:
+ XnStringsHashT() : Base() {}
+
+ XnStringsHashT(const XnStringsHashT& other) : Base()
+ {
+ *this = other;
+ }
+
+ XnStringsHashT& operator=(const XnStringsHashT& other)
+ {
+ Base::operator=(other);
+ // no other members
+ return *this;
+ }
+};
+
+class XnStringsSet : public XnStringsHashT<void*>
+{
+ typedef XnStringsHashT<void*> Base;
+
+public:
+ XnStatus Set(const XnChar* key)
+ {
+ return Base::Set(key, NULL);
+ }
+};
+
+#endif // _XN_STRINGS_HASH_T_H_ \ No newline at end of file