template <> inline bool equalsArray<F64>(const F64* ptrA, int sizeA, const F64* ptrB, int sizeB) { return equalsBuffer(ptrA, sizeA * (int)sizeof(F64), ptrB, sizeB * (int)sizeof(F64)); }
template <> inline bool equalsArray<S16>(const S16* ptrA, int sizeA, const S16* ptrB, int sizeB) { return equalsBuffer(ptrA, sizeA * (int)sizeof(S16), ptrB, sizeB * (int)sizeof(S16)); }
template <> inline bool equalsArray<U32>(const U32* ptrA, int sizeA, const U32* ptrB, int sizeB) { return equalsBuffer(ptrA, sizeA * (int)sizeof(U32), ptrB, sizeB * (int)sizeof(U32)); }
template <class T> inline bool equals (const T& a, const T& b) { return equalsBuffer(&a, &b, sizeof(T)); }
template <> inline bool equals<std::string> (const std::string& a, const std::string& b) { return equalsBuffer(a.c_str(), a.length(), b.c_str(), b.length()); }
template <> inline bool equals<Mat4f> (const Mat4f& a, const Mat4f& b) { return equalsBuffer(&a, &b, sizeof(a)); }
template <> inline bool equals<GenericHashKey>(const GenericHashKey& a, const GenericHashKey& b) { return equalsBuffer(a.ptr, a.size, b.ptr, b.size); }
template <> inline bool equals<String> (const String& a, const String& b) { return equalsBuffer(a.getPtr(), a.getLength(), b.getPtr(), b.getLength()); }