aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/google/protobuf/generated_message_util.cc
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/generated_message_util.cc
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/generated_message_util.cc')
-rw-r--r--src/google/protobuf/generated_message_util.cc12
1 files changed, 12 insertions, 0 deletions
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