|
|
|
@ -61,6 +61,7 @@ namespace protobuf { |
|
|
|
|
} |
|
|
|
|
namespace internal { |
|
|
|
|
class FieldSkipper; // wire_format_lite.h
|
|
|
|
|
class RepeatedPtrFieldBase; // repeated_field.h
|
|
|
|
|
} |
|
|
|
|
template <typename Element> class RepeatedField; // repeated_field.h
|
|
|
|
|
template <typename Element> class RepeatedPtrField; // repeated_field.h
|
|
|
|
@ -388,6 +389,15 @@ class LIBPROTOBUF_EXPORT ExtensionSet { |
|
|
|
|
const MessageLite* containing_type, |
|
|
|
|
FieldSkipper* field_skipper); |
|
|
|
|
|
|
|
|
|
// Hack: RepeatedPtrFieldBase declares ExtensionSet as a friend. This
|
|
|
|
|
// friendship should automatically extend to ExtensionSet::Extension, but
|
|
|
|
|
// unfortunately some older compilers (e.g. GCC 3.4.4) do not implement this
|
|
|
|
|
// correctly. So, we must provide helpers for calling methods of that
|
|
|
|
|
// class.
|
|
|
|
|
|
|
|
|
|
// Defined in extension_set_heavy.cc.
|
|
|
|
|
static inline int RepeatedMessage_SpaceUsedExcludingSelf( |
|
|
|
|
RepeatedPtrFieldBase* field); |
|
|
|
|
|
|
|
|
|
// The Extension struct is small enough to be passed by value, so we use it
|
|
|
|
|
// directly as the value type in the map rather than use pointers. We use
|
|
|
|
|