BVB Source Codes

CRYENGINE Show HashComputer.h Source code

Return Download CRYENGINE: download HashComputer.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef __MNM_HASHCOMPUTER_H
  4. #define __MNM_HASHCOMPUTER_H
  5.  
  6. #pragma once
  7.  
  8. #include "MNM.h"
  9.  
  10. #if !defined(_MSC_VER) && !defined(_rotl)
  11.         #define _rotl(x, k) (((x) << (k)) | ((x) >> (32 - (k))))
  12. #endif
  13.  
  14. namespace MNM
  15. {
  16. //! HashComputer is used by MNM to detect changes in the input geometry.
  17. //! Implements MurmurHash3 32bit.
  18. struct HashComputer
  19. {
  20.         HashComputer(uint32 seed = 0)
  21.                 : hash(seed)
  22.                 , len(0)
  23.         {
  24.         }
  25.  
  26.         inline void Add(float key)
  27.         {
  28.                 union f32_u
  29.                 {
  30.                         float  fv;
  31.                         uint32 uv;
  32.                 };
  33.  
  34.                 f32_u u;
  35.                 u.fv = key;
  36.  
  37.                 Add(u.uv);
  38.         }
  39.  
  40.         inline void Add(uint32 key)
  41.         {
  42.                 key *= 0xcc9e2d51;
  43.                 key = _rotl(key, 15);
  44.                 key *= 0x1b873593;
  45.  
  46.                 hash ^= key;
  47.                 hash = _rotl(hash, 13);
  48.                 hash = hash * 5 + 0xe6546b64;
  49.  
  50.                 len += 4;
  51.         }
  52.  
  53.         inline void Complete()
  54.         {
  55.                 hash ^= len;
  56.  
  57.                 hash ^= hash >> 16;
  58.                 hash *= 0x85ebca6b;
  59.                 hash ^= hash >> 13;
  60.                 hash *= 0xc2b2ae35;
  61.                 hash ^= hash >> 16;
  62.         }
  63.  
  64.         inline void Add(const Vec3& key)
  65.         {
  66.                 Add(key.x);
  67.                 Add(key.y);
  68.                 Add(key.z);
  69.         }
  70.  
  71.         inline void Add(const Quat& key)
  72.         {
  73.                 Add(key.v);
  74.                 Add(key.w);
  75.         }
  76.  
  77.         inline void Add(const Matrix34& key)
  78.         {
  79.                 Add(key.GetTranslation());
  80.                 Add(key.GetColumn0());
  81.                 Add(key.GetColumn1());
  82.                 Add(key.GetColumn2());
  83.         }
  84.  
  85.         inline uint32 GetValue() const
  86.         {
  87.                 return hash;
  88.         }
  89. private:
  90.         uint32 len;
  91.         uint32 hash;
  92. };
  93. }
  94.  
  95. #endif  // #ifndef __MNM_HASHCOMPUTER_H
  96.  
downloadHashComputer.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top