diff options
Diffstat (limited to 'tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h')
-rw-r--r-- | tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h new file mode 100644 index 00000000..57602211 --- /dev/null +++ b/tests/manual/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 |