bitops.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #include "bitops.h"
  2. namespace NBitOps {
  3. namespace NPrivate {
  4. const ui64 WORD_MASK[] = {
  5. 0x0000000000000000ULL,
  6. 0x0000000000000001ULL,
  7. 0x0000000000000003ULL,
  8. 0x0000000000000007ULL,
  9. 0x000000000000000FULL,
  10. 0x000000000000001FULL,
  11. 0x000000000000003FULL,
  12. 0x000000000000007FULL,
  13. 0x00000000000000FFULL,
  14. 0x00000000000001FFULL,
  15. 0x00000000000003FFULL,
  16. 0x00000000000007FFULL,
  17. 0x0000000000000FFFULL,
  18. 0x0000000000001FFFULL,
  19. 0x0000000000003FFFULL,
  20. 0x0000000000007FFFULL,
  21. 0x000000000000FFFFULL,
  22. 0x000000000001FFFFULL,
  23. 0x000000000003FFFFULL,
  24. 0x000000000007FFFFULL,
  25. 0x00000000000FFFFFULL,
  26. 0x00000000001FFFFFULL,
  27. 0x00000000003FFFFFULL,
  28. 0x00000000007FFFFFULL,
  29. 0x0000000000FFFFFFULL,
  30. 0x0000000001FFFFFFULL,
  31. 0x0000000003FFFFFFULL,
  32. 0x0000000007FFFFFFULL,
  33. 0x000000000FFFFFFFULL,
  34. 0x000000001FFFFFFFULL,
  35. 0x000000003FFFFFFFULL,
  36. 0x000000007FFFFFFFULL,
  37. 0x00000000FFFFFFFFULL,
  38. 0x00000001FFFFFFFFULL,
  39. 0x00000003FFFFFFFFULL,
  40. 0x00000007FFFFFFFFULL,
  41. 0x0000000FFFFFFFFFULL,
  42. 0x0000001FFFFFFFFFULL,
  43. 0x0000003FFFFFFFFFULL,
  44. 0x0000007FFFFFFFFFULL,
  45. 0x000000FFFFFFFFFFULL,
  46. 0x000001FFFFFFFFFFULL,
  47. 0x000003FFFFFFFFFFULL,
  48. 0x000007FFFFFFFFFFULL,
  49. 0x00000FFFFFFFFFFFULL,
  50. 0x00001FFFFFFFFFFFULL,
  51. 0x00003FFFFFFFFFFFULL,
  52. 0x00007FFFFFFFFFFFULL,
  53. 0x0000FFFFFFFFFFFFULL,
  54. 0x0001FFFFFFFFFFFFULL,
  55. 0x0003FFFFFFFFFFFFULL,
  56. 0x0007FFFFFFFFFFFFULL,
  57. 0x000FFFFFFFFFFFFFULL,
  58. 0x001FFFFFFFFFFFFFULL,
  59. 0x003FFFFFFFFFFFFFULL,
  60. 0x007FFFFFFFFFFFFFULL,
  61. 0x00FFFFFFFFFFFFFFULL,
  62. 0x01FFFFFFFFFFFFFFULL,
  63. 0x03FFFFFFFFFFFFFFULL,
  64. 0x07FFFFFFFFFFFFFFULL,
  65. 0x0FFFFFFFFFFFFFFFULL,
  66. 0x1FFFFFFFFFFFFFFFULL,
  67. 0x3FFFFFFFFFFFFFFFULL,
  68. 0x7FFFFFFFFFFFFFFFULL,
  69. 0xFFFFFFFFFFFFFFFFULL,
  70. };
  71. const ui64 INVERSE_WORD_MASK[] = {
  72. ~0x0000000000000000ULL,
  73. ~0x0000000000000001ULL,
  74. ~0x0000000000000003ULL,
  75. ~0x0000000000000007ULL,
  76. ~0x000000000000000FULL,
  77. ~0x000000000000001FULL,
  78. ~0x000000000000003FULL,
  79. ~0x000000000000007FULL,
  80. ~0x00000000000000FFULL,
  81. ~0x00000000000001FFULL,
  82. ~0x00000000000003FFULL,
  83. ~0x00000000000007FFULL,
  84. ~0x0000000000000FFFULL,
  85. ~0x0000000000001FFFULL,
  86. ~0x0000000000003FFFULL,
  87. ~0x0000000000007FFFULL,
  88. ~0x000000000000FFFFULL,
  89. ~0x000000000001FFFFULL,
  90. ~0x000000000003FFFFULL,
  91. ~0x000000000007FFFFULL,
  92. ~0x00000000000FFFFFULL,
  93. ~0x00000000001FFFFFULL,
  94. ~0x00000000003FFFFFULL,
  95. ~0x00000000007FFFFFULL,
  96. ~0x0000000000FFFFFFULL,
  97. ~0x0000000001FFFFFFULL,
  98. ~0x0000000003FFFFFFULL,
  99. ~0x0000000007FFFFFFULL,
  100. ~0x000000000FFFFFFFULL,
  101. ~0x000000001FFFFFFFULL,
  102. ~0x000000003FFFFFFFULL,
  103. ~0x000000007FFFFFFFULL,
  104. ~0x00000000FFFFFFFFULL,
  105. ~0x00000001FFFFFFFFULL,
  106. ~0x00000003FFFFFFFFULL,
  107. ~0x00000007FFFFFFFFULL,
  108. ~0x0000000FFFFFFFFFULL,
  109. ~0x0000001FFFFFFFFFULL,
  110. ~0x0000003FFFFFFFFFULL,
  111. ~0x0000007FFFFFFFFFULL,
  112. ~0x000000FFFFFFFFFFULL,
  113. ~0x000001FFFFFFFFFFULL,
  114. ~0x000003FFFFFFFFFFULL,
  115. ~0x000007FFFFFFFFFFULL,
  116. ~0x00000FFFFFFFFFFFULL,
  117. ~0x00001FFFFFFFFFFFULL,
  118. ~0x00003FFFFFFFFFFFULL,
  119. ~0x00007FFFFFFFFFFFULL,
  120. ~0x0000FFFFFFFFFFFFULL,
  121. ~0x0001FFFFFFFFFFFFULL,
  122. ~0x0003FFFFFFFFFFFFULL,
  123. ~0x0007FFFFFFFFFFFFULL,
  124. ~0x000FFFFFFFFFFFFFULL,
  125. ~0x001FFFFFFFFFFFFFULL,
  126. ~0x003FFFFFFFFFFFFFULL,
  127. ~0x007FFFFFFFFFFFFFULL,
  128. ~0x00FFFFFFFFFFFFFFULL,
  129. ~0x01FFFFFFFFFFFFFFULL,
  130. ~0x03FFFFFFFFFFFFFFULL,
  131. ~0x07FFFFFFFFFFFFFFULL,
  132. ~0x0FFFFFFFFFFFFFFFULL,
  133. ~0x1FFFFFFFFFFFFFFFULL,
  134. ~0x3FFFFFFFFFFFFFFFULL,
  135. ~0x7FFFFFFFFFFFFFFFULL,
  136. ~0xFFFFFFFFFFFFFFFFULL,
  137. };
  138. } // namespace NPrivate
  139. } // namespace NBitOps