Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace 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
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
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
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
y
z
Enumerations
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
r
s
t
u
v
w
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
z
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
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
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
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
y
Enumerations
a
b
c
d
e
f
h
i
k
l
m
n
o
p
r
s
t
u
v
w
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
z
Properties
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
Related Functions
:
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
q
r
s
t
u
v
w
z
Files
File List
File 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
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Variables
_
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
Typedefs
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Enumerations
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
x
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
Macros
_
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
grpc
third_party
protobuf
src
google
protobuf
explicitly_constructed.h
Go to the documentation of this file.
1
// Protocol Buffers - Google's data interchange format
2
// Copyright 2008 Google Inc. All rights reserved.
3
// https://developers.google.com/protocol-buffers/
4
//
5
// Redistribution and use in source and binary forms, with or without
6
// modification, are permitted provided that the following conditions are
7
// met:
8
//
9
// * Redistributions of source code must retain the above copyright
10
// notice, this list of conditions and the following disclaimer.
11
// * Redistributions in binary form must reproduce the above
12
// copyright notice, this list of conditions and the following disclaimer
13
// in the documentation and/or other materials provided with the
14
// distribution.
15
// * Neither the name of Google Inc. nor the names of its
16
// contributors may be used to endorse or promote products derived from
17
// this software without specific prior written permission.
18
//
19
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31
#ifndef GOOGLE_PROTOBUF_EXPLICITLY_CONSTRUCTED_H__
32
#define GOOGLE_PROTOBUF_EXPLICITLY_CONSTRUCTED_H__
33
34
#include <
stdint.h
>
35
36
#include <utility>
37
38
#include <google/protobuf/stubs/logging.h>
39
#include <google/protobuf/stubs/common.h>
40
41
// clang-format off
42
#include <google/protobuf/port_def.inc>
43
// clang-format on
44
45
namespace
google
{
46
namespace
protobuf
{
47
namespace
internal
{
48
49
// Wraps a variable whose constructor and destructor are explicitly
50
// called. It is particularly useful for a global variable, without its
51
// constructor and destructor run on start and end of the program lifetime.
52
// This circumvents the initial construction order fiasco, while keeping
53
// the address of the empty string a compile time constant.
54
//
55
// Pay special attention to the initialization state of the object.
56
// 1. The object is "uninitialized" to begin with.
57
// 2. Call Construct() or DefaultConstruct() only if the object is
58
// uninitialized. After the call, the object becomes "initialized".
59
// 3. Call get() and get_mutable() only if the object is initialized.
60
// 4. Call Destruct() only if the object is initialized.
61
// After the call, the object becomes uninitialized.
62
template
<
typename
T>
63
class
ExplicitlyConstructed {
64
public
:
65
void
DefaultConstruct
() {
new
(&
union_
)
T
(); }
66
67
template
<
typename
...
Args
>
68
void
Construct
(
Args
&&...
args
) {
69
new
(&
union_
)
T
(std::forward<Args>(
args
)...);
70
}
71
72
void
Destruct
() {
get_mutable
()->~T(); }
73
74
constexpr
const
T
&
get
()
const
{
return
reinterpret_cast<
const
T
&
>
(
union_
); }
75
T
*
get_mutable
() {
return
reinterpret_cast<
T
*
>
(&
union_
); }
76
77
private
:
78
union
AlignedUnion {
79
alignas
(
T
)
char
space
[
sizeof
(
T
)];
80
int64_t
align_to_int64
;
81
void
*
align_to_ptr
;
82
}
union_
;
83
};
84
85
}
// namespace internal
86
}
// namespace protobuf
87
}
// namespace google
88
89
#include <google/protobuf/port_undef.inc>
90
91
#endif // GOOGLE_PROTOBUF_EXPLICITLY_CONSTRUCTED_H__
google::protobuf
Definition:
bloaty/third_party/protobuf/benchmarks/util/data_proto2_to_proto3_util.h:12
T
#define T(upbtypeconst, upbtype, ctype, default_value)
google::protobuf.internal::ExplicitlyConstructed::get
constexpr const T & get() const
Definition:
explicitly_constructed.h:74
google::protobuf.internal::ExplicitlyConstructed::get_mutable
T * get_mutable()
Definition:
bloaty/third_party/protobuf/src/google/protobuf/message_lite.h:136
asyncio_get_stats.args
args
Definition:
asyncio_get_stats.py:40
hpack_encoder_fixtures::Args
Args({0, 16384})
int64_t
signed __int64 int64_t
Definition:
stdint-msvc2008.h:89
google::protobuf.internal::ExplicitlyConstructed::AlignedUnion::align_to_ptr
void * align_to_ptr
Definition:
bloaty/third_party/protobuf/src/google/protobuf/message_lite.h:143
google::protobuf.internal::ExplicitlyConstructed::Construct
void Construct(Args &&... args)
Definition:
explicitly_constructed.h:68
stdint.h
google::protobuf.internal::ExplicitlyConstructed::DefaultConstruct
void DefaultConstruct()
Definition:
explicitly_constructed.h:65
google::protobuf.internal::ExplicitlyConstructed::AlignedUnion::space
char space[sizeof(T)]
Definition:
bloaty/third_party/protobuf/src/google/protobuf/message_lite.h:141
google::protobuf.internal::ExplicitlyConstructed::Destruct
void Destruct()
Definition:
explicitly_constructed.h:72
internal
Definition:
benchmark/test/output_test_helper.cc:20
google::protobuf.internal::ExplicitlyConstructed::AlignedUnion::align_to_int64
int64_t align_to_int64
Definition:
explicitly_constructed.h:80
google
Definition:
bloaty/third_party/protobuf/benchmarks/util/data_proto2_to_proto3_util.h:11
google::protobuf.internal::ExplicitlyConstructed::union_
union google::protobuf::internal::ExplicitlyConstructed::AlignedUnion union_
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:59:17