33 #ifndef GOOGLE_PROTOBUF_REPEATED_FIELD_REFLECTION_H__ 34 #define GOOGLE_PROTOBUF_REPEATED_FIELD_REFLECTION_H__ 79 virtual bool IsEmpty(
const Field*
data)
const = 0;
80 virtual int Size(
const Field*
data)
const = 0;
86 virtual const Value*
Get(
87 const Field*
data,
int index, Value* scratch_space)
const = 0;
89 virtual void Clear(Field*
data)
const = 0;
90 virtual void Set(Field*
data,
int index,
const Value*
value)
const = 0;
91 virtual void Add(Field*
data,
const Value*
value)
const = 0;
92 virtual void RemoveLast(Field*
data)
const = 0;
93 virtual void SwapElements(Field*
data,
int index1,
int index2)
const = 0;
95 Field* other_data)
const = 0;
98 virtual Iterator* BeginIterator(
const Field*
data)
const = 0;
100 virtual Iterator* EndIterator(
const Field*
data)
const = 0;
102 virtual Iterator* CopyIterator(
const Field*
data,
103 const Iterator* iterator)
const = 0;
105 virtual Iterator* AdvanceIterator(
const Field*
data,
106 Iterator* iterator)
const = 0;
108 virtual bool EqualsIterator(
const Field*
data,
const Iterator*
a,
109 const Iterator*
b)
const = 0;
112 virtual void DeleteIterator(
const Field*
data, Iterator* iterator)
const = 0;
114 virtual const Value* GetIteratorValue(
const Field*
data,
115 const Iterator* iterator,
116 Value* scratch_space)
const = 0;
123 ActualType scratch_space;
124 return static_cast<T>(
125 *
reinterpret_cast<const ActualType*
>(
126 Get(data, index, static_cast<Value*>(&scratch_space))));
129 template<
typename T,
typename ValueType>
139 ActualType tmp =
static_cast<ActualType
>(
value);
140 Set(data, index, static_cast<const Value*>(&tmp));
143 template<
typename T,
typename ValueType>
153 ActualType tmp =
static_cast<ActualType
>(
value);
154 Add(data, static_cast<const Value*>(&tmp));
161 :
public std::iterator<std::forward_iterator_tag, T> {
171 : data_(data), accessor_(accessor),
172 iterator_(begin ? accessor->BeginIterator(data) :
173 accessor->EndIterator(data)),
174 scratch_space_(
new AccessorValueType) {
180 AccessorValueType* scratch_space)
181 : data_(data), accessor_(accessor),
182 iterator_(begin ? accessor->BeginIterator(data) :
183 accessor->EndIterator(data)),
184 scratch_space_(scratch_space) {
187 accessor_->DeleteIterator(data_, iterator_);
191 iterator_ = accessor_->AdvanceIterator(data_, iterator_);
195 iterator_ = accessor_->AdvanceIterator(data_, iterator_);
199 return static_cast<IteratorValueType
>(
200 *
static_cast<const AccessorValueType*
>(
201 accessor_->GetIteratorValue(
202 data_, iterator_, scratch_space_.get())));
205 return static_cast<IteratorPointerType
>(
206 accessor_->GetIteratorValue(
207 data_, iterator_, scratch_space_.get()));
210 assert(data_ == other.
data_);
212 return !accessor_->EqualsIterator(data_, iterator_, other.
iterator_);
219 : data_(other.data_), accessor_(other.accessor_),
220 iterator_(accessor_->CopyIterator(data_, other.iterator_)) {
223 if (
this != &other) {
224 accessor_->DeleteIterator(data_, iterator_);
244 static const bool is_primitive =
false;
246 #define DEFINE_PRIMITIVE(TYPE, type) \ 247 template<> struct PrimitiveTraits<type> { \ 248 static const bool is_primitive = true; \ 249 static const FieldDescriptor::CppType cpp_type = \ 250 FieldDescriptor::CPPTYPE_ ## TYPE; \ 259 #undef DEFINE_PRIMITIVE 262 struct RefTypeTraits<
263 T, typename
internal::enable_if<PrimitiveTraits<T>::is_primitive>
::type> {
294 T, typename internal::
enable_if<internal::is_same<string, T>::value>
::type> {
310 return T::default_instance().GetDescriptor();
322 T, typename internal::
enable_if<internal::is_base_of<Message, T>::value>
::type> {
337 #endif // GOOGLE_PROTOBUF_REPEATED_FIELD_REFLECTION_H__ void Add(Field *data, const ValueType &value) const
Definition: repeated_field_reflection.h:144
void Set(Field *data, int index, const ValueType &value) const
Definition: repeated_field_reflection.h:130
string IteratorValueType
Definition: repeated_field_reflection.h:298
IteratorValueType operator*() const
Definition: repeated_field_reflection.h:198
const T & IteratorValueType
Definition: repeated_field_reflection.h:326
Definition: reflection.h:505
RepeatedFieldAccessor AccessorType
Definition: repeated_field_reflection.h:265
string * IteratorPointerType
Definition: repeated_field_reflection.h:299
RepeatedFieldRefIterator & operator++()
Definition: repeated_field_reflection.h:194
CppType
Definition: descriptor.h:475
Definition: descriptor.h:483
Definition: reflection.h:570
Definition: descriptor.h:484
static const Descriptor * GetMessageFieldDescriptor()
Definition: repeated_field_reflection.h:271
static const Descriptor * GetMessageFieldDescriptor()
Definition: repeated_field_reflection.h:287
Definition: descriptor.h:172
void Iterator
Definition: repeated_field_reflection.h:76
T * IteratorPointerType
Definition: repeated_field_reflection.h:268
RepeatedFieldAccessor AccessorType
Definition: repeated_field_reflection.h:324
bool operator!=(const RepeatedFieldRefIterator &other) const
Definition: repeated_field_reflection.h:209
uint64_t uint64
Definition: angle_config.h:30
int64_t int64
Definition: angle_config.h:29
void * iterator_
Definition: reflection.h:497
RepeatedFieldRefIterator< T > iterator
Definition: repeated_field_reflection.h:295
const FieldDescriptor const OneofDescriptor value
Definition: descriptor.h:1717
int32_t int32
Definition: port.h:130
int32 * IteratorPointerType
Definition: repeated_field_reflection.h:284
TestSubObjConstructor T
Definition: TestTypedefs.idl:84
void Field
Definition: repeated_field_reflection.h:74
RepeatedFieldRefIterator< T > iterator
Definition: repeated_field_reflection.h:264
Definition: descriptor.h:485
~RepeatedFieldRefIterator()
Definition: repeated_field_reflection.h:186
GLuint index
Definition: gl2.h:383
EGLAttrib * value
Definition: eglext.h:120
ValueType
Definition: WebKitPluginHostTypes.h:51
const T * IteratorPointerType
Definition: repeated_field_reflection.h:327
RepeatedFieldRefIterator(const void *data, const RepeatedFieldAccessor *accessor, bool begin)
Definition: repeated_field_reflection.h:168
unrestricted float DOUBLE
Definition: TestTypedefs.idl:71
Definition: __init__.py:1
RepeatedFieldRefIterator< T > iterator
Definition: repeated_field_reflection.h:323
T IteratorValueType
Definition: repeated_field_reflection.h:283
GLboolean GLboolean GLboolean GLboolean a
Definition: gl2ext.h:306
static const Descriptor * GetMessageFieldDescriptor()
Definition: repeated_field_reflection.h:330
Definition: type_traits.h:88
bool operator==(const RepeatedFieldRefIterator &other) const
Definition: repeated_field_reflection.h:214
IteratorPointerType operator->() const
Definition: repeated_field_reflection.h:204
RepeatedFieldRefIterator(const void *data, const RepeatedFieldAccessor *accessor, bool begin, AccessorValueType *scratch_space)
Definition: repeated_field_reflection.h:177
const void * data_
Definition: reflection.h:495
void Value
Definition: repeated_field_reflection.h:75
static const Descriptor * get()
Definition: reflection.h:571
EGLenum type
Definition: eglext.h:63
Definition: scoped_ptr.h:48
EGLStreamKHR EGLint EGLint EGLint const void * data
Definition: eglext.h:984
Definition: document.h:393
T AccessorValueType
Definition: repeated_field_reflection.h:266
Definition: reflection.h:333
FieldDescriptor::CppType cpp_type(FieldType type)
Definition: extension_set_heavy.cc:128
#define NULL
Definition: common_types.h:41
RepeatedFieldRefIterator & operator=(const RepeatedFieldRefIterator &other)
Definition: repeated_field_reflection.h:222
T IteratorValueType
Definition: repeated_field_reflection.h:267
RepeatedFieldRefIterator< T > iterator
Definition: repeated_field_reflection.h:279
#define LIBPROTOBUF_EXPORT
Definition: port.h:97
uint32_t uint32
Definition: angle_config.h:28
GLboolean GLboolean GLboolean b
Definition: gl2ext.h:306
virtual Iterator * CopyIterator(const Field *data, const Iterator *iterator) const =0
static const Descriptor * GetMessageFieldDescriptor()
Definition: repeated_field_reflection.h:302
Definition: gflags_completions.h:115
int32 AccessorValueType
Definition: repeated_field_reflection.h:282
RepeatedFieldAccessor AccessorType
Definition: repeated_field_reflection.h:296
RepeatedFieldRefIterator(const RepeatedFieldRefIterator &other)
Definition: repeated_field_reflection.h:218
#define DEFINE_PRIMITIVE(TYPE, type)
Definition: repeated_field_reflection.h:246
const RepeatedFieldAccessor * accessor_
Definition: reflection.h:496
bool operator!=(const uint128 &lhs, const uint128 &rhs)
Definition: int128.h:140
RepeatedFieldAccessor AccessorType
Definition: repeated_field_reflection.h:280
RepeatedFieldRefIterator operator++(int)
Definition: repeated_field_reflection.h:189
string AccessorValueType
Definition: repeated_field_reflection.h:297
Definition: reflection.h:422
Definition: GetPutInfo.h:232
Definition: reflection.h:48
Message AccessorValueType
Definition: repeated_field_reflection.h:325
int32_t int32
Definition: angle_config.h:27
T Get(const Field *data, int index) const
Definition: repeated_field_reflection.h:121