18 #include "absl/base/internal/raw_logging.h"
19 #include "absl/container/internal/layout.h"
20 #include "benchmark/benchmark.h"
24 namespace container_internal {
32 template <
size_t Offset,
class... Ts>
39 template <
size_t Offset,
class... Ts>
41 using L = Layout<Ts...>;
49 template <
class... Ts>
50 size_t VariableOffset(
size_t n,
size_t m,
size_t k);
53 size_t VariableOffset<int8_t, int16_t, int32_t, Int128>(
size_t n,
size_t m,
55 auto Align = [](
size_t n,
size_t m) {
return (n +
m - 1) & ~(
m - 1); };
60 size_t VariableOffset<Int128, int32_t, int16_t, int8_t>(
size_t n,
size_t m,
63 return n * 16 +
m * 4 +
k * 2;
67 template <
size_t Offset,
class... Ts>
81 template <
size_t Offset,
class... Ts>
83 using L = Layout<Ts...>;
102 #define OFFSET_BENCHMARK(NAME, OFFSET, T1, T2, T3, T4) \
103 auto& NAME##_##OFFSET##_##T1##_##T2##_##T3##_##T4 = \
104 NAME<OFFSET, T1, T2, T3, T4>; \
105 BENCHMARK(NAME##_##OFFSET##_##T1##_##T2##_##T3##_##T4)