BitMask32.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. namespace YooAsset
  3. {
  4. internal struct BitMask32
  5. {
  6. private int _mask;
  7. public static implicit operator int(BitMask32 mask) { return mask._mask; }
  8. public static implicit operator BitMask32(int mask) { return new BitMask32(mask); }
  9. public BitMask32(int mask)
  10. {
  11. _mask = mask;
  12. }
  13. /// <summary>
  14. /// 打开位
  15. /// </summary>
  16. public void Open(int bit)
  17. {
  18. if (bit < 0 || bit > 31)
  19. throw new ArgumentOutOfRangeException();
  20. else
  21. _mask |= 1 << bit;
  22. }
  23. /// <summary>
  24. /// 关闭位
  25. /// </summary>
  26. public void Close(int bit)
  27. {
  28. if (bit < 0 || bit > 31)
  29. throw new ArgumentOutOfRangeException();
  30. else
  31. _mask &= ~(1 << bit);
  32. }
  33. /// <summary>
  34. /// 位取反
  35. /// </summary>
  36. public void Reverse(int bit)
  37. {
  38. if (bit < 0 || bit > 31)
  39. throw new ArgumentOutOfRangeException();
  40. else
  41. _mask ^= 1 << bit;
  42. }
  43. /// <summary>
  44. /// 所有位取反
  45. /// </summary>
  46. public void Inverse()
  47. {
  48. _mask = ~_mask;
  49. }
  50. /// <summary>
  51. /// 比对位值
  52. /// </summary>
  53. public bool Test(int bit)
  54. {
  55. if (bit < 0 || bit > 31)
  56. throw new ArgumentOutOfRangeException();
  57. else
  58. return (_mask & (1 << bit)) != 0;
  59. }
  60. }
  61. }