| 49 | } |
| 50 | |
| 51 | std::array<uint8_t, 3> decode_quad(char a, char b, char c, char d) { |
| 52 | constexpr uint32_t BYTE_MASK = 0xff; |
| 53 | const uint32_t concat_bytes = (decode_table[a] << 18) | |
| 54 | (decode_table[b] << 12) | (decode_table[c] << 6) | decode_table[d]; |
| 55 | const uint8_t x = (concat_bytes >> 16) & BYTE_MASK; |
| 56 | const uint8_t y = (concat_bytes >> 8) & BYTE_MASK; |
| 57 | const uint8_t z = concat_bytes & BYTE_MASK; |
| 58 | return {x, y, z}; |
| 59 | } |
| 60 | |
| 61 | inline bool is_valid_base64_char(char c) { |
| 62 | return decode_table[c] != 0x64; |