Main Page
+
Namespaces
Namespace List
+
Namespace Members
+
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
y
z
+
Functions
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
y
z
+
Variables
c
d
e
f
g
i
k
l
m
n
o
r
s
t
z
+
Typedefs
a
c
d
e
f
g
h
i
l
m
n
p
r
s
t
u
v
w
y
z
Enumerations
+
Enumerator
k
l
p
s
+
Classes
Class List
Class Hierarchy
+
Class Members
+
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
+
Functions
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
~
+
Variables
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
y
z
+
Typedefs
a
b
c
d
e
f
h
i
k
l
m
n
o
p
r
s
t
u
v
Enumerations
+
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
x
z
+
Related Functions
a
b
c
e
f
h
i
m
o
p
r
s
t
u
v
w
+
Files
File List
+
File Members
+
All
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
x
+
Functions
_
a
c
g
m
n
r
s
t
v
+
Variables
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
v
Typedefs
Enumerations
Enumerator
+
Macros
_
a
c
d
e
f
g
h
i
l
n
p
r
s
t
u
x
abseil_cpp
absl
strings
internal
char_map_benchmark.cc
Go to the documentation of this file.
1
// Copyright 2017 The Abseil Authors.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
// https://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#include "
absl/strings/internal/char_map.h
"
16
17
#include <cstdint>
18
19
#include "benchmark/benchmark.h"
20
21
namespace
{
22
23
absl::strings_internal::Charmap
MakeBenchmarkMap() {
24
absl::strings_internal::Charmap
m;
25
uint32_t x[] = {0x0, 0x1, 0x2, 0x3, 0xf, 0xe, 0xd, 0xc};
26
for
(uint32_t& t : x) t *=
static_cast<
uint32_t
>
(0x11111111UL);
27
for
(uint32_t
i
= 0;
i
< 256; ++
i
) {
28
if
((x[
i
/ 32] >> (
i
% 32)) & 1)
29
m = m |
absl::strings_internal::Charmap::Char
(
i
);
30
}
31
return
m;
32
}
33
34
// Micro-benchmark for Charmap::contains.
35
void
BM_Contains(benchmark::State& state) {
36
// Loop-body replicated 10 times to increase time per iteration.
37
// Argument continuously changed to avoid generating common subexpressions.
38
const
absl::strings_internal::Charmap
benchmark_map = MakeBenchmarkMap();
39
unsigned
char
c = 0;
40
int
ops = 0;
41
for
(
auto
_ : state) {
42
ops += benchmark_map.
contains
(c++);
43
ops += benchmark_map.
contains
(c++);
44
ops += benchmark_map.
contains
(c++);
45
ops += benchmark_map.
contains
(c++);
46
ops += benchmark_map.
contains
(c++);
47
ops += benchmark_map.
contains
(c++);
48
ops += benchmark_map.
contains
(c++);
49
ops += benchmark_map.
contains
(c++);
50
ops += benchmark_map.
contains
(c++);
51
ops += benchmark_map.
contains
(c++);
52
}
53
benchmark::DoNotOptimize(ops);
54
}
55
BENCHMARK(BM_Contains);
56
57
// We don't bother benchmarking Charmap::IsZero or Charmap::IntersectsWith;
58
// their running time is data-dependent and it is not worth characterizing
59
// "typical" data.
60
61
}
// namespace
absl::strings_internal::Charmap::Char
static constexpr Charmap Char(char x)
Definition:
char_map.h:69
i
int i
Definition:
exception_safety_testing_test.cc:642
absl::strings_internal::Charmap::contains
constexpr bool contains(unsigned char c) const
Definition:
char_map.h:49
char_map.h
absl::strings_internal::Charmap
Definition:
char_map.h:33
abseil_cpp
Author(s):
autogenerated on Mon Feb 28 2022 21:31:17