19 void add(std::span<const std::byte> bytes) {
20 std::size_t index = 0;
21 for (; index + kLaneCount <= bytes.size(); index += kLaneCount) {
22 ++partial_[0][std::to_integer<std::uint8_t>(bytes[index])];
23 ++partial_[1][std::to_integer<std::uint8_t>(bytes[index + 1])];
24 ++partial_[2][std::to_integer<std::uint8_t>(bytes[index + 2])];
25 ++partial_[3][std::to_integer<std::uint8_t>(bytes[index + 3])];
27 for (; index < bytes.size(); ++index) {
28 ++partial_[index & (kLaneCount - 1)]
29 [std::to_integer<std::uint8_t>(bytes[index])];
34 std::array<std::size_t, 256>
counts()
const {
35 std::array<std::size_t, 256> result{};
36 for (std::size_t symbol = 0; symbol < result.size(); ++symbol) {
37 for (
const auto& lane : partial_) {
38 result[symbol] += lane[symbol];