Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
protobuf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
protobuf
Commits
69ac02a2
Commit
69ac02a2
authored
Aug 28, 2015
by
Feng Xiao
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #771 from pkasting/static_init_1
Remove a static initializer by removing a global of non-POD type.
parents
67946e98
4f3bead5
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
78 additions
and
63 deletions
+78
-63
extension_set.cc
src/google/protobuf/extension_set.cc
+55
-54
extension_set.h
src/google/protobuf/extension_set.h
+23
-9
No files found.
src/google/protobuf/extension_set.cc
View file @
69ac02a2
...
@@ -34,7 +34,6 @@
...
@@ -34,7 +34,6 @@
#include <google/protobuf/stubs/hash.h>
#include <google/protobuf/stubs/hash.h>
#include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/once.h>
#include <google/protobuf/extension_set.h>
#include <google/protobuf/extension_set.h>
#include <google/protobuf/message_lite.h>
#include <google/protobuf/message_lite.h>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/io/coded_stream.h>
...
@@ -1747,66 +1746,68 @@ void ExtensionSet::Extension::Free() {
...
@@ -1747,66 +1746,68 @@ void ExtensionSet::Extension::Free() {
// ==================================================================
// ==================================================================
// Default repeated field instances for iterator-compatible accessors
// Default repeated field instances for iterator-compatible accessors
const
RepeatedStringTypeTraits
::
RepeatedFieldType
*
GOOGLE_PROTOBUF_DECLARE_ONCE
(
repeated_primitive_generic_type_traits_once_init_
);
RepeatedStringTypeTraits
::
default_repeated_field_
=
NULL
;
GOOGLE_PROTOBUF_DECLARE_ONCE
(
repeated_string_type_traits_once_init_
);
GOOGLE_PROTOBUF_DECLARE_ONCE
(
repeated_message_generic_type_traits_once_init_
);
const
RepeatedMessageGenericTypeTraits
::
RepeatedFieldType
*
void
RepeatedPrimitiveGenericTypeTraits
::
InitializeDefaultRepeatedFields
()
{
RepeatedMessageGenericTypeTraits
::
default_repeated_field_
=
NULL
;
default_repeated_field_int32_
=
new
RepeatedField
<
int32
>
;
default_repeated_field_int64_
=
new
RepeatedField
<
int64
>
;
default_repeated_field_uint32_
=
new
RepeatedField
<
uint32
>
;
default_repeated_field_uint64_
=
new
RepeatedField
<
uint64
>
;
default_repeated_field_double_
=
new
RepeatedField
<
double
>
;
default_repeated_field_float_
=
new
RepeatedField
<
float
>
;
default_repeated_field_bool_
=
new
RepeatedField
<
bool
>
;
OnShutdown
(
&
DestroyDefaultRepeatedFields
);
}
void
RepeatedPrimitiveGenericTypeTraits
::
DestroyDefaultRepeatedFields
()
{
delete
default_repeated_field_int32_
;
delete
default_repeated_field_int64_
;
delete
default_repeated_field_uint32_
;
delete
default_repeated_field_uint64_
;
delete
default_repeated_field_double_
;
delete
default_repeated_field_float_
;
delete
default_repeated_field_bool_
;
}
#define PROTOBUF_DEFINE_DEFAULT_REPEATED(TYPE) \
void
RepeatedStringTypeTraits
::
InitializeDefaultRepeatedFields
()
{
const RepeatedField<TYPE>* \
default_repeated_field_
=
new
RepeatedFieldType
;
RepeatedPrimitiveGenericTypeTraits::default_repeated_field_##TYPE##_ = NULL;
OnShutdown
(
&
DestroyDefaultRepeatedFields
);
}
PROTOBUF_DEFINE_DEFAULT_REPEATED
(
int32
)
void
RepeatedStringTypeTraits
::
DestroyDefaultRepeatedFields
()
{
PROTOBUF_DEFINE_DEFAULT_REPEATED
(
int64
)
delete
default_repeated_field_
;
PROTOBUF_DEFINE_DEFAULT_REPEATED
(
uint32
)
}
PROTOBUF_DEFINE_DEFAULT_REPEATED
(
uint64
)
PROTOBUF_DEFINE_DEFAULT_REPEATED
(
double
)
PROTOBUF_DEFINE_DEFAULT_REPEATED
(
float
)
PROTOBUF_DEFINE_DEFAULT_REPEATED
(
bool
)
#undef PROTOBUF_DEFINE_DEFAULT_REPEATED
void
RepeatedMessageGenericTypeTraits
::
InitializeDefaultRepeatedFields
()
{
default_repeated_field_
=
new
RepeatedFieldType
;
OnShutdown
(
&
DestroyDefaultRepeatedFields
);
}
struct
StaticDefaultRepeatedFieldsInitializer
{
void
RepeatedMessageGenericTypeTraits
::
DestroyDefaultRepeatedFields
()
{
StaticDefaultRepeatedFieldsInitializer
()
{
delete
default_repeated_field_
;
InitializeDefaultRepeatedFields
();
OnShutdown
(
&
DestroyDefaultRepeatedFields
);
}
}
static_repeated_fields_initializer
;
void
InitializeDefaultRepeatedFields
()
{
RepeatedStringTypeTraits
::
default_repeated_field_
=
new
RepeatedStringTypeTraits
::
RepeatedFieldType
;
RepeatedMessageGenericTypeTraits
::
default_repeated_field_
=
new
RepeatedMessageGenericTypeTraits
::
RepeatedFieldType
;
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_int32_
=
new
RepeatedField
<
int32
>
;
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_int64_
=
new
RepeatedField
<
int64
>
;
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_uint32_
=
new
RepeatedField
<
uint32
>
;
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_uint64_
=
new
RepeatedField
<
uint64
>
;
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_double_
=
new
RepeatedField
<
double
>
;
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_float_
=
new
RepeatedField
<
float
>
;
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_bool_
=
new
RepeatedField
<
bool
>
;
}
void
DestroyDefaultRepeatedFields
()
{
delete
RepeatedStringTypeTraits
::
default_repeated_field_
;
delete
RepeatedMessageGenericTypeTraits
::
default_repeated_field_
;
delete
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_int32_
;
delete
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_int64_
;
delete
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_uint32_
;
delete
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_uint64_
;
delete
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_double_
;
delete
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_float_
;
delete
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_bool_
;
}
}
const
RepeatedField
<
int32
>*
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_int32_
=
NULL
;
const
RepeatedField
<
int64
>*
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_int64_
=
NULL
;
const
RepeatedField
<
uint32
>*
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_uint32_
=
NULL
;
const
RepeatedField
<
uint64
>*
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_uint64_
=
NULL
;
const
RepeatedField
<
double
>*
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_double_
=
NULL
;
const
RepeatedField
<
float
>*
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_float_
=
NULL
;
const
RepeatedField
<
bool
>*
RepeatedPrimitiveGenericTypeTraits
::
default_repeated_field_bool_
=
NULL
;
const
RepeatedStringTypeTraits
::
RepeatedFieldType
*
RepeatedStringTypeTraits
::
default_repeated_field_
=
NULL
;
const
RepeatedMessageGenericTypeTraits
::
RepeatedFieldType
*
RepeatedMessageGenericTypeTraits
::
default_repeated_field_
=
NULL
;
}
// namespace internal
}
// namespace internal
}
// namespace protobuf
}
// namespace protobuf
}
// namespace google
}
// namespace google
src/google/protobuf/extension_set.h
View file @
69ac02a2
...
@@ -45,6 +45,7 @@
...
@@ -45,6 +45,7 @@
#include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/once.h>
#include <google/protobuf/repeated_field.h>
#include <google/protobuf/repeated_field.h>
...
@@ -716,15 +717,14 @@ class RepeatedPrimitiveTypeTraits {
...
@@ -716,15 +717,14 @@ class RepeatedPrimitiveTypeTraits {
static
const
RepeatedFieldType
*
GetDefaultRepeatedField
();
static
const
RepeatedFieldType
*
GetDefaultRepeatedField
();
};
};
// Declared here so that this can be friended below.
LIBPROTOBUF_EXPORT
extern
ProtobufOnceType
void
InitializeDefaultRepeatedFields
();
repeated_primitive_generic_type_traits_once_init_
;
void
DestroyDefaultRepeatedFields
();
class
LIBPROTOBUF_EXPORT
RepeatedPrimitiveGenericTypeTraits
{
class
LIBPROTOBUF_EXPORT
RepeatedPrimitiveGenericTypeTraits
{
private
:
private
:
template
<
typename
Type
>
friend
class
RepeatedPrimitiveTypeTraits
;
template
<
typename
Type
>
friend
class
RepeatedPrimitiveTypeTraits
;
friend
void
InitializeDefaultRepeatedFields
();
static
void
InitializeDefaultRepeatedFields
();
friend
void
DestroyDefaultRepeatedFields
();
static
void
DestroyDefaultRepeatedFields
();
static
const
RepeatedField
<
int32
>*
default_repeated_field_int32_
;
static
const
RepeatedField
<
int32
>*
default_repeated_field_int32_
;
static
const
RepeatedField
<
int64
>*
default_repeated_field_int64_
;
static
const
RepeatedField
<
int64
>*
default_repeated_field_int64_
;
static
const
RepeatedField
<
uint32
>*
default_repeated_field_uint32_
;
static
const
RepeatedField
<
uint32
>*
default_repeated_field_uint32_
;
...
@@ -759,6 +759,9 @@ template<> inline void RepeatedPrimitiveTypeTraits<TYPE>::Add( \
...
@@ -759,6 +759,9 @@ template<> inline void RepeatedPrimitiveTypeTraits<TYPE>::Add( \
} \
} \
template<> inline const RepeatedField<TYPE>* \
template<> inline const RepeatedField<TYPE>* \
RepeatedPrimitiveTypeTraits<TYPE>::GetDefaultRepeatedField() { \
RepeatedPrimitiveTypeTraits<TYPE>::GetDefaultRepeatedField() { \
GoogleOnceInit( \
&repeated_primitive_generic_type_traits_once_init_, \
&RepeatedPrimitiveGenericTypeTraits::InitializeDefaultRepeatedFields); \
return RepeatedPrimitiveGenericTypeTraits:: \
return RepeatedPrimitiveGenericTypeTraits:: \
default_repeated_field_##TYPE##_; \
default_repeated_field_##TYPE##_; \
} \
} \
...
@@ -812,6 +815,9 @@ class LIBPROTOBUF_EXPORT StringTypeTraits {
...
@@ -812,6 +815,9 @@ class LIBPROTOBUF_EXPORT StringTypeTraits {
}
}
};
};
LIBPROTOBUF_EXPORT
extern
ProtobufOnceType
repeated_string_type_traits_once_init_
;
class
LIBPROTOBUF_EXPORT
RepeatedStringTypeTraits
{
class
LIBPROTOBUF_EXPORT
RepeatedStringTypeTraits
{
public
:
public
:
typedef
const
string
&
ConstType
;
typedef
const
string
&
ConstType
;
...
@@ -855,12 +861,14 @@ class LIBPROTOBUF_EXPORT RepeatedStringTypeTraits {
...
@@ -855,12 +861,14 @@ class LIBPROTOBUF_EXPORT RepeatedStringTypeTraits {
}
}
static
const
RepeatedFieldType
*
GetDefaultRepeatedField
()
{
static
const
RepeatedFieldType
*
GetDefaultRepeatedField
()
{
GoogleOnceInit
(
&
repeated_string_type_traits_once_init_
,
&
InitializeDefaultRepeatedFields
);
return
default_repeated_field_
;
return
default_repeated_field_
;
}
}
private
:
private
:
friend
void
InitializeDefaultRepeatedFields
();
static
void
InitializeDefaultRepeatedFields
();
friend
void
DestroyDefaultRepeatedFields
();
static
void
DestroyDefaultRepeatedFields
();
static
const
RepeatedFieldType
*
default_repeated_field_
;
static
const
RepeatedFieldType
*
default_repeated_field_
;
};
};
...
@@ -1019,6 +1027,9 @@ class RepeatedMessageTypeTraits {
...
@@ -1019,6 +1027,9 @@ class RepeatedMessageTypeTraits {
static
const
RepeatedFieldType
*
GetDefaultRepeatedField
();
static
const
RepeatedFieldType
*
GetDefaultRepeatedField
();
};
};
LIBPROTOBUF_EXPORT
extern
ProtobufOnceType
repeated_message_generic_type_traits_once_init_
;
// This class exists only to hold a generic default empty repeated field for all
// This class exists only to hold a generic default empty repeated field for all
// message-type repeated field extensions.
// message-type repeated field extensions.
class
LIBPROTOBUF_EXPORT
RepeatedMessageGenericTypeTraits
{
class
LIBPROTOBUF_EXPORT
RepeatedMessageGenericTypeTraits
{
...
@@ -1026,14 +1037,17 @@ class LIBPROTOBUF_EXPORT RepeatedMessageGenericTypeTraits {
...
@@ -1026,14 +1037,17 @@ class LIBPROTOBUF_EXPORT RepeatedMessageGenericTypeTraits {
typedef
RepeatedPtrField
<
::
google
::
protobuf
::
MessageLite
*>
RepeatedFieldType
;
typedef
RepeatedPtrField
<
::
google
::
protobuf
::
MessageLite
*>
RepeatedFieldType
;
private
:
private
:
template
<
typename
Type
>
friend
class
RepeatedMessageTypeTraits
;
template
<
typename
Type
>
friend
class
RepeatedMessageTypeTraits
;
friend
void
InitializeDefaultRepeatedFields
();
static
void
InitializeDefaultRepeatedFields
();
friend
void
DestroyDefaultRepeatedFields
();
static
void
DestroyDefaultRepeatedFields
();
static
const
RepeatedFieldType
*
default_repeated_field_
;
static
const
RepeatedFieldType
*
default_repeated_field_
;
};
};
template
<
typename
Type
>
inline
template
<
typename
Type
>
inline
const
typename
RepeatedMessageTypeTraits
<
Type
>::
RepeatedFieldType
*
const
typename
RepeatedMessageTypeTraits
<
Type
>::
RepeatedFieldType
*
RepeatedMessageTypeTraits
<
Type
>::
GetDefaultRepeatedField
()
{
RepeatedMessageTypeTraits
<
Type
>::
GetDefaultRepeatedField
()
{
GoogleOnceInit
(
&
repeated_message_generic_type_traits_once_init_
,
&
RepeatedMessageGenericTypeTraits
::
InitializeDefaultRepeatedFields
);
return
reinterpret_cast
<
const
RepeatedFieldType
*>
(
return
reinterpret_cast
<
const
RepeatedFieldType
*>
(
RepeatedMessageGenericTypeTraits
::
default_repeated_field_
);
RepeatedMessageGenericTypeTraits
::
default_repeated_field_
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment