A game about forced loneliness, made by TACStudios
at master 51 lines 1.5 kB view raw
1namespace UnityEngine.Timeline 2{ 3 static class HashUtility 4 { 5 // Note. We could have used "params int[] hashes" but we want to avoid allocating. 6 7 public static int CombineHash(this int h1, int h2) 8 { 9 return h1 ^ (int)(h2 + 0x9e3779b9 + (h1 << 6) + (h1 >> 2)); // Similar to c++ boost::hash_combine 10 } 11 12 public static int CombineHash(int h1, int h2, int h3) 13 { 14 return CombineHash(h1, h2).CombineHash(h3); 15 } 16 17 public static int CombineHash(int h1, int h2, int h3, int h4) 18 { 19 return CombineHash(h1, h2, h3).CombineHash(h4); 20 } 21 22 public static int CombineHash(int h1, int h2, int h3, int h4, int h5) 23 { 24 return CombineHash(h1, h2, h3, h4).CombineHash(h5); 25 } 26 27 public static int CombineHash(int h1, int h2, int h3, int h4, int h5, int h6) 28 { 29 return CombineHash(h1, h2, h3, h4, h5).CombineHash(h6); 30 } 31 32 public static int CombineHash(int h1, int h2, int h3, int h4, int h5, int h6, int h7) 33 { 34 return CombineHash(h1, h2, h3, h4, h5, h6).CombineHash(h7); 35 } 36 37 public static int CombineHash(int[] hashes) 38 { 39 if (hashes == null || hashes.Length == 0) 40 return 0; 41 42 var h = hashes[0]; 43 for (int i = 1; i < hashes.Length; ++i) 44 { 45 h = CombineHash(h, hashes[i]); 46 } 47 48 return h; 49 } 50 } 51}