diff options
author | Peter Kasting <pkasting@google.com> | 2015-08-27 14:37:18 -0700 |
---|---|---|
committer | Peter Kasting <pkasting@google.com> | 2015-08-27 14:37:18 -0700 |
commit | b913cbd3073826ea113efe917d4d3ce71b92ab2d (patch) | |
tree | 31077f8e1e3cf7488d8e40df568d958b3b8348c5 /src/google/protobuf/generated_message_util.cc | |
parent | c7a1f8ec3b7ab4f6763e4d5c2663ad39e13a6aa0 (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.cc | 12 |
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 |