ByteBufferEqualityComparer.cs 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. //
  2. // Author:
  3. // Jb Evain (jbevain@gmail.com)
  4. //
  5. // Copyright (c) 2008 - 2015 Jb Evain
  6. // Copyright (c) 2008 - 2011 Novell, Inc.
  7. //
  8. // Licensed under the MIT/X11 license.
  9. //
  10. using System;
  11. using System.Collections.Generic;
  12. namespace ILRuntime.Mono.Cecil.PE {
  13. sealed class ByteBufferEqualityComparer : IEqualityComparer<ByteBuffer> {
  14. public bool Equals (ByteBuffer x, ByteBuffer y)
  15. {
  16. if (x.length != y.length)
  17. return false;
  18. var x_buffer = x.buffer;
  19. var y_buffer = y.buffer;
  20. for (int i = 0; i < x.length; i++)
  21. if (x_buffer [i] != y_buffer [i])
  22. return false;
  23. return true;
  24. }
  25. public int GetHashCode (ByteBuffer buffer)
  26. {
  27. // See http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
  28. const int fnv_offset_bias = unchecked((int)2166136261);
  29. const int fnv_prime = 16777619;
  30. var hash_code = fnv_offset_bias;
  31. var bytes = buffer.buffer;
  32. for (int i = 0; i < buffer.length; i++)
  33. hash_code = unchecked ((hash_code ^ bytes [i]) * fnv_prime);
  34. return hash_code;
  35. }
  36. }
  37. }