Go to the documentation of this file.
31 #ifndef GOOGLE_PROTOBUF_MAP_FIELD_H__
32 #define GOOGLE_PROTOBUF_MAP_FIELD_H__
49 #include <google/protobuf/port_def.inc>
52 #error "You cannot SWIG proto headers"
62 class ContendedMapCleanTest;
63 class GeneratedMessageReflection;
64 class MapFieldAccessor;
72 :
arena_(
NULL), repeated_field_(
NULL), state_(STATE_MODIFIED_MAP) {}
74 :
arena_(arena), repeated_field_(
NULL), state_(STATE_MODIFIED_MAP) {
77 arena->OwnDestructor(&
mutex_);
90 virtual bool ContainsMapKey(
const MapKey& map_key)
const = 0;
91 virtual bool InsertOrLookupMapValue(
const MapKey& map_key,
94 bool IsRepeatedFieldValid()
const;
96 bool IsMapValid()
const;
97 virtual bool DeleteMapValue(
const MapKey& map_key) = 0;
100 virtual void MapBegin(
MapIterator* map_iter)
const = 0;
101 virtual void MapEnd(
MapIterator* map_iter)
const = 0;
105 virtual int size()
const = 0;
106 virtual void Clear() = 0;
110 size_t SpaceUsedExcludingSelfLong()
const;
118 virtual size_t SpaceUsedExcludingSelfNoLock()
const;
122 void SyncRepeatedFieldWithMap()
const;
123 virtual void SyncRepeatedFieldWithMapNoLock()
const;
127 void SyncMapWithRepeatedField()
const;
134 void SetRepeatedDirty();
137 void* MutableRepeatedPtrField()
const;
140 STATE_MODIFIED_MAP = 0,
142 STATE_MODIFIED_REPEATED = 1,
150 mutable internal::WrappedMutex
156 friend class ContendedMapCleanTest;
157 friend class GeneratedMessageReflection;
165 friend class ::PROTOBUF_NAMESPACE_ID::MapIterator;
167 virtual void InitializeIterator(
MapIterator* map_iter)
const = 0;
171 virtual void DeleteIterator(
MapIterator* map_iter)
const = 0;
175 virtual void CopyIterator(
MapIterator* this_iterator,
180 virtual void IncreaseIterator(
MapIterator* map_iter)
const = 0;
186 template <
typename Key,
typename T>
217 template <
typename Derived,
typename Key,
typename T,
220 class MapField :
public TypeDefinedMapFieldBase<Key, T> {
230 typedef MapFieldLite<Derived, Key,
T, kKeyFieldType, kValueFieldType,
266 int size()
const override;
267 void Clear()
override;
288 template <
typename Metadata>
290 bool (*is_valid)(
int),
uint32 field_num,
309 friend class ::PROTOBUF_NAMESPACE_ID::Arena;
314 template <
typename T,
typename Key,
typename Value,
318 kValueFieldType, default_enum_value>> {
332 bool ContainsMapKey(
const MapKey& map_key)
const override;
334 bool DeleteMapValue(
const MapKey& map_key)
override;
341 int size()
const override;
342 void Clear()
override;
351 void SyncRepeatedFieldWithMapNoLock()
const override;
352 void SyncMapWithRepeatedFieldNoLock()
const override;
353 size_t SpaceUsedExcludingSelfNoLock()
const override;
354 void SetMapIteratorValue(
MapIterator* map_iter)
const override;
360 #define TYPE_CHECK(EXPECTEDTYPE, METHOD) \
361 if (type() != EXPECTEDTYPE) { \
362 GOOGLE_LOG(FATAL) << "Protocol Buffer map usage error:\n" \
363 << METHOD << " type does not match\n" \
365 << FieldDescriptor::CppTypeName(EXPECTEDTYPE) << "\n" \
366 << " Actual : " << FieldDescriptor::CppTypeName(type()); \
382 delete val_.string_value_;
389 <<
"MapKey::type MapKey is not initialized. "
390 <<
"Call set methods to initialize MapKey.";
422 return val_.int64_value_;
426 return val_.uint64_value_;
430 return val_.int32_value_;
434 return val_.uint32_value_;
438 return val_.bool_value_;
442 return *
val_.string_value_;
446 if (type_ != other.
type_) {
475 if (type_ != other.
type_) {
504 SetType(other.
type());
534 template <
typename K,
typename V>
536 friend class ::PROTOBUF_NAMESPACE_ID::MapIterator;
550 if (type_ ==
type)
return;
552 delete val_.string_value_;
625 return *
reinterpret_cast<bool*
>(
data_);
629 return *
reinterpret_cast<int*
>(
data_);
637 return *
reinterpret_cast<float*
>(
data_);
641 return *
reinterpret_cast<double*
>(
data_);
646 "MapValueRef::GetMessageValue");
652 "MapValueRef::MutableMessageValue");
657 template <
typename Derived,
typename K,
typename V,
660 int default_enum_value>
662 template <
typename K,
typename V>
664 friend class ::PROTOBUF_NAMESPACE_ID::MapIterator;
673 <<
"MapValueRef::type MapValueRef is not initialized.";
685 #define HANDLE_TYPE(CPPTYPE, TYPE) \
686 case FieldDescriptor::CPPTYPE_##CPPTYPE: { \
687 delete reinterpret_cast<TYPE*>(data_); \
717 key_.SetType(
field->message_type()->FindFieldByName(
"key")->cpp_type());
718 value_.SetType(
field->message_type()->FindFieldByName(
"value")->cpp_type());
719 map_->InitializeIterator(
this);
724 map_->CopyIterator(
this, other);
733 return a.map_->EqualIterator(
a,
b);
736 return !
a.map_->EqualIterator(
a,
b);
739 map_->IncreaseIterator(
this);
746 map_->IncreaseIterator(
this);
757 template <
typename Key,
typename T>
760 template <
typename Derived,
typename Key,
typename T,
763 int default_enum_value>
783 struct hash<::PROTOBUF_NAMESPACE_ID::MapKey> {
784 size_t operator()(const ::PROTOBUF_NAMESPACE_ID::MapKey& map_key)
const {
785 switch (map_key.type()) {
786 case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_DOUBLE:
787 case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_FLOAT:
788 case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_ENUM:
789 case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_MESSAGE:
792 case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_STRING:
793 return hash<std::string>()(map_key.GetStringValue());
794 case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_INT64:
795 return hash<int64>()(map_key.GetInt64Value());
796 case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_INT32:
797 return hash<int32>()(map_key.GetInt32Value());
798 case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_UINT64:
799 return hash<uint64>()(map_key.GetUInt64Value());
800 case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_UINT32:
801 return hash<uint32>()(map_key.GetUInt32Value());
802 case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_BOOL:
803 return hash<bool>()(map_key.GetBoolValue());
808 bool operator()(const ::PROTOBUF_NAMESPACE_ID::MapKey& map_key1,
809 const ::PROTOBUF_NAMESPACE_ID::MapKey& map_key2)
const {
810 return map_key1 < map_key2;
815 #include <google/protobuf/port_undef.inc>
817 #endif // GOOGLE_PROTOBUF_MAP_FIELD_H__
Map< Key, T > * MutableMap()
bool operator<(const MapKey &other) const
#define TYPE_CHECK(EXPECTEDTYPE, METHOD)
void SetBoolValue(bool value)
const MapValueRef & GetValueRef()
const Descriptor::ReservedRange value
internal::MapFieldBase * MutableMapData(Message *message, const FieldDescriptor *field) const
#define GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TypeName)
bool operator()(const ::PROTOBUF_NAMESPACE_ID::MapKey &map_key1, const ::PROTOBUF_NAMESPACE_ID::MapKey &map_key2) const
bool EqualIterator(const MapIterator &a, const MapIterator &b) const override
void MapBegin(MapIterator *map_iter) const override
internal::WrappedMutex mutex_
EntryType * NewEntry() const
void SyncRepeatedFieldWithMapNoLock() const override
#define GOOGLE_PROTOBUF_HASH_NAMESPACE_DECLARATION_END
uint64 GetUInt64Value() const
uint32 GetUInt32Value() const
void SetUInt64Value(uint64 value)
void SetStringValue(const std::string &val)
std::unique_ptr< Arena > arena_
MapIterator(const MapIterator &other)
static PyObject * CopyFrom(CMessage *self, PyObject *arg)
MapIterator operator++(int)
int32 GetInt32Value() const
bool GetBoolValue() const
bool DeleteMapValue(const MapKey &map_key) override
void InternalArenaConstructable_
uint32 GetUInt32Value() const
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MapField)
const Map< Key, T > & GetMap() const override
GLsizei const GLchar *const * string
static const bool kIsValueEnum
double GetDoubleValue() const
const Message & GetMessageValue() const
HANDLE_TYPE(int32, FieldDescriptor::CPPTYPE_INT32, -1)
void SetType(FieldDescriptor::CppType type)
const char * _InternalParse(const char *ptr, ParseContext *ctx)
#define T(upbtypeconst, upbtype, ctype, default_value)
const Map< Key, T > & GetMap() const
MapValueRef * MutableValueRef()
void DeleteIterator(MapIterator *map_iter) const override
void SetUInt32Value(uint32 value)
void IncreaseIterator(MapIterator *map_iter) const override
int32 GetInt32Value() const
const char * _InternalParse(const char *ptr, ParseContext *ctx)
virtual void InitializeIterator(MapIterator *map_iter) const =0
void CopyFrom(const MapValueRef &other)
FieldDescriptor::CppType type() const
GLboolean GLboolean GLboolean b
bool InsertOrLookupMapValue(const MapKey &map_key, MapValueRef *val) override
uint64 GetUInt64Value() const
void CopyFrom(const MapKey &other)
const std::string & GetStringValue() const
static MapContainer * GetMap(PyObject *obj)
void SyncMapWithRepeatedFieldNoLock() const override
int ToIntSize(size_t size)
Derived::SuperType EntryTypeTrait
void SetMapIteratorValue(MapIterator *map_iter) const override
void MergeFrom(const MapFieldBase &other) override
#define GOOGLE_PROTOBUF_HASH_NAMESPACE_DECLARATION_START
void SetFloatValue(float value)
void SetType(FieldDescriptor::CppType type)
RepeatedPtrField< Message > * repeated_field_
int64 GetInt64Value() const
MapIterator & operator=(const MapIterator &other)
friend bool operator!=(const MapIterator &a, const MapIterator &b)
void Swap(MapFieldBase *other) override
FieldDescriptor::CppType type() const
void SetEnumValue(int value)
virtual void SetMapIteratorValue(MapIterator *map_iter) const =0
void InitializeIterator(MapIterator *map_iter) const override
MapKey & operator=(const MapKey &other)
TypeDefinedMapFieldBase(Arena *arena)
~TypeDefinedMapFieldBase() override
#define GOOGLE_LOG(LEVEL)
internal::WrappedMutex mutex_
void SetUInt64Value(uint64 value)
MapTypeHandler< kKeyFieldType, Key > KeyTypeHandler
MapIterator(Message *message, const FieldDescriptor *field)
void SetInt32Value(int32 value)
size_t operator()(const ::PROTOBUF_NAMESPACE_ID::MapKey &map_key) const
virtual Map< Key, T > * MutableMap()=0
MapKey(const MapKey &other)
int64 GetInt64Value() const
bool operator==(const MapKey &other) const
void SetInt64Value(int64 value)
const FieldDescriptor * field
const SETUP_TEARDOWN_TESTCONTEXT char * key
const char * ParseWithEnumValidation(const char *ptr, ParseContext *ctx, bool(*is_valid)(int), uint32 field_num, Metadata *metadata)
virtual const Map< Key, T > & GetMap() const =0
void SetInt64Value(int64 value)
MapFieldBase(Arena *arena)
void SetInt32Value(int32 value)
EntryType * NewEnumEntryWrapper(const Key &key, const T t) const
std::string * string_value_
void CopyIterator(MapIterator *this_iteratorm, const MapIterator &that_iterator) const override
union google::protobuf::MapKey::KeyValue val_
MapTypeHandler< kValueFieldType, T > ValueTypeHandler
float GetFloatValue() const
const Message * default_entry_
TypeDefinedMapFieldBase()
MapIf< kIsValueEnum, T, const T & >::type CastValueType
EntryType * NewEnumEntryWrapper(const Key &key, const T t) const
const std::string & GetStringValue() const
void SetValue(const void *val)
void DestructorSkippable_
virtual void SyncMapWithRepeatedFieldNoLock() const
void SetDoubleValue(double value)
void SyncMapWithRepeatedField() const
void SetStringValue(const std::string &value)
int size() const override
Map< Key, T > * MutableMap() override
int SpaceUsedExcludingSelf() const
bool ContainsMapKey(const MapKey &map_key) const override
Map< Key, T >::const_iterator & InternalGetIterator(const MapIterator *map_iter) const
MapField< T, Key, Value, kKeyFieldType, kValueFieldType, default_enum_value > MapFieldType
Map< MapKey, MapValueRef > map_
MapIterator & operator++()
void MapEnd(MapIterator *map_iter) const override
friend bool operator==(const MapIterator &a, const MapIterator &b)
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TypeDefinedMapFieldBase)
GLsizei const GLfloat * value
void SetBoolValue(bool value)
bool GetBoolValue() const
size_t SpaceUsedExcludingSelfNoLock() const override
EntryType * NewEntryWrapper(const Key &key, const T &t) const
EntryType * NewEntryWrapper(const Key &key, const T &t) const
std::atomic< State > state_
GLboolean GLboolean GLboolean GLboolean a
void SetUInt32Value(uint32 value)
EntryType * NewEntry() const
GLenum GLuint GLenum GLsizei const GLchar * message
internal::MapFieldBase * map_
MapFieldLite< Derived, Key, T, kKeyFieldType, kValueFieldType, default_enum_value > MapFieldLiteType
virtual void CopyIterator(MapIterator *this_iterator, const MapIterator &other_iterator) const =0
Message * MutableMessageValue()
const char * ParseWithEnumValidation(const char *ptr, ParseContext *ctx, bool(*is_valid)(int), uint32 field_num, Metadata *metadata)
libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:56