Guest User

Untitled

a guest
Mar 18th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4.  
  5. namespace hashes
  6. {
  7. public class ReadonlyBytes : IEnumerable
  8. {
  9. public readonly byte[] Array;
  10. public int Length { get { return Array.Length; } }
  11. private int currentHashCode { get; set; } = 0;
  12.  
  13. public ReadonlyBytes(params byte[] newArray)
  14. {
  15. Array = newArray ?? throw new ArgumentNullException();
  16. }
  17.  
  18. public override bool Equals(object obj)
  19. {
  20. var newArray = obj as ReadonlyBytes;
  21. if (newArray.Length != Array.Length) return false;
  22.  
  23. for (int i = 0; i < Array.Length; i++)
  24. if (Array[i] != newArray[i]) return false;
  25.  
  26. return true;
  27. }
  28.  
  29. public override int GetHashCode()
  30. {
  31. unchecked
  32. {
  33. if (currentHashCode != 0) return currentHashCode;
  34. currentHashCode = 1;
  35.  
  36. foreach (var e in Array)
  37. currentHashCode += (currentHashCode * 322) ^ e;
  38.  
  39. return currentHashCode;
  40. }
  41. }
  42.  
  43. public IEnumerator<byte> GetEnumerator()
  44. {
  45. for (int i = 0; i < Array.Length; i++)
  46. yield return Array[i];
  47. }
  48.  
  49. IEnumerator IEnumerable.GetEnumerator()
  50. {
  51. return GetEnumerator();
  52. }
  53.  
  54. public byte this[int index]
  55. {
  56. get
  57. {
  58. if (index < 0 || index >= Array.Length) throw new IndexOutOfRangeException();
  59. return Array[index];
  60. }
  61. set
  62. {
  63. if (index < 0 || index >= Array.Length) throw new IndexOutOfRangeException();
  64. Array[index] = value;
  65. }
  66. }
  67.  
  68. public override string ToString()
  69. {
  70. return "[" + string.Join(", ", Array) + "]";
  71. }
  72. }
  73. }
Add Comment
Please, Sign In to add comment