aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/google/protobuf
diff options
context:
space:
mode:
authorGravatar Peter Kasting <pkasting@google.com>2015-08-27 14:37:18 -0700
committerGravatar Peter Kasting <pkasting@google.com>2015-08-27 14:37:18 -0700
commitb913cbd3073826ea113efe917d4d3ce71b92ab2d (patch)
tree31077f8e1e3cf7488d8e40df568d958b3b8348c5 /src/google/protobuf
parentc7a1f8ec3b7ab4f6763e4d5c2663ad39e13a6aa0 (diff)
Move StringSpaceUsedIncludingSelf to lite library.
This came up because Chromium downstream modifies the lite library in a way that requires this function, but I'm upstreaming it because based on the comments in repeated_field.h, this ought to allow resolution of an existing hack. I don't know enough about the protobuf code to feel confident trying to resolve this hack myself, so I've merely updated the TODO comments.
Diffstat (limited to 'src/google/protobuf')
-rw-r--r--src/google/protobuf/generated_message_reflection.cc12
-rw-r--r--src/google/protobuf/generated_message_util.cc12
-rw-r--r--src/google/protobuf/generated_message_util.h6
-rw-r--r--src/google/protobuf/repeated_field.h3
4 files changed, 14 insertions, 19 deletions
diff --git a/src/google/protobuf/generated_message_reflection.cc b/src/google/protobuf/generated_message_reflection.cc
index 412c48a1..0b01e73a 100644
--- a/src/google/protobuf/generated_message_reflection.cc
+++ b/src/google/protobuf/generated_message_reflection.cc
@@ -57,18 +57,6 @@ bool IsMapFieldInApi(const FieldDescriptor* field) {
}
} // anonymous namespace
-int StringSpaceUsedExcludingSelf(const string& str) {
- const void* start = &str;
- const void* end = &str + 1;
-
- if (start <= str.data() && str.data() < end) {
- // The string's data is stored inside the string object itself.
- return 0;
- } else {
- return str.capacity();
- }
-}
-
bool ParseNamedEnum(const EnumDescriptor* descriptor,
const string& name,
int* value) {
diff --git a/src/google/protobuf/generated_message_util.cc b/src/google/protobuf/generated_message_util.cc
index 53cae8b5..afaca2ee 100644
--- a/src/google/protobuf/generated_message_util.cc
+++ b/src/google/protobuf/generated_message_util.cc
@@ -60,6 +60,18 @@ void InitEmptyString() {
OnShutdown(&DeleteEmptyString);
}
+int StringSpaceUsedExcludingSelf(const string& str) {
+ const void* start = &str;
+ const void* end = &str + 1;
+
+ if (start <= str.data() && str.data() < end) {
+ // The string's data is stored inside the string object itself.
+ return 0;
+ } else {
+ return str.capacity();
+ }
+}
+
} // namespace internal
} // namespace protobuf
diff --git a/src/google/protobuf/generated_message_util.h b/src/google/protobuf/generated_message_util.h
index 6357e27d..78c8d7ff 100644
--- a/src/google/protobuf/generated_message_util.h
+++ b/src/google/protobuf/generated_message_util.h
@@ -89,12 +89,6 @@ LIBPROTOBUF_EXPORT inline const ::std::string& GetEmptyString() {
return GetEmptyStringAlreadyInited();
}
-// Defined in generated_message_reflection.cc -- not actually part of the lite
-// library.
-//
-// TODO(jasonh): The various callers get this declaration from a variety of
-// places: probably in most cases repeated_field.h. Clean these up so they all
-// get the declaration from this file.
LIBPROTOBUF_EXPORT int StringSpaceUsedExcludingSelf(const string& str);
diff --git a/src/google/protobuf/repeated_field.h b/src/google/protobuf/repeated_field.h
index 9c84ed98..2ba5dfd5 100644
--- a/src/google/protobuf/repeated_field.h
+++ b/src/google/protobuf/repeated_field.h
@@ -647,7 +647,8 @@ inline const Message& GenericTypeHandler<Message>::default_instance() {
// StringTypeHandler is exported. So, we factor out StringTypeHandlerBase,
// export that, then make StringTypeHandler be a subclass which is NOT
// exported.
-// TODO(kenton): There has to be a better way.
+// TODO(kenton): Now that StringSpaceUsedExcludingSelf() is in the lite
+// library, this can be cleaned up.
class LIBPROTOBUF_EXPORT StringTypeHandlerBase {
public:
typedef string Type;