| 137 | } |
| 138 | |
| 139 | static auto mask_bytes_table() |
| 140 | -> const std::array<std::array<std::array<unsigned, TtBytes>, DDS_SUITS>, 8192>& |
| 141 | { |
| 142 | static const auto table = []{ |
| 143 | std::array<std::array<std::array<unsigned, TtBytes>, DDS_SUITS>, 8192> m{}; |
| 144 | unsigned int top_bit_rank = 1; |
| 145 | unsigned winMask[8192]; |
| 146 | winMask[0] = 0; |
| 147 | for (unsigned ind = 1; ind < 8192; ind++) { |
| 148 | if (ind >= (top_bit_rank + top_bit_rank)) /* Next top bit */ |
| 149 | top_bit_rank <<= 1; |
| 150 | winMask[ind] = (winMask[ind ^ top_bit_rank] >> 2) | (3 << 24); |
| 151 | |
| 152 | m[ind][0][0] = (winMask[ind] << 6) & 0xff000000; |
| 153 | m[ind][0][1] = (winMask[ind] << 14) & 0xff000000; |
| 154 | m[ind][0][2] = (winMask[ind] << 22) & 0xff000000; |
| 155 | m[ind][0][3] = (winMask[ind] << 30) & 0xff000000; |
| 156 | |
| 157 | m[ind][1][0] = (winMask[ind] >> 2) & 0x00ff0000; |
| 158 | m[ind][1][1] = (winMask[ind] << 6) & 0x00ff0000; |
| 159 | m[ind][1][2] = (winMask[ind] << 14) & 0x00ff0000; |
| 160 | m[ind][1][3] = (winMask[ind] << 22) & 0x00ff0000; |
| 161 | |
| 162 | m[ind][2][0] = (winMask[ind] >> 10) & 0x0000ff00; |
| 163 | m[ind][2][1] = (winMask[ind] >> 2) & 0x0000ff00; |
| 164 | m[ind][2][2] = (winMask[ind] << 6) & 0x0000ff00; |
| 165 | m[ind][2][3] = (winMask[ind] << 14) & 0x0000ff00; |
| 166 | |
| 167 | m[ind][3][0] = (winMask[ind] >> 18) & 0x000000ff; |
| 168 | m[ind][3][1] = (winMask[ind] >> 10) & 0x000000ff; |
| 169 | m[ind][3][2] = (winMask[ind] >> 2) & 0x000000ff; |
| 170 | m[ind][3][3] = (winMask[ind] << 6) & 0x000000ff; |
| 171 | } |
| 172 | return m; |
| 173 | }(); |
| 174 | return table; |
| 175 | } |
| 176 | |
| 177 | static auto players() -> const std::array<std::string, 4>& |
| 178 | { |
no outgoing calls
no test coverage detected