|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef GOOGLE_PROTOBUF_GENERATED_MESSAGE_REFLECTION_H__
|
|
|
#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_REFLECTION_H__
|
|
|
|
|
|
#include <string>
|
|
|
#include <vector>
|
|
|
#include <google/protobuf/stubs/casts.h>
|
|
|
#include <google/protobuf/stubs/common.h>
|
|
|
|
|
|
|
|
|
#include <google/protobuf/generated_enum_reflection.h>
|
|
|
#include <google/protobuf/message.h>
|
|
|
#include <google/protobuf/metadata.h>
|
|
|
#include <google/protobuf/unknown_field_set.h>
|
|
|
|
|
|
|
|
|
namespace google {
|
|
|
namespace upb {
|
|
|
namespace google_opensource {
|
|
|
class GMR_Handlers;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
namespace protobuf {
|
|
|
class DescriptorPool;
|
|
|
class MapKey;
|
|
|
class MapValueRef;
|
|
|
}
|
|
|
|
|
|
|
|
|
namespace protobuf {
|
|
|
namespace flat {
|
|
|
class MetadataBuilder;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
namespace protobuf {
|
|
|
namespace internal {
|
|
|
class DefaultEmptyOneof;
|
|
|
|
|
|
|
|
|
class GeneratedMessageReflection;
|
|
|
|
|
|
|
|
|
class ExtensionSet;
|
|
|
class WeakFieldMap;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct ReflectionSchema {
|
|
|
public:
|
|
|
|
|
|
uint32 GetObjectSize() const { return static_cast<uint32>(object_size_); }
|
|
|
|
|
|
|
|
|
|
|
|
uint32 GetFieldOffsetNonOneof(const FieldDescriptor* field) const {
|
|
|
GOOGLE_DCHECK(!field->containing_oneof());
|
|
|
return offsets_[field->index()];
|
|
|
}
|
|
|
|
|
|
|
|
|
uint32 GetFieldOffset(const FieldDescriptor* field) const {
|
|
|
if (field->containing_oneof()) {
|
|
|
size_t offset =
|
|
|
static_cast<size_t>(field->containing_type()->field_count() +
|
|
|
field->containing_oneof()->index());
|
|
|
return offsets_[offset];
|
|
|
} else {
|
|
|
return GetFieldOffsetNonOneof(field);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
uint32 GetOneofCaseOffset(const OneofDescriptor* oneof_descriptor) const {
|
|
|
return static_cast<uint32>(oneof_case_offset_) +
|
|
|
static_cast<uint32>(
|
|
|
static_cast<size_t>(oneof_descriptor->index()) * sizeof(uint32));
|
|
|
}
|
|
|
|
|
|
bool HasHasbits() const { return has_bits_offset_ != -1; }
|
|
|
|
|
|
|
|
|
uint32 HasBitIndex(const FieldDescriptor* field) const {
|
|
|
GOOGLE_DCHECK(HasHasbits());
|
|
|
return has_bit_indices_[field->index()];
|
|
|
}
|
|
|
|
|
|
|
|
|
uint32 HasBitsOffset() const {
|
|
|
GOOGLE_DCHECK(HasHasbits());
|
|
|
return static_cast<uint32>(has_bits_offset_);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint32 GetMetadataOffset() const {
|
|
|
return static_cast<uint32>(metadata_offset_);
|
|
|
}
|
|
|
|
|
|
|
|
|
bool HasExtensionSet() const { return extensions_offset_ != -1; }
|
|
|
|
|
|
|
|
|
uint32 GetExtensionSetOffset() const {
|
|
|
GOOGLE_DCHECK(HasExtensionSet());
|
|
|
return static_cast<uint32>(extensions_offset_);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int GetWeakFieldMapOffset() const { return weak_field_map_offset_; }
|
|
|
|
|
|
bool IsDefaultInstance(const Message& message) const {
|
|
|
return &message == default_instance_;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const void *GetFieldDefault(const FieldDescriptor* field) const {
|
|
|
return reinterpret_cast<const uint8*>(default_instance_) +
|
|
|
offsets_[field->index()];
|
|
|
}
|
|
|
|
|
|
|
|
|
bool HasWeakFields() const { return weak_field_map_offset_ > 0; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const Message* default_instance_;
|
|
|
const uint32* offsets_;
|
|
|
const uint32* has_bit_indices_;
|
|
|
int has_bits_offset_;
|
|
|
int metadata_offset_;
|
|
|
int extensions_offset_;
|
|
|
int oneof_case_offset_;
|
|
|
int object_size_;
|
|
|
int weak_field_map_offset_;
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct MigrationSchema {
|
|
|
int32 offsets_index;
|
|
|
int32 has_bit_indices_index;
|
|
|
int object_size;
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LIBPROTOBUF_EXPORT GeneratedMessageReflection PROTOBUF_FINAL : public Reflection {
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GeneratedMessageReflection(const Descriptor* descriptor,
|
|
|
const ReflectionSchema& schema,
|
|
|
const DescriptorPool* pool,
|
|
|
MessageFactory* factory);
|
|
|
|
|
|
~GeneratedMessageReflection();
|
|
|
|
|
|
|
|
|
|
|
|
const UnknownFieldSet& GetUnknownFields(const Message& message) const;
|
|
|
UnknownFieldSet* MutableUnknownFields(Message* message) const;
|
|
|
|
|
|
size_t SpaceUsedLong(const Message& message) const;
|
|
|
|
|
|
bool HasField(const Message& message, const FieldDescriptor* field) const;
|
|
|
int FieldSize(const Message& message, const FieldDescriptor* field) const;
|
|
|
void ClearField(Message* message, const FieldDescriptor* field) const;
|
|
|
bool HasOneof(const Message& message,
|
|
|
const OneofDescriptor* oneof_descriptor) const;
|
|
|
void ClearOneof(Message* message, const OneofDescriptor* field) const;
|
|
|
void RemoveLast(Message* message, const FieldDescriptor* field) const;
|
|
|
Message* ReleaseLast(Message* message, const FieldDescriptor* field) const;
|
|
|
void Swap(Message* message1, Message* message2) const;
|
|
|
void SwapFields(Message* message1, Message* message2,
|
|
|
const std::vector<const FieldDescriptor*>& fields) const;
|
|
|
void SwapElements(Message* message, const FieldDescriptor* field,
|
|
|
int index1, int index2) const;
|
|
|
void ListFields(const Message& message,
|
|
|
std::vector<const FieldDescriptor*>* output) const;
|
|
|
|
|
|
int32 GetInt32 (const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
int64 GetInt64 (const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
uint32 GetUInt32(const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
uint64 GetUInt64(const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
float GetFloat (const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
double GetDouble(const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
bool GetBool (const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
string GetString(const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
const string& GetStringReference(const Message& message,
|
|
|
const FieldDescriptor* field,
|
|
|
string* scratch) const;
|
|
|
const EnumValueDescriptor* GetEnum(const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
int GetEnumValue(const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
const Message& GetMessage(const Message& message,
|
|
|
const FieldDescriptor* field,
|
|
|
MessageFactory* factory = NULL) const;
|
|
|
|
|
|
const FieldDescriptor* GetOneofFieldDescriptor(
|
|
|
const Message& message,
|
|
|
const OneofDescriptor* oneof_descriptor) const;
|
|
|
|
|
|
private:
|
|
|
bool ContainsMapKey(const Message& message,
|
|
|
const FieldDescriptor* field,
|
|
|
const MapKey& key) const;
|
|
|
bool InsertOrLookupMapValue(Message* message,
|
|
|
const FieldDescriptor* field,
|
|
|
const MapKey& key,
|
|
|
MapValueRef* val) const;
|
|
|
bool DeleteMapValue(Message* message,
|
|
|
const FieldDescriptor* field,
|
|
|
const MapKey& key) const;
|
|
|
MapIterator MapBegin(
|
|
|
Message* message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
MapIterator MapEnd(
|
|
|
Message* message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
int MapSize(const Message& message, const FieldDescriptor* field) const;
|
|
|
|
|
|
public:
|
|
|
void SetInt32 (Message* message,
|
|
|
const FieldDescriptor* field, int32 value) const;
|
|
|
void SetInt64 (Message* message,
|
|
|
const FieldDescriptor* field, int64 value) const;
|
|
|
void SetUInt32(Message* message,
|
|
|
const FieldDescriptor* field, uint32 value) const;
|
|
|
void SetUInt64(Message* message,
|
|
|
const FieldDescriptor* field, uint64 value) const;
|
|
|
void SetFloat (Message* message,
|
|
|
const FieldDescriptor* field, float value) const;
|
|
|
void SetDouble(Message* message,
|
|
|
const FieldDescriptor* field, double value) const;
|
|
|
void SetBool (Message* message,
|
|
|
const FieldDescriptor* field, bool value) const;
|
|
|
void SetString(Message* message,
|
|
|
const FieldDescriptor* field,
|
|
|
const string& value) const;
|
|
|
void SetEnum (Message* message, const FieldDescriptor* field,
|
|
|
const EnumValueDescriptor* value) const;
|
|
|
void SetEnumValue(Message* message, const FieldDescriptor* field,
|
|
|
int value) const;
|
|
|
Message* MutableMessage(Message* message, const FieldDescriptor* field,
|
|
|
MessageFactory* factory = NULL) const;
|
|
|
void SetAllocatedMessage(Message* message,
|
|
|
Message* sub_message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
Message* ReleaseMessage(Message* message, const FieldDescriptor* field,
|
|
|
MessageFactory* factory = NULL) const;
|
|
|
|
|
|
int32 GetRepeatedInt32 (const Message& message,
|
|
|
const FieldDescriptor* field, int index) const;
|
|
|
int64 GetRepeatedInt64 (const Message& message,
|
|
|
const FieldDescriptor* field, int index) const;
|
|
|
uint32 GetRepeatedUInt32(const Message& message,
|
|
|
const FieldDescriptor* field, int index) const;
|
|
|
uint64 GetRepeatedUInt64(const Message& message,
|
|
|
const FieldDescriptor* field, int index) const;
|
|
|
float GetRepeatedFloat (const Message& message,
|
|
|
const FieldDescriptor* field, int index) const;
|
|
|
double GetRepeatedDouble(const Message& message,
|
|
|
const FieldDescriptor* field, int index) const;
|
|
|
bool GetRepeatedBool (const Message& message,
|
|
|
const FieldDescriptor* field, int index) const;
|
|
|
string GetRepeatedString(const Message& message,
|
|
|
const FieldDescriptor* field, int index) const;
|
|
|
const string& GetRepeatedStringReference(const Message& message,
|
|
|
const FieldDescriptor* field,
|
|
|
int index, string* scratch) const;
|
|
|
const EnumValueDescriptor* GetRepeatedEnum(const Message& message,
|
|
|
const FieldDescriptor* field,
|
|
|
int index) const;
|
|
|
int GetRepeatedEnumValue(const Message& message,
|
|
|
const FieldDescriptor* field,
|
|
|
int index) const;
|
|
|
const Message& GetRepeatedMessage(const Message& message,
|
|
|
const FieldDescriptor* field,
|
|
|
int index) const;
|
|
|
|
|
|
|
|
|
void SetRepeatedInt32 (Message* message,
|
|
|
const FieldDescriptor* field, int index, int32 value) const;
|
|
|
void SetRepeatedInt64 (Message* message,
|
|
|
const FieldDescriptor* field, int index, int64 value) const;
|
|
|
void SetRepeatedUInt32(Message* message,
|
|
|
const FieldDescriptor* field, int index, uint32 value) const;
|
|
|
void SetRepeatedUInt64(Message* message,
|
|
|
const FieldDescriptor* field, int index, uint64 value) const;
|
|
|
void SetRepeatedFloat (Message* message,
|
|
|
const FieldDescriptor* field, int index, float value) const;
|
|
|
void SetRepeatedDouble(Message* message,
|
|
|
const FieldDescriptor* field, int index, double value) const;
|
|
|
void SetRepeatedBool (Message* message,
|
|
|
const FieldDescriptor* field, int index, bool value) const;
|
|
|
void SetRepeatedString(Message* message,
|
|
|
const FieldDescriptor* field, int index,
|
|
|
const string& value) const;
|
|
|
void SetRepeatedEnum(Message* message, const FieldDescriptor* field,
|
|
|
int index, const EnumValueDescriptor* value) const;
|
|
|
void SetRepeatedEnumValue(Message* message, const FieldDescriptor* field,
|
|
|
int index, int value) const;
|
|
|
|
|
|
Message* MutableRepeatedMessage(Message* message,
|
|
|
const FieldDescriptor* field,
|
|
|
int index) const;
|
|
|
|
|
|
void AddInt32 (Message* message,
|
|
|
const FieldDescriptor* field, int32 value) const;
|
|
|
void AddInt64 (Message* message,
|
|
|
const FieldDescriptor* field, int64 value) const;
|
|
|
void AddUInt32(Message* message,
|
|
|
const FieldDescriptor* field, uint32 value) const;
|
|
|
void AddUInt64(Message* message,
|
|
|
const FieldDescriptor* field, uint64 value) const;
|
|
|
void AddFloat (Message* message,
|
|
|
const FieldDescriptor* field, float value) const;
|
|
|
void AddDouble(Message* message,
|
|
|
const FieldDescriptor* field, double value) const;
|
|
|
void AddBool (Message* message,
|
|
|
const FieldDescriptor* field, bool value) const;
|
|
|
void AddString(Message* message,
|
|
|
const FieldDescriptor* field, const string& value) const;
|
|
|
void AddEnum(Message* message,
|
|
|
const FieldDescriptor* field,
|
|
|
const EnumValueDescriptor* value) const;
|
|
|
void AddEnumValue(Message* message,
|
|
|
const FieldDescriptor* field,
|
|
|
int value) const;
|
|
|
Message* AddMessage(Message* message, const FieldDescriptor* field,
|
|
|
MessageFactory* factory = NULL) const;
|
|
|
void AddAllocatedMessage(
|
|
|
Message* message, const FieldDescriptor* field,
|
|
|
Message* new_entry) const;
|
|
|
|
|
|
const FieldDescriptor* FindKnownExtensionByName(const string& name) const;
|
|
|
const FieldDescriptor* FindKnownExtensionByNumber(int number) const;
|
|
|
|
|
|
bool SupportsUnknownEnumValues() const;
|
|
|
|
|
|
|
|
|
|
|
|
static const int kNoArenaPointer = -1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static const int kUnknownFieldSetInMetadata = -1;
|
|
|
|
|
|
protected:
|
|
|
void* MutableRawRepeatedField(
|
|
|
Message* message, const FieldDescriptor* field, FieldDescriptor::CppType,
|
|
|
int ctype, const Descriptor* desc) const;
|
|
|
|
|
|
const void* GetRawRepeatedField(
|
|
|
const Message& message, const FieldDescriptor* field,
|
|
|
FieldDescriptor::CppType, int ctype,
|
|
|
const Descriptor* desc) const;
|
|
|
|
|
|
virtual MessageFactory* GetMessageFactory() const;
|
|
|
|
|
|
virtual void* RepeatedFieldData(
|
|
|
Message* message, const FieldDescriptor* field,
|
|
|
FieldDescriptor::CppType cpp_type,
|
|
|
const Descriptor* message_type) const;
|
|
|
|
|
|
private:
|
|
|
friend class google::protobuf::flat::MetadataBuilder;
|
|
|
friend class upb::google_opensource::GMR_Handlers;
|
|
|
|
|
|
const Descriptor* const descriptor_;
|
|
|
const ReflectionSchema schema_;
|
|
|
const DescriptorPool* const descriptor_pool_;
|
|
|
MessageFactory* const message_factory_;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int last_non_weak_field_index_;
|
|
|
|
|
|
template <class T>
|
|
|
const T& GetRawNonOneof(const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
template <class T>
|
|
|
T* MutableRawNonOneof(Message* message, const FieldDescriptor* field) const;
|
|
|
|
|
|
template <typename Type>
|
|
|
const Type& GetRaw(const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
template <typename Type>
|
|
|
inline Type* MutableRaw(Message* message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
template <typename Type>
|
|
|
inline const Type& DefaultRaw(const FieldDescriptor* field) const;
|
|
|
|
|
|
inline const uint32* GetHasBits(const Message& message) const;
|
|
|
inline uint32* MutableHasBits(Message* message) const;
|
|
|
inline uint32 GetOneofCase(
|
|
|
const Message& message,
|
|
|
const OneofDescriptor* oneof_descriptor) const;
|
|
|
inline uint32* MutableOneofCase(
|
|
|
Message* message,
|
|
|
const OneofDescriptor* oneof_descriptor) const;
|
|
|
inline const ExtensionSet& GetExtensionSet(const Message& message) const;
|
|
|
inline ExtensionSet* MutableExtensionSet(Message* message) const;
|
|
|
inline Arena* GetArena(Message* message) const;
|
|
|
|
|
|
inline const InternalMetadataWithArena& GetInternalMetadataWithArena(
|
|
|
const Message& message) const;
|
|
|
|
|
|
inline InternalMetadataWithArena*
|
|
|
MutableInternalMetadataWithArena(Message* message) const;
|
|
|
|
|
|
inline bool HasBit(const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
inline void SetBit(Message* message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
inline void ClearBit(Message* message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
inline void SwapBit(Message* message1,
|
|
|
Message* message2,
|
|
|
const FieldDescriptor* field) const;
|
|
|
|
|
|
|
|
|
|
|
|
void SwapField(Message* message1,
|
|
|
Message* message2,
|
|
|
const FieldDescriptor* field) const;
|
|
|
|
|
|
void SwapOneofField(Message* message1,
|
|
|
Message* message2,
|
|
|
const OneofDescriptor* oneof_descriptor) const;
|
|
|
|
|
|
inline bool HasOneofField(const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
inline void SetOneofCase(Message* message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
inline void ClearOneofField(Message* message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
|
|
|
template <typename Type>
|
|
|
inline const Type& GetField(const Message& message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
template <typename Type>
|
|
|
inline void SetField(Message* message,
|
|
|
const FieldDescriptor* field, const Type& value) const;
|
|
|
template <typename Type>
|
|
|
inline Type* MutableField(Message* message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
template <typename Type>
|
|
|
inline const Type& GetRepeatedField(const Message& message,
|
|
|
const FieldDescriptor* field,
|
|
|
int index) const;
|
|
|
template <typename Type>
|
|
|
inline const Type& GetRepeatedPtrField(const Message& message,
|
|
|
const FieldDescriptor* field,
|
|
|
int index) const;
|
|
|
template <typename Type>
|
|
|
inline void SetRepeatedField(Message* message,
|
|
|
const FieldDescriptor* field, int index,
|
|
|
Type value) const;
|
|
|
template <typename Type>
|
|
|
inline Type* MutableRepeatedField(Message* message,
|
|
|
const FieldDescriptor* field,
|
|
|
int index) const;
|
|
|
template <typename Type>
|
|
|
inline void AddField(Message* message,
|
|
|
const FieldDescriptor* field, const Type& value) const;
|
|
|
template <typename Type>
|
|
|
inline Type* AddField(Message* message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
|
|
|
int GetExtensionNumberOrDie(const Descriptor* type) const;
|
|
|
|
|
|
|
|
|
|
|
|
void SetEnumValueInternal(Message* message,
|
|
|
const FieldDescriptor* field,
|
|
|
int value) const;
|
|
|
void SetRepeatedEnumValueInternal(Message* message,
|
|
|
const FieldDescriptor* field,
|
|
|
int index,
|
|
|
int value) const;
|
|
|
void AddEnumValueInternal(Message* message,
|
|
|
const FieldDescriptor* field,
|
|
|
int value) const;
|
|
|
|
|
|
|
|
|
Message* UnsafeArenaReleaseMessage(Message* message,
|
|
|
const FieldDescriptor* field,
|
|
|
MessageFactory* factory = NULL) const;
|
|
|
|
|
|
void UnsafeArenaSetAllocatedMessage(Message* message,
|
|
|
Message* sub_message,
|
|
|
const FieldDescriptor* field) const;
|
|
|
|
|
|
internal::MapFieldBase* MapData(
|
|
|
Message* message, const FieldDescriptor* field) const;
|
|
|
|
|
|
friend inline
|
|
|
void
|
|
|
RegisterAllTypesInternal(const Metadata* file_level_metadata, int size);
|
|
|
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(GeneratedMessageReflection);
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
template<typename To, typename From>
|
|
|
inline To dynamic_cast_if_available(From from) {
|
|
|
#if defined(GOOGLE_PROTOBUF_NO_RTTI) || (defined(_MSC_VER)&&!defined(_CPPRTTI))
|
|
|
|
|
|
(void)from;
|
|
|
return NULL;
|
|
|
#else
|
|
|
return dynamic_cast<To>(from);
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
T* DynamicCastToGenerated(const Message* from) {
|
|
|
|
|
|
|
|
|
const T&(*get_default_instance)() = &T::default_instance;
|
|
|
(void)get_default_instance;
|
|
|
|
|
|
|
|
|
const Message* unused = static_cast<T*>(NULL);
|
|
|
(void)unused;
|
|
|
|
|
|
#if defined(GOOGLE_PROTOBUF_NO_RTTI) || \
|
|
|
(defined(_MSC_VER) && !defined(_CPPRTTI))
|
|
|
bool ok = &T::default_instance() ==
|
|
|
from->GetReflection()->GetMessageFactory()->GetPrototype(
|
|
|
from->GetDescriptor());
|
|
|
return ok ? down_cast<T*>(from) : NULL;
|
|
|
#else
|
|
|
return dynamic_cast<T*>(from);
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
template <typename T>
|
|
|
T* DynamicCastToGenerated(Message* from) {
|
|
|
const Message* message_const = from;
|
|
|
return const_cast<T*>(DynamicCastToGenerated<const T>(message_const));
|
|
|
}
|
|
|
|
|
|
LIBPROTOBUF_EXPORT void AssignDescriptors(
|
|
|
const string& filename, const MigrationSchema* schemas,
|
|
|
const Message* const* default_instances_, const uint32* offsets,
|
|
|
MessageFactory* factory,
|
|
|
|
|
|
Metadata* file_level_metadata,
|
|
|
const EnumDescriptor** file_level_enum_descriptors,
|
|
|
const ServiceDescriptor** file_level_service_descriptors);
|
|
|
|
|
|
LIBPROTOBUF_EXPORT void RegisterAllTypes(const Metadata* file_level_metadata, int size);
|
|
|
|
|
|
|
|
|
LIBPROTOBUF_EXPORT void UnknownFieldSetSerializer(const uint8* base, uint32 offset, uint32 tag,
|
|
|
uint32 has_offset,
|
|
|
::google::protobuf::io::CodedOutputStream* output);
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
#endif
|
|
|
|