Go to the documentation of this file.
46 #ifndef GOOGLE_PROTOBUF_REPEATED_FIELD_H__
47 #define GOOGLE_PROTOBUF_REPEATED_FIELD_H__
58 #include <type_traits>
66 #include <type_traits>
69 #include <google/protobuf/port_def.inc>
72 #error "You cannot SWIG proto headers"
77 namespace google_opensource {
90 class MergePartialFromCodedStreamHelper;
97 template <
typename Iter>
99 return static_cast<int>(std::distance(
begin,
end));
102 template <
typename Iter>
104 std::input_iterator_tag ) {
108 template <
typename Iter>
110 typedef typename std::iterator_traits<Iter>::iterator_category Category;
119 template <
typename Element>
122 alignof(
Arena) >=
alignof(Element),
123 "We only support types that have an alignment smaller than Arena");
129 template <
typename Iter>
141 const Element&
Get(
int index)
const;
147 const Element&
at(
int index)
const;
157 template <
typename Iter>
196 const Element*
data()
const;
320 return reinterpret_cast<Rep*
>(addr);
348 for (; e < limit; e++) {
352 #if defined(__GXX_DELETE_WITH_SIZE__) || defined(__cpp_sized_deallocation)
354 ::operator
delete(
static_cast<void*
>(
rep),
bytes);
356 ::operator
delete(
static_cast<void*
>(
rep));
363 template <
typename Element>
365 reinterpret_cast<size_t>(&
reinterpret_cast<Rep*
>(16)->elements[0]) - 16;
368 template <
typename It>
370 template <
typename It,
typename Vo
idPtr>
380 template <
typename Element,
381 bool HasTrivialCopy =
384 void operator()(Element* to,
const Element* from,
int array_size);
396 template <
typename T>
408 template <
typename U,
typename RetType, RetType (U::*)(const U& arg)>
410 template <
typename U>
412 template <
typename U>
414 template <
typename U>
418 typedef std::integral_constant<bool,
419 (
sizeof(Check<T>(0)) ==
sizeof(
HasMerge))>
423 template <
typename T,
typename =
void>
433 template <
typename T>
435 : std::integral_constant<bool, std::is_move_constructible<T>::value &&
436 std::is_move_assignable<T>::value> {};
466 template <
typename TypeHandler>
472 template <
typename TypeHandler>
474 template <
typename TypeHandler>
477 template <
typename TypeHandler>
479 template <
typename TypeHandler>
480 void Delete(
int index);
481 template <
typename TypeHandler>
489 template <
typename TypeHandler>
490 const typename TypeHandler::WeakType&
Get(
int index)
const;
498 template <
typename TypeHandler>
501 template <
typename TypeHandler>
508 typename TypeHandler,
512 template <
typename TypeHandler>
514 template <
typename TypeHandler>
517 void CloseGap(
int start,
int num);
519 void Reserve(
int new_size);
521 int Capacity()
const;
524 void*
const* raw_data()
const;
525 void** raw_mutable_data()
const;
527 template <
typename TypeHandler>
529 template <
typename TypeHandler>
532 template <
typename TypeHandler>
535 void SwapElements(
int index1,
int index2);
537 template <
typename TypeHandler>
538 size_t SpaceUsedExcludingSelfLong()
const;
543 template <
typename TypeHandler>
546 template <
typename TypeHandler>
549 AddAllocatedInternal<TypeHandler>(
value, t);
552 template <
typename TypeHandler>
555 template <
typename TypeHandler>
558 return ReleaseLastInternal<TypeHandler>(t);
563 template <
typename TypeHandler>
566 int ClearedCount()
const;
567 template <
typename TypeHandler>
569 template <
typename TypeHandler>
572 template <
typename TypeHandler>
574 template <
typename TypeHandler>
577 template <
typename TypeHandler>
578 PROTOBUF_NOINLINE
void AddAllocatedSlowWithCopy(
580 template <
typename TypeHandler>
581 PROTOBUF_NOINLINE
void AddAllocatedSlowWithoutCopy(
584 template <
typename TypeHandler>
586 template <
typename TypeHandler>
589 template <
typename TypeHandler>
614 static const size_t kRepHeaderSize =
sizeof(
Rep) -
sizeof(
void*);
619 template <
typename TypeHandler>
623 template <
typename TypeHandler>
635 template <
typename TypeHandler>
636 void MergeFromInnerLoop(
void** our_elems,
void** other_elems,
int length,
637 int already_allocated);
643 void** InternalExtend(
int extend_amount);
648 friend class ::PROTOBUF_NAMESPACE_ID::Reflection;
668 friend class upb::google_opensource::GMR_Handlers;
675 template <
typename GenericType>
682 static inline GenericType*
New(Arena* arena) {
683 return Arena::CreateMaybeMessage<Type>(arena);
685 static inline GenericType*
New(Arena* arena, GenericType&&
value) {
686 return Arena::Create<GenericType>(arena, std::move(
value));
689 Arena* arena =
NULL);
696 return Arena::GetArena<Type>(
value);
699 return Arena::GetArena<Type>(
value);
704 static void Merge(
const GenericType& from, GenericType* to);
706 return value.SpaceUsedLong();
710 template <
typename GenericType>
712 const GenericType* , Arena* arena) {
715 template <
typename GenericType>
729 return value->GetArena();
734 return value->GetMaybeArenaPointer();
749 #define DECLARE_SPECIALIZATIONS_FOR_BASE_PROTO_TYPES(TypeName) \
751 PROTOBUF_EXPORT TypeName* GenericTypeHandler<TypeName>::NewFromPrototype( \
752 const TypeName* prototype, Arena* arena); \
754 PROTOBUF_EXPORT Arena* GenericTypeHandler<TypeName>::GetArena( \
757 PROTOBUF_EXPORT void* GenericTypeHandler<TypeName>::GetMaybeArenaPointer( \
766 #undef DECLARE_SPECIALIZATIONS_FOR_BASE_PROTO_TYPES
775 return Arena::Create<std::string>(arena);
778 return Arena::Create<std::string>(arena, std::move(
value));
806 template <
typename Element>
807 class RepeatedPtrField final :
private internal::RepeatedPtrFieldBase {
813 template <
typename Iter>
825 const Element&
Get(
int index)
const;
833 const Element&
at(
int index)
const;
859 const Element*
const*
data()
const;
1040 using RepeatedPtrFieldBase::InternalSwap;
1067 template <
typename Element>
1069 : current_size_(0), total_size_(0), arena_or_elements_(nullptr) {}
1071 template <
typename Element>
1073 : current_size_(0), total_size_(0), arena_or_elements_(arena) {}
1075 template <
typename Element>
1077 : current_size_(0), total_size_(0), arena_or_elements_(nullptr) {
1079 Reserve(other.
size());
1080 AddNAlreadyReserved(other.
size());
1085 template <
typename Element>
1086 template <
typename Iter>
1088 : current_size_(0), total_size_(0), arena_or_elements_(nullptr) {
1092 template <
typename Element>
1094 if (total_size_ > 0) {
1095 InternalDeallocate(
rep(), total_size_);
1099 template <
typename Element>
1102 if (
this != &other)
CopyFrom(other);
1106 template <
typename Element>
1115 InternalSwap(&other);
1119 template <
typename Element>
1124 if (
this != &other) {
1128 InternalSwap(&other);
1134 template <
typename Element>
1136 return current_size_ == 0;
1139 template <
typename Element>
1141 return current_size_;
1144 template <
typename Element>
1149 template <
typename Element>
1152 elements()[current_size_++] =
value;
1155 template <
typename Element>
1158 return &elements()[current_size_++];
1161 template <
typename Element>
1164 << total_size_ <<
", " << current_size_;
1169 Element* ret = unsafe_elements() + current_size_;
1174 template <
typename Element>
1177 if (new_size > current_size_) {
1179 std::fill(&elements()[current_size_], &elements()[new_size],
value);
1181 current_size_ = new_size;
1184 template <
typename Element>
1188 return elements()[
index];
1191 template <
typename Element>
1195 return elements()[
index];
1198 template <
typename Element>
1202 return elements()[
index];
1205 template <
typename Element>
1209 return &elements()[
index];
1212 template <
typename Element>
1219 template <
typename Element>
1221 if (current_size_ == total_size_) Reserve(total_size_ + 1);
1222 elements()[current_size_++] =
value;
1225 template <
typename Element>
1227 if (current_size_ == total_size_) Reserve(total_size_ + 1);
1228 return &elements()[current_size_++];
1231 template <
typename Element>
1232 template <
typename Iter>
1256 template <
typename Element>
1262 template <
typename Element>
1264 Element* elements) {
1270 if (elements !=
NULL) {
1271 for (
int i = 0;
i < num; ++
i) elements[
i] = this->
Get(
i + start);
1276 for (
int i =
start + num;
i < this->current_size_; ++
i)
1277 this->Set(
i - num, this->
Get(
i));
1278 this->Truncate(this->current_size_ - num);
1282 template <
typename Element>
1287 template <
typename Element>
1291 int existing_size =
size();
1292 Reserve(existing_size + other.
size());
1293 AddNAlreadyReserved(other.
size());
1298 template <
typename Element>
1300 if (&other ==
this)
return;
1305 template <
typename Element>
1311 template <
typename Element>
1313 const_iterator
first, const_iterator last) {
1315 if (
first != last) {
1316 Truncate(std::copy(last, cend(),
begin() + first_offset) - cbegin());
1318 return begin() + first_offset;
1321 template <
typename Element>
1323 return unsafe_elements();
1326 template <
typename Element>
1328 return unsafe_elements();
1331 template <
typename Element>
1341 template <
typename Element>
1343 if (
this == other)
return;
1345 InternalSwap(other);
1354 template <
typename Element>
1356 if (
this == other)
return;
1357 InternalSwap(other);
1360 template <
typename Element>
1363 swap(elements()[index1], elements()[index2]);
1366 template <
typename Element>
1369 return unsafe_elements();
1371 template <
typename Element>
1374 return unsafe_elements();
1376 template <
typename Element>
1379 return unsafe_elements();
1381 template <
typename Element>
1383 return unsafe_elements() + current_size_;
1385 template <
typename Element>
1388 return unsafe_elements() + current_size_;
1390 template <
typename Element>
1393 return unsafe_elements() + current_size_;
1396 template <
typename Element>
1398 return total_size_ > 0 ? (total_size_ *
sizeof(Element) + kRepHeaderSize) : 0;
1403 template <
typename Element>
1405 if (total_size_ >= new_size)
return;
1406 Rep* old_rep = total_size_ > 0 ?
rep() :
NULL;
1408 Arena* arena = GetArenaNoVirtual();
1410 std::max(total_size_ * 2, new_size));
1412 static_cast<size_t>(new_size),
1413 (std::numeric_limits<size_t>::max() - kRepHeaderSize) /
sizeof(Element))
1414 <<
"Requested size is too large to fit into size_t.";
1416 kRepHeaderSize +
sizeof(Element) *
static_cast<size_t>(new_size);
1417 if (arena ==
NULL) {
1418 new_rep =
static_cast<Rep*
>(::operator
new(
bytes));
1420 new_rep =
reinterpret_cast<Rep*
>(Arena::CreateArray<char>(arena,
bytes));
1422 new_rep->arena = arena;
1423 int old_total_size = total_size_;
1424 total_size_ = new_size;
1425 arena_or_elements_ = new_rep->elements;
1435 Element* e = &elements()[0];
1436 Element* limit = e + total_size_;
1437 for (; e < limit; e++) {
1440 if (current_size_ > 0) {
1441 MoveArray(&elements()[0], old_rep->elements, current_size_);
1445 InternalDeallocate(old_rep, old_total_size);
1449 template <
typename Element>
1452 if (current_size_ > 0) {
1453 current_size_ = new_size;
1457 template <
typename Element>
1463 template <
typename Element>
1471 template <
typename Element,
bool HasTrivialCopy>
1473 const Element* from,
1475 std::copy(from, from + array_size, to);
1478 template <
typename Element>
1480 void operator()(Element* to,
const Element* from,
int array_size) {
1481 memcpy(to, from,
static_cast<size_t>(array_size) *
sizeof(Element));
1492 inline RepeatedPtrFieldBase::RepeatedPtrFieldBase()
1496 :
arena_(arena), current_size_(0), total_size_(0), rep_(
NULL) {}
1498 template <
typename TypeHandler>
1503 for (
int i = 0;
i <
n;
i++) {
1504 TypeHandler::Delete(cast<TypeHandler>(elements[
i]),
NULL);
1506 #if defined(__GXX_DELETE_WITH_SIZE__) || defined(__cpp_sized_deallocation)
1508 ::operator
delete(
static_cast<void*
>(
rep_),
size);
1510 ::operator
delete(
static_cast<void*
>(
rep_));
1516 template <
typename TypeHandler>
1521 SwapFallback<TypeHandler>(other);
1525 template <
typename TypeHandler>
1534 this->Clear<TypeHandler>();
1535 this->MergeFrom<TypeHandler>(*other);
1536 other->
Clear<TypeHandler>();
1545 template <
typename TypeHandler>
1553 template <
typename TypeHandler>
1561 template <
typename TypeHandler>
1568 template <
typename TypeHandler>
1575 template <
typename TypeHandler>
1582 template <
typename TypeHandler>
1585 if (
rep_ !=
NULL && current_size_ < rep_->allocated_size) {
1593 TypeHandler::NewFromPrototype(prototype,
arena_);
1598 template <
typename TypeHandler,
1601 if (
rep_ !=
NULL && current_size_ < rep_->allocated_size) {
1614 template <
typename TypeHandler>
1620 template <
typename TypeHandler>
1640 template <
typename TypeHandler>
1645 &RepeatedPtrFieldBase::MergeFromInnerLoop<TypeHandler>);
1656 (this->*inner_loop)(new_elements, other_elements, other_size,
1665 template <
typename TypeHandler>
1667 void** other_elems,
int length,
1668 int already_allocated) {
1671 for (
int i = 0;
i < already_allocated &&
i <
length;
i++) {
1673 typename TypeHandler::WeakType* other_elem =
1674 reinterpret_cast<typename TypeHandler::WeakType*
>(other_elems[
i]);
1675 typename TypeHandler::WeakType* new_elem =
1676 reinterpret_cast<typename TypeHandler::WeakType*
>(our_elems[
i]);
1680 for (
int i = already_allocated;
i <
length;
i++) {
1682 typename TypeHandler::WeakType* other_elem =
1683 reinterpret_cast<typename TypeHandler::WeakType*
>(other_elems[
i]);
1684 typename TypeHandler::WeakType* new_elem =
1685 TypeHandler::NewFromPrototype(other_elem, arena);
1687 our_elems[
i] = new_elem;
1691 template <
typename TypeHandler>
1693 if (&other ==
this)
return;
1694 RepeatedPtrFieldBase::Clear<TypeHandler>();
1695 RepeatedPtrFieldBase::MergeFrom<TypeHandler>(other);
1708 template <
typename TypeHandler>
1715 template <
typename TypeHandler>
1728 template <
typename TypeHandler>
1730 size_t allocated_bytes =
static_cast<size_t>(
total_size_) *
sizeof(
void*);
1734 TypeHandler::SpaceUsedLong(*cast<TypeHandler>(
rep_->
elements[
i]));
1738 return allocated_bytes;
1741 template <
typename TypeHandler>
1743 if (
rep_ !=
NULL && current_size_ < rep_->allocated_size) {
1751 template <
typename TypeHandler>
1754 Arena* element_arena =
1755 reinterpret_cast<Arena*
>(TypeHandler::GetMaybeArenaPointer(
value));
1762 if (current_size_ < rep_->allocated_size) {
1777 template <
typename TypeHandler>
1785 if (my_arena !=
NULL && value_arena ==
NULL) {
1786 my_arena->Own(
value);
1787 }
else if (my_arena != value_arena) {
1789 TypeHandler::NewFromPrototype(
value, my_arena);
1791 TypeHandler::Delete(
value, value_arena);
1795 UnsafeArenaAddAllocated<TypeHandler>(
value);
1799 template <
typename TypeHandler>
1807 if (current_size_ < rep_->allocated_size) {
1816 UnsafeArenaAddAllocated<TypeHandler>(
value);
1820 template <
typename TypeHandler>
1835 }
else if (current_size_ < rep_->allocated_size) {
1849 template <
typename TypeHandler>
1856 if (arena ==
NULL) {
1860 TypeHandler::NewFromPrototype(result,
NULL);
1870 template <
typename TypeHandler>
1874 <<
"ReleaseLast() called on a RepeatedPtrField that is on an arena, "
1875 <<
"with a type that does not implement MergeFrom. This is unsafe; "
1876 <<
"please implement MergeFrom for your type.";
1877 return UnsafeArenaReleaseLast<TypeHandler>();
1880 template <
typename TypeHandler>
1887 if (current_size_ < rep_->allocated_size) {
1899 template <
typename TypeHandler>
1903 <<
"AddCleared() can only be used on a RepeatedPtrField not on an arena.";
1905 <<
"AddCleared() can only accept values not on an arena.";
1912 template <
typename TypeHandler>
1915 <<
"ReleaseCleared() can only be used on a RepeatedPtrField not on "
1927 template <
typename Element>
1935 template <
typename Element>
1938 template <
typename Element>
1940 : RepeatedPtrFieldBase(arena) {}
1942 template <
typename Element>
1945 : RepeatedPtrFieldBase() {
1949 template <
typename Element>
1950 template <
typename Iter>
1962 template <
typename Element>
1964 Destroy<TypeHandler>();
1967 template <
typename Element>
1970 if (
this != &other)
CopyFrom(other);
1974 template <
typename Element>
1984 InternalSwap(&other);
1988 template <
typename Element>
1993 if (
this != &other) {
1997 InternalSwap(&other);
2003 template <
typename Element>
2005 return RepeatedPtrFieldBase::empty();
2008 template <
typename Element>
2013 template <
typename Element>
2015 return RepeatedPtrFieldBase::Get<TypeHandler>(
index);
2018 template <
typename Element>
2020 return RepeatedPtrFieldBase::at<TypeHandler>(
index);
2023 template <
typename Element>
2025 return RepeatedPtrFieldBase::at<TypeHandler>(
index);
2029 template <
typename Element>
2031 return RepeatedPtrFieldBase::Mutable<TypeHandler>(
index);
2034 template <
typename Element>
2036 return RepeatedPtrFieldBase::Add<TypeHandler>();
2039 template <
typename Element>
2041 RepeatedPtrFieldBase::Add<TypeHandler>(std::move(
value));
2044 template <
typename Element>
2046 RepeatedPtrFieldBase::RemoveLast<TypeHandler>();
2049 template <
typename Element>
2054 for (
int i = 0;
i < num; ++
i) {
2055 RepeatedPtrFieldBase::Delete<TypeHandler>(
start +
i);
2060 template <
typename Element>
2062 Element** elements) {
2065 ExtractSubrangeInternal(
start, num, elements, t);
2070 template <
typename Element>
2079 if (elements !=
NULL) {
2080 if (GetArenaNoVirtual() !=
NULL) {
2083 for (
int i = 0;
i < num; ++
i) {
2085 RepeatedPtrFieldBase::Mutable<TypeHandler>(
i +
start);
2087 TypeHandler::NewFromPrototype(element,
NULL);
2089 elements[
i] = new_value;
2092 for (
int i = 0;
i < num; ++
i) {
2093 elements[
i] = RepeatedPtrFieldBase::Mutable<TypeHandler>(
i +
start);
2097 CloseGap(
start, num);
2103 template <
typename Element>
2111 <<
"ExtractSubrange() when arena is non-NULL is only supported when "
2112 <<
"the Element type supplies a MergeFrom() operation to make copies.";
2113 UnsafeArenaExtractSubrange(
start, num, elements);
2116 template <
typename Element>
2118 int start,
int num, Element** elements) {
2125 if (elements !=
NULL) {
2126 for (
int i = 0;
i < num; ++
i) {
2127 elements[
i] = RepeatedPtrFieldBase::Mutable<TypeHandler>(
i +
start);
2130 CloseGap(
start, num);
2134 template <
typename Element>
2136 RepeatedPtrFieldBase::Clear<TypeHandler>();
2139 template <
typename Element>
2142 RepeatedPtrFieldBase::MergeFrom<TypeHandler>(other);
2145 template <
typename Element>
2147 RepeatedPtrFieldBase::CopyFrom<TypeHandler>(other);
2150 template <
typename Element>
2156 template <
typename Element>
2160 size_type last_offset = std::distance(cbegin(), last);
2161 DeleteSubrange(pos_offset, last_offset - pos_offset);
2162 return begin() + pos_offset;
2165 template <
typename Element>
2167 return RepeatedPtrFieldBase::mutable_data<TypeHandler>();
2170 template <
typename Element>
2172 return RepeatedPtrFieldBase::data<TypeHandler>();
2175 template <
typename Element>
2177 if (
this == other)
return;
2178 RepeatedPtrFieldBase::Swap<TypeHandler>(other);
2181 template <
typename Element>
2184 if (
this == other)
return;
2185 RepeatedPtrFieldBase::InternalSwap(other);
2188 template <
typename Element>
2190 RepeatedPtrFieldBase::SwapElements(index1, index2);
2193 template <
typename Element>
2195 return RepeatedPtrFieldBase::GetArenaNoVirtual();
2198 template <
typename Element>
2200 return RepeatedPtrFieldBase::SpaceUsedExcludingSelfLong<TypeHandler>();
2203 template <
typename Element>
2205 RepeatedPtrFieldBase::AddAllocated<TypeHandler>(
value);
2208 template <
typename Element>
2210 RepeatedPtrFieldBase::UnsafeArenaAddAllocated<TypeHandler>(
value);
2213 template <
typename Element>
2215 return RepeatedPtrFieldBase::ReleaseLast<TypeHandler>();
2218 template <
typename Element>
2220 return RepeatedPtrFieldBase::UnsafeArenaReleaseLast<TypeHandler>();
2223 template <
typename Element>
2225 return RepeatedPtrFieldBase::ClearedCount();
2228 template <
typename Element>
2230 return RepeatedPtrFieldBase::AddCleared<TypeHandler>(
value);
2233 template <
typename Element>
2235 return RepeatedPtrFieldBase::ReleaseCleared<TypeHandler>();
2238 template <
typename Element>
2240 return RepeatedPtrFieldBase::Reserve(new_size);
2243 template <
typename Element>
2245 return RepeatedPtrFieldBase::Capacity();
2263 template <
typename Element>
2264 class RepeatedPtrIterator {
2278 template <
typename OtherElement>
2283 implicit_cast<Element*>(
static_cast<OtherElement*
>(
nullptr));
2342 template <
typename OtherElement>
2356 template <
typename Element,
typename Vo
idPtr>
2424 template <
typename OtherElement>
2442 template <
typename Element>
2447 template <
typename Element>
2450 return iterator(raw_data());
2452 template <
typename Element>
2453 inline typename RepeatedPtrField<Element>::const_iterator
2457 template <
typename Element>
2462 template <
typename Element>
2465 return iterator(raw_data() +
size());
2467 template <
typename Element>
2468 inline typename RepeatedPtrField<Element>::const_iterator
2473 template <
typename Element>
2478 template <
typename Element>
2481 return const_pointer_iterator(
const_cast<const void*
const*
>(raw_data()));
2483 template <
typename Element>
2484 inline typename RepeatedPtrField<Element>::pointer_iterator
2488 template <
typename Element>
2491 return const_pointer_iterator(
2492 const_cast<const void*
const*
>(raw_data() +
size()));
2506 template <
typename T>
2508 :
public std::iterator<std::output_iterator_tag, T> {
2512 : field_(mutable_field) {}
2528 template <
typename T>
2530 :
public std::iterator<std::output_iterator_tag, T> {
2533 : field_(mutable_field) {}
2535 *field_->Add() =
value;
2539 const T*
const ptr_to_value) {
2540 *field_->Add() = *ptr_to_value;
2544 *field_->Add() = std::move(
value);
2559 template <
typename T>
2561 :
public std::iterator<std::output_iterator_tag, T> {
2565 : field_(mutable_field) {}
2567 T*
const ptr_to_value) {
2568 field_->AddAllocated(ptr_to_value);
2583 template <
typename T>
2585 :
public std::iterator<std::output_iterator_tag, T> {
2589 : field_(mutable_field) {}
2591 T const*
const ptr_to_value) {
2592 field_->UnsafeArenaAddAllocated(
const_cast<T*
>(ptr_to_value));
2614 template <
typename T>
2622 template <
typename T>
2631 template <
typename T>
2640 template <
typename T>
2641 internal::AllocatedRepeatedPtrFieldBackInsertIterator<T>
2659 template <
typename T>
2660 internal::UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator<T>
2675 extern template class PROTOBUF_EXPORT RepeatedPtrField<std::string>;
2680 #include <google/protobuf/port_undef.inc>
2682 #endif // GOOGLE_PROTOBUF_REPEATED_FIELD_H__
internal::RepeatedPtrIterator< Element > iterator
static GenericType * New(Arena *arena, GenericType &&value)
RepeatedPtrField< T > * field_
struct RepeatedField RepeatedField
const_reverse_iterator rbegin() const
void AddCleared(typename TypeHandler::Type *value)
void Reserve(int new_size)
RepeatedPtrIterator(void *const *it)
static const TypeHandler::Type * cast(const void *element)
const_iterator cbegin() const
Arena * GetArena(MessageLite *msg, int64 arena_offset)
const Descriptor::ReservedRange value
static const int kInitialSize
Element * elements() const
void swap(message_t &a, message_t &b) ZMQ_NOTHROW
#define DECLARE_SPECIALIZATIONS_FOR_BASE_PROTO_TYPES(TypeName)
TypeHandler::Type * Add(typename TypeHandler::Type *prototype=NULL)
bool operator<(const iterator &x) const
#define GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TypeName)
static void Delete(GenericType *value, Arena *arena)
AllocatedRepeatedPtrFieldBackInsertIterator< T > & operator=(T *const ptr_to_value)
iterator & operator+=(difference_type d)
PROTOBUF_ALWAYS_INLINE void Swap(RepeatedPtrFieldBase *other)
const_iterator cend() const
AllocatedRepeatedPtrFieldBackInsertIterator< T > & operator*()
void SwapElements(int index1, int index2)
bool operator<(const iterator &x) const
const typedef value_type * const_pointer
void operator()(Element *to, const Element *from, int array_size)
Arena * GetArenaNoVirtual() const
uint128 operator*(const uint128 &lhs, const uint128 &rhs)
const T & Get(const void *ptr)
RepeatedPtrFieldBackInsertIterator< T > & operator++()
GLenum GLuint GLenum GLsizei length
UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator< T > & operator++()
friend iterator operator-(iterator it, difference_type d)
bool operator>=(const iterator &x) const
void ExtractSubrange(int start, int num, Element *elements)
const_reverse_iterator rend() const
std::reverse_iterator< iterator > reverse_iterator
void UnsafeArenaAddAllocated(typename TypeHandler::Type *value)
std::unique_ptr< Arena > arena_
bool operator>(const iterator &x) const
difference_type operator-(const iterator &x) const
static PyObject * CopyFrom(CMessage *self, PyObject *arg)
static PyObject * Iter(PyContainer *self)
static PyObject * Get(PyContainer *self, PyObject *args)
int SpaceUsedExcludingSelf() const
const Element * data() const
bool operator<=(const iterator &x) const
const Element & Get(int index) const
bool operator>=(const iterator &x) const
std::reverse_iterator< const_iterator > const_reverse_iterator
RepeatedPtrOverPtrsIterator()
TypeHandler::Type * ReleaseLastInternal(std::true_type)
const Element *const * data() const
const typedef value_type & const_reference
static GenericType * New(Arena *arena)
iterator erase(const_iterator position)
RepeatedPtrFieldBackInsertIterator(RepeatedPtrField< T > *const mutable_field)
GLsizei const GLchar *const * string
friend iterator operator+(iterator it, const difference_type d)
reference operator*() const
static PyObject * Add(PyObject *self, PyObject *file_descriptor_proto)
Element & operator[](int index)
const typedef value_type * const_pointer
const typedef Element * const_iterator
const TypeHandler::WeakType & Get(int index) const
iterator erase(const_iterator position)
Element * UnsafeArenaReleaseLast()
#define GOOGLE_CHECK_LT(A, B)
#define T(upbtypeconst, upbtype, ctype, default_value)
const Element & at(int index) const
void MergeFrom(const RepeatedPtrFieldBase &other)
void CopyFrom(const RepeatedPtrField &other)
Element * Mutable(int index)
bool operator!=(const iterator &x) const
PROTOBUF_NOINLINE void SwapFallback(RepeatedPtrFieldBase *other)
static const size_t kRepHeaderSize
std::reverse_iterator< const_iterator > const_reverse_iterator
iterator & operator+=(difference_type d)
void ExtractSubrange(int start, int num, Element **elements)
AllocatedRepeatedPtrFieldBackInsertIterator(RepeatedPtrField< T > *const mutable_field)
const Element & operator[](int index) const
std::reverse_iterator< iterator > reverse_iterator
friend iterator operator-(iterator it, difference_type d)
static size_t begin(const upb_table *t)
void Truncate(int new_size)
static std::string * New(Arena *arena, std::string &&value)
void MergeFromInternal(const RepeatedPtrFieldBase &other, void(RepeatedPtrFieldBase::*inner_loop)(void **, void **, int, int))
RepeatedPtrFieldBackInsertIterator< T > & operator=(T &&value)
RepeatedPtrField< T > * field_
TypeHandler::Type ** mutable_data()
ptrdiff_t difference_type
void UnsafeArenaSwap(RepeatedPtrField *other)
internal::AllocatedRepeatedPtrFieldBackInsertIterator< T > AllocatedRepeatedPtrFieldBackInserter(RepeatedPtrField< T > *const mutable_field)
void InternalSwap(RepeatedField *other)
Element & operator[](int index)
RepeatedPtrOverPtrsIterator(VoidPtr *it)
int ToIntSize(size_t size)
static void * GetMaybeArenaPointer(std::string *)
static void * GetMaybeArenaPointer(GenericType *value)
static std::string * NewFromPrototype(const std::string *, Arena *arena)
reference operator[](difference_type d) const
reference operator[](difference_type d) const
static void Merge(const std::string &from, std::string *to)
Arena * GetArenaNoVirtual() const
static PyObject * New(PyTypeObject *type, PyObject *args, PyObject *kwargs)
void UnsafeArenaSwap(RepeatedField *other)
difference_type operator-(const iterator &x) const
static bool reserve(upb_pb_encoder *e, size_t bytes)
size_t StringSpaceUsedExcludingSelfLong(const std::string &str)
Element * AddAlreadyReserved()
TypeHandler::Type * ReleaseLast()
integral_constant< bool, false > false_type
internal::RepeatedPtrFieldBackInsertIterator< T > RepeatedFieldBackInserter(RepeatedPtrField< T > *const mutable_field)
UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator(RepeatedPtrField< T > *const mutable_field)
UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator< T > & operator*()
void Resize(int new_size, const Element &value)
const Element & at(int index) const
static PROTOBUF_NOINLINE void Merge(const GenericType &from, GenericType *to)
void swap(Json::Value &a, Json::Value &b)
Specialize std::swap() for Json::Value.
pointer_iterator pointer_begin()
internal::RepeatedPtrIterator< const Element > const_iterator
void ** InternalExtend(int extend_amount)
integral_constant< bool, true > true_type
static const size_t kRepHeaderSize
void Swap(RepeatedPtrField *other)
void InternalArenaConstructable_
TypeHandler::Type * UnsafeArenaReleaseLast()
static std::string * New(Arena *arena)
reverse_iterator rbegin()
RepeatedPtrField< T > * field_
internal::RepeatedPtrFieldBackInsertIterator< T > RepeatedPtrFieldBackInserter(RepeatedPtrField< T > *const mutable_field)
iterator & operator-=(difference_type d)
static TypeHandler::Type * cast(void *element)
void CopyFrom(const RepeatedPtrFieldBase &other)
Element * AddNAlreadyReserved(int elements)
reference operator*() const
bool operator<=(const iterator &x) const
void MoveArray(Element *to, Element *from, int size)
const Element & operator[](int index) const
RepeatedPtrFieldBackInsertIterator< T > & operator++(int)
size_t SpaceUsedExcludingSelfLong() const
void UnsafeArenaAddAllocated(Element *value)
void SwapElements(int index1, int index2)
AllocatedRepeatedPtrFieldBackInsertIterator< T > & operator++()
void CopyFrom(const RepeatedField &other)
AllocatedRepeatedPtrFieldBackInsertIterator< T > & operator++(int)
RepeatedFieldBackInsertIterator< T > & operator++()
int CalculateReserve(Iter begin, Iter end, std::forward_iterator_tag)
std::random_access_iterator_tag iterator_category
void *const * raw_data() const
RepeatedField & operator=(const RepeatedField &other)
iterator & operator-=(difference_type d)
void operator()(Element *to, const Element *from, int array_size)
Element ** mutable_data()
TypeHandler::Type * AddFromCleared()
void CopyArray(Element *to, const Element *from, int size)
void ExtractSubrangeInternal(int start, int num, Element **elements, std::true_type)
void Set(int index, const Element &value)
Element * ReleaseCleared()
static size_t SpaceUsedLong(const GenericType &value)
static Arena * GetArena(GenericType *value)
void AddCleared(Element *value)
pointer operator->() const
void AddAllocatedInternal(typename TypeHandler::Type *value, std::true_type)
static void Clear(std::string *value)
static const int kMinRepeatedFieldAllocationSize
void MergeFrom(const RepeatedPtrField &other)
ptrdiff_t difference_type
typename std::remove_const< Element >::type value_type
static GenericType * NewFromPrototype(const GenericType *prototype, Arena *arena=NULL)
void InternalDeallocate(Rep *rep, int size)
void LogIndexOutOfBounds(int index, int size)
pointer operator->() const
const_reverse_iterator rend() const
RepeatedPtrIterator(const RepeatedPtrIterator< OtherElement > &other)
Arena * GetArenaNoVirtual() const
UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator< T > & operator++(int)
int SpaceUsedExcludingSelf() const
static void Delete(std::string *value, Arena *arena)
RepeatedField< T > * field_
const TypeHandler::Type *const * data() const
void CopyArray(const T *from, size_t size, U *to)
bool operator==(const iterator &x) const
friend iterator operator+(const difference_type d, iterator it)
#define GOOGLE_CHECK_GE(A, B)
reverse_iterator rbegin()
RepeatedPtrFieldBackInsertIterator< T > & operator*()
static void Clear(GenericType *value)
void DeleteSubrange(int start, int num)
std::random_access_iterator_tag iterator_category
void AddAllocated(typename TypeHandler::Type *value)
RepeatedFieldBackInsertIterator< T > & operator++(int)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
void Reserve(int new_size)
bool operator==(const iterator &x) const
friend iterator operator+(iterator it, difference_type d)
RepeatedPtrFieldBackInsertIterator< T > & operator=(const T *const ptr_to_value)
void Swap(RepeatedField *other)
const Element & Get(int index) const
size_t SpaceUsedExcludingSelfLong() const
internal::RepeatedPtrOverPtrsIterator< Element *, void * > pointer_iterator
UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator< T > & operator=(T const *const ptr_to_value)
const_reverse_iterator rbegin() const
static Arena * GetArena(std::string *)
PROTOBUF_NOINLINE void AddAllocatedSlowWithCopy(typename TypeHandler::Type *value, Arena *value_arena, Arena *my_arena)
const TypeHandler::Type & at(int index) const
GLsizei const GLfloat * value
friend iterator operator+(difference_type d, iterator it)
void InternalArenaConstructable_
void UnsafeArenaExtractSubrange(int start, int num, Element **elements)
std::ptrdiff_t difference_type
RepeatedFieldBackInsertIterator< T > & operator=(const T &value)
bool operator>(const iterator &x) const
void MergeFrom(const RepeatedField &other)
RepeatedPtrField & operator=(const RepeatedPtrField &other)
const_iterator cend() const
void * arena_or_elements_
RepeatedFieldBackInsertIterator< T > & operator*()
void MergeFromInnerLoop(void **our_elems, void **other_elems, int length, int already_allocated)
int CalculateReserve(Iter begin, Iter end)
std::ptrdiff_t difference_type
TypeHandler::Type * ReleaseCleared()
Element * Mutable(int index)
size_t SpaceUsedExcludingSelfLong() const
void AddAllocated(Element *value)
static size_t SpaceUsedLong(const std::string &value)
const_iterator cbegin() const
TypeHandler::Type * Mutable(int index)
RepeatedFieldBackInsertIterator(RepeatedField< T > *const mutable_field)
void Reserve(int new_size)
Element * unsafe_elements() const
void SwapElements(int index1, int index2)
def Merge(text, message, allow_unknown_extension=False, allow_field_number=False, descriptor_pool=None, allow_unknown_field=False)
const typedef value_type & const_reference
internal::UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator< T > UnsafeArenaAllocatedRepeatedPtrFieldBackInserter(RepeatedPtrField< T > *const mutable_field)
void InternalSwap(RepeatedPtrFieldBase *other)
typename std::remove_const< Element >::type value_type
internal::RepeatedPtrOverPtrsIterator< const Element *const, const void *const > const_pointer_iterator
bool operator!=(const iterator &x) const
RepeatedPtrFieldBackInsertIterator< T > & operator=(const T &value)
void ** raw_mutable_data() const
pointer_iterator pointer_end()
libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:58