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.
This commit is contained in:
parent
c7a1f8ec3b
commit
b913cbd307
4 changed files with 14 additions and 19 deletions
|
@ -57,18 +57,6 @@ bool IsMapFieldInApi(const FieldDescriptor* field) {
|
||||||
}
|
}
|
||||||
} // anonymous namespace
|
} // 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,
|
bool ParseNamedEnum(const EnumDescriptor* descriptor,
|
||||||
const string& name,
|
const string& name,
|
||||||
int* value) {
|
int* value) {
|
||||||
|
|
|
@ -60,6 +60,18 @@ void InitEmptyString() {
|
||||||
OnShutdown(&DeleteEmptyString);
|
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 internal
|
||||||
} // namespace protobuf
|
} // namespace protobuf
|
||||||
|
|
|
@ -89,12 +89,6 @@ LIBPROTOBUF_EXPORT inline const ::std::string& GetEmptyString() {
|
||||||
return GetEmptyStringAlreadyInited();
|
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);
|
LIBPROTOBUF_EXPORT int StringSpaceUsedExcludingSelf(const string& str);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -647,7 +647,8 @@ inline const Message& GenericTypeHandler<Message>::default_instance() {
|
||||||
// StringTypeHandler is exported. So, we factor out StringTypeHandlerBase,
|
// StringTypeHandler is exported. So, we factor out StringTypeHandlerBase,
|
||||||
// export that, then make StringTypeHandler be a subclass which is NOT
|
// export that, then make StringTypeHandler be a subclass which is NOT
|
||||||
// exported.
|
// 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 {
|
class LIBPROTOBUF_EXPORT StringTypeHandlerBase {
|
||||||
public:
|
public:
|
||||||
typedef string Type;
|
typedef string Type;
|
||||||
|
|
Loading…
Add table
Reference in a new issue