Бранимир Караџић 3 年之前
父節點
當前提交
a138d3cede
共有 1 個文件被更改,包括 11 次插入22 次删除
  1. 11 22
      src/hash.cpp

+ 11 - 22
src/hash.cpp

@@ -188,6 +188,11 @@ static void mixTail(HashMurmur2APod& _self, const uint8_t*& _data, int32_t& _len
 	}
 	}
 }
 }
 
 
+BX_FORCE_INLINE uint32_t readAligned(const uint8_t* _data)
+{
+	return *(uint32_t*)_data;
+}
+
 BX_FORCE_INLINE uint32_t readUnaligned(const uint8_t* _data)
 BX_FORCE_INLINE uint32_t readUnaligned(const uint8_t* _data)
 {
 {
 	if (BX_ENABLED(BX_CPU_ENDIAN_BIG) )
 	if (BX_ENABLED(BX_CPU_ENDIAN_BIG) )
@@ -210,26 +215,10 @@ BX_FORCE_INLINE uint32_t readUnaligned(const uint8_t* _data)
 	}
 	}
 }
 }
 
 
-static void addAligned(HashMurmur2APod& _self, const uint8_t* _data, int32_t _len)
-{
-	_self.m_size += _len;
-
-	mixTail(_self, _data, _len);
-
-	while (_len >= 4)
-	{
-		uint32_t kk = *(uint32_t*)_data;
-
-		mmix(_self.m_hash, kk);
-
-		_data += 4;
-		_len  -= 4;
-	}
-
-	mixTail(_self, _data, _len);
-}
+typedef uint32_t (*ReadDataFn)(const uint8_t* _data);
 
 
-static void addUnaligned(HashMurmur2APod& _self, const uint8_t* _data, int32_t _len)
+template<ReadDataFn FnT>
+static void addData(HashMurmur2APod& _self, const uint8_t* _data, int32_t _len)
 {
 {
 	_self.m_size += _len;
 	_self.m_size += _len;
 
 
@@ -237,7 +226,7 @@ static void addUnaligned(HashMurmur2APod& _self, const uint8_t* _data, int32_t _
 
 
 	while (_len >= 4)
 	while (_len >= 4)
 	{
 	{
-		uint32_t kk = readUnaligned(_data);
+		uint32_t kk = FnT(_data);
 
 
 		mmix(_self.m_hash, kk);
 		mmix(_self.m_hash, kk);
 
 
@@ -256,11 +245,11 @@ void HashMurmur2A::add(const void* _data, int32_t _len)
 
 
 	if (BX_UNLIKELY(!isAligned(_data, 4) ) )
 	if (BX_UNLIKELY(!isAligned(_data, 4) ) )
 	{
 	{
-		addUnaligned(self, data, _len);
+		addData<readUnaligned>(self, data, _len);
 		return;
 		return;
 	}
 	}
 
 
-	addAligned(self, data, _len);
+	addData<readAligned>(self, data, _len);
 }
 }
 
 
 uint32_t HashMurmur2A::end()
 uint32_t HashMurmur2A::end()