]> git.tdb.fi Git - libs/gl.git/commitdiff
Use the hash function from mspcore
authorMikko Rasa <tdb@tdb.fi>
Sun, 19 Aug 2012 23:46:45 +0000 (02:46 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sun, 19 Aug 2012 23:46:45 +0000 (02:46 +0300)
Constructing tags mostly happens when loading datafiles or otherwise
outside the rendering loop, so the small extra overhead from a
cross-library function call is not significant.  Renderables that wish to
compare the Tag against a fixed value should avoid constructing the
reference Tag on every render call anyway.

source/tag.cpp

index af92bbb8b60780cb0827a63e8d0ea3c6795299d6..c5824aec4e114d60b04c53acd00ae2b54072f7fe 100644 (file)
@@ -1,27 +1,16 @@
+#include <cstring>
+#include <msp/core/hash.h>
 #include "tag.h"
 
-namespace {
-
-template<typename T>
-inline unsigned hash(T begin, T end)
-{
-       unsigned result = 0;
-       for(T i=begin; (i!=end && *i); ++i)
-               result = ((result>>29)|(result<<5))^static_cast<unsigned char>(*i);
-       return result;
-}
-
-}
-
 namespace Msp {
 namespace GL {
 
 Tag::Tag(const char *s):
-       id(s ? hash<const char *>(s, 0) : 0)
+       id((s && *s) ? hash32(s, strlen(s)) : 0)
 { }
 
 Tag::Tag(const std::string &s):
-       id(hash(s.begin(), s.end()))
+       id(s.empty() ? 0 : hash32(s))
 { }
 
 } // namespace GL