#ifndef GOOGLE_PROTOBUF_REPEATED_PTR_FIELD_H__
#define GOOGLE_PROTOBUF_REPEATED_PTR_FIELD_H__
#include <utility>
#ifdef _MSC_VER
#include <algorithm>
#endif
#include <iterator>
#include <limits>
#include <string>
#include <type_traits>
#include <google/protobuf/stubs/logging.h>
#include <google/protobuf/stubs/common.h>
#include <google/protobuf/arena.h>
#include <google/protobuf/port.h>
#include <google/protobuf/message_lite.h>
#include <google/protobuf/port_def.inc>
#ifdef SWIG
#error "You cannot SWIG proto headers"
#endif
namespace google {
namespace protobuf {
class Message;
class Reflection;
template <typename T>
struct WeakRepeatedPtrField;
namespace internal {
class MergePartialFromCodedStreamHelper;
class SwapFieldHelper;
}
namespace internal {
template <typename It>
class RepeatedPtrIterator;
template <typename It, typename VoidPtr>
class RepeatedPtrOverPtrsIterator;
}
namespace internal {
template <typename T>
struct TypeImplementsMergeBehaviorProbeForMergeFrom { … };
template <typename T, typename = void>
struct TypeImplementsMergeBehavior
: TypeImplementsMergeBehaviorProbeForMergeFrom<T> { … };
template <>
struct TypeImplementsMergeBehavior<std::string> { … };
template <typename T>
struct IsMovable
: std::integral_constant<bool, std::is_move_constructible<T>::value &&
std::is_move_assignable<T>::value> { … };
class PROTOBUF_EXPORT RepeatedPtrFieldBase { … };
template <typename GenericType>
class GenericTypeHandler { … };
MessageLite* NewFromPrototypeHelper(const MessageLite* prototype, Arena* arena);
template <>
inline MessageLite* GenericTypeHandler<MessageLite>::NewFromPrototype(
const MessageLite* prototype, Arena* arena) { … }
template <>
inline Arena* GenericTypeHandler<MessageLite>::GetOwningArena(
MessageLite* value) { … }
template <typename GenericType>
PROTOBUF_NOINLINE inline void GenericTypeHandler<GenericType>::Merge(
const GenericType& from, GenericType* to) { … }
template <>
void GenericTypeHandler<MessageLite>::Merge(const MessageLite& from,
MessageLite* to);
template <>
inline void GenericTypeHandler<std::string>::Clear(std::string* value) { … }
template <>
void GenericTypeHandler<std::string>::Merge(const std::string& from,
std::string* to);
template <>
PROTOBUF_EXPORT Message* GenericTypeHandler<Message>::NewFromPrototype(
const Message* prototype, Arena* arena);
template <>
PROTOBUF_EXPORT Arena* GenericTypeHandler<Message>::GetOwningArena(
Message* value);
class StringTypeHandler { … };
}
template <typename Element>
class RepeatedPtrField final : private internal::RepeatedPtrFieldBase { … };
template <typename Element>
class RepeatedPtrField<Element>::TypeHandler
: public internal::GenericTypeHandler<Element> { … };
template <>
class RepeatedPtrField<std::string>::TypeHandler
: public internal::StringTypeHandler { … };
template <typename Element>
constexpr RepeatedPtrField<Element>::RepeatedPtrField()
: … { … }
template <typename Element>
inline RepeatedPtrField<Element>::RepeatedPtrField(Arena* arena)
: … { … }
template <typename Element>
inline RepeatedPtrField<Element>::RepeatedPtrField(
const RepeatedPtrField& other)
: … { … }
template <typename Element>
template <typename Iter, typename>
inline RepeatedPtrField<Element>::RepeatedPtrField(Iter begin, Iter end) { … }
template <typename Element>
RepeatedPtrField<Element>::~RepeatedPtrField() { … }
template <typename Element>
inline RepeatedPtrField<Element>& RepeatedPtrField<Element>::operator=(
const RepeatedPtrField& other) { … }
template <typename Element>
inline RepeatedPtrField<Element>::RepeatedPtrField(
RepeatedPtrField&& other) noexcept
: … { … }
template <typename Element>
inline RepeatedPtrField<Element>& RepeatedPtrField<Element>::operator=(
RepeatedPtrField&& other) noexcept { … }
template <typename Element>
inline bool RepeatedPtrField<Element>::empty() const { … }
template <typename Element>
inline int RepeatedPtrField<Element>::size() const { … }
template <typename Element>
inline const Element& RepeatedPtrField<Element>::Get(int index) const { … }
template <typename Element>
inline const Element& RepeatedPtrField<Element>::at(int index) const { … }
template <typename Element>
inline Element& RepeatedPtrField<Element>::at(int index) { … }
template <typename Element>
inline Element* RepeatedPtrField<Element>::Mutable(int index) { … }
template <typename Element>
inline Element* RepeatedPtrField<Element>::Add() { … }
template <typename Element>
inline void RepeatedPtrField<Element>::Add(Element&& value) { … }
template <typename Element>
template <typename Iter>
inline void RepeatedPtrField<Element>::Add(Iter begin, Iter end) { … }
template <typename Element>
inline void RepeatedPtrField<Element>::RemoveLast() { … }
template <typename Element>
inline void RepeatedPtrField<Element>::DeleteSubrange(int start, int num) { … }
template <typename Element>
inline void RepeatedPtrField<Element>::ExtractSubrange(int start, int num,
Element** elements) { … }
template <typename Element>
inline void RepeatedPtrField<Element>::ExtractSubrangeInternal(
int start, int num, Element** elements, std::true_type) { … }
template <typename Element>
inline void RepeatedPtrField<Element>::ExtractSubrangeInternal(
int start, int num, Element** elements, std::false_type) { … }
template <typename Element>
inline void RepeatedPtrField<Element>::UnsafeArenaExtractSubrange(
int start, int num, Element** elements) { … }
template <typename Element>
inline void RepeatedPtrField<Element>::Clear() { … }
template <typename Element>
inline void RepeatedPtrField<Element>::MergeFrom(
const RepeatedPtrField& other) { … }
template <typename Element>
inline void RepeatedPtrField<Element>::CopyFrom(const RepeatedPtrField& other) { … }
template <typename Element>
template <typename Iter>
inline void RepeatedPtrField<Element>::Assign(Iter begin, Iter end) { … }
template <typename Element>
inline typename RepeatedPtrField<Element>::iterator
RepeatedPtrField<Element>::erase(const_iterator position) { … }
template <typename Element>
inline typename RepeatedPtrField<Element>::iterator
RepeatedPtrField<Element>::erase(const_iterator first, const_iterator last) { … }
template <typename Element>
inline Element** RepeatedPtrField<Element>::mutable_data() { … }
template <typename Element>
inline const Element* const* RepeatedPtrField<Element>::data() const { … }
template <typename Element>
inline void RepeatedPtrField<Element>::Swap(RepeatedPtrField* other) { … }
template <typename Element>
inline void RepeatedPtrField<Element>::UnsafeArenaSwap(
RepeatedPtrField* other) { … }
template <typename Element>
inline void RepeatedPtrField<Element>::SwapElements(int index1, int index2) { … }
template <typename Element>
inline Arena* RepeatedPtrField<Element>::GetArena() const { … }
template <typename Element>
inline Arena* RepeatedPtrField<Element>::GetOwningArena() const { … }
template <typename Element>
inline size_t RepeatedPtrField<Element>::SpaceUsedExcludingSelfLong() const { … }
template <typename Element>
inline void RepeatedPtrField<Element>::AddAllocated(Element* value) { … }
template <typename Element>
inline void RepeatedPtrField<Element>::UnsafeArenaAddAllocated(Element* value) { … }
template <typename Element>
inline Element* RepeatedPtrField<Element>::ReleaseLast() { … }
template <typename Element>
inline Element* RepeatedPtrField<Element>::UnsafeArenaReleaseLast() { … }
template <typename Element>
inline int RepeatedPtrField<Element>::ClearedCount() const { … }
#ifndef PROTOBUF_FUTURE_BREAKING_CHANGES
template <typename Element>
inline void RepeatedPtrField<Element>::AddCleared(Element* value) { … }
template <typename Element>
inline Element* RepeatedPtrField<Element>::ReleaseCleared() { … }
#endif
template <typename Element>
inline void RepeatedPtrField<Element>::Reserve(int new_size) { … }
template <typename Element>
inline int RepeatedPtrField<Element>::Capacity() const { … }
namespace internal {
template <typename Element>
class RepeatedPtrIterator { … };
template <typename Element, typename VoidPtr>
class RepeatedPtrOverPtrsIterator { … };
}
template <typename Element>
inline typename RepeatedPtrField<Element>::iterator
RepeatedPtrField<Element>::begin() { … }
template <typename Element>
inline typename RepeatedPtrField<Element>::const_iterator
RepeatedPtrField<Element>::begin() const { … }
template <typename Element>
inline typename RepeatedPtrField<Element>::const_iterator
RepeatedPtrField<Element>::cbegin() const { … }
template <typename Element>
inline typename RepeatedPtrField<Element>::iterator
RepeatedPtrField<Element>::end() { … }
template <typename Element>
inline typename RepeatedPtrField<Element>::const_iterator
RepeatedPtrField<Element>::end() const { … }
template <typename Element>
inline typename RepeatedPtrField<Element>::const_iterator
RepeatedPtrField<Element>::cend() const { … }
template <typename Element>
inline typename RepeatedPtrField<Element>::pointer_iterator
RepeatedPtrField<Element>::pointer_begin() { … }
template <typename Element>
inline typename RepeatedPtrField<Element>::const_pointer_iterator
RepeatedPtrField<Element>::pointer_begin() const { … }
template <typename Element>
inline typename RepeatedPtrField<Element>::pointer_iterator
RepeatedPtrField<Element>::pointer_end() { … }
template <typename Element>
inline typename RepeatedPtrField<Element>::const_pointer_iterator
RepeatedPtrField<Element>::pointer_end() const { … }
namespace internal {
template <typename T>
class RepeatedPtrFieldBackInsertIterator { … };
template <typename T>
class AllocatedRepeatedPtrFieldBackInsertIterator { … };
template <typename T>
class UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator { … };
}
template <typename T>
internal::RepeatedPtrFieldBackInsertIterator<T> RepeatedPtrFieldBackInserter(
RepeatedPtrField<T>* const mutable_field) { … }
template <typename T>
internal::RepeatedPtrFieldBackInsertIterator<T> RepeatedFieldBackInserter(
RepeatedPtrField<T>* const mutable_field) { … }
template <typename T>
internal::AllocatedRepeatedPtrFieldBackInsertIterator<T>
AllocatedRepeatedPtrFieldBackInserter(
RepeatedPtrField<T>* const mutable_field) { … }
template <typename T>
internal::UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator<T>
UnsafeArenaAllocatedRepeatedPtrFieldBackInserter(
RepeatedPtrField<T>* const mutable_field) { … }
extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE
RepeatedPtrField<std::string>;
}
}
#include <google/protobuf/port_undef.inc>
#endif