diff options
| author | Pimyn Girgis <pimyn@google.com> | 2025-12-02 12:28:10 +0000 |
|---|---|---|
| committer | Tahuti <pimyn@google.com> | 2025-12-03 09:02:54 +0000 |
| commit | 1cfbf16e320ca9bdadd9c24eb1d2d68b25369ba6 (patch) | |
| tree | be0ce827f327c8a76125307e64047e01fa449d4c /executor/_include/flatbuffers/vector.h | |
| parent | 42a04216dd856c12e723e48930e85d63998e4eda (diff) | |
executor: update flatbuffers
Update flatbuffers to v23.5.26, which matches the compiler version in the new env container.
Diffstat (limited to 'executor/_include/flatbuffers/vector.h')
| -rw-r--r-- | executor/_include/flatbuffers/vector.h | 78 |
1 files changed, 43 insertions, 35 deletions
diff --git a/executor/_include/flatbuffers/vector.h b/executor/_include/flatbuffers/vector.h index 6bcdfe263..ae52b9382 100644 --- a/executor/_include/flatbuffers/vector.h +++ b/executor/_include/flatbuffers/vector.h @@ -27,15 +27,18 @@ struct String; // An STL compatible iterator implementation for Vector below, effectively // calling Get() for every element. -template<typename T, typename IT> struct VectorIterator { +template<typename T, typename IT, typename Data = uint8_t *, + typename SizeT = uoffset_t> +struct VectorIterator { typedef std::random_access_iterator_tag iterator_category; typedef IT value_type; typedef ptrdiff_t difference_type; typedef IT *pointer; typedef IT &reference; - VectorIterator(const uint8_t *data, uoffset_t i) - : data_(data + IndirectHelper<T>::element_stride * i) {} + static const SizeT element_stride = IndirectHelper<T>::element_stride; + + VectorIterator(Data data, SizeT i) : data_(data + element_stride * i) {} VectorIterator(const VectorIterator &other) : data_(other.data_) {} VectorIterator() : data_(nullptr) {} @@ -62,7 +65,7 @@ template<typename T, typename IT> struct VectorIterator { } difference_type operator-(const VectorIterator &other) const { - return (data_ - other.data_) / IndirectHelper<T>::element_stride; + return (data_ - other.data_) / element_stride; } // Note: return type is incompatible with the standard @@ -74,51 +77,52 @@ template<typename T, typename IT> struct VectorIterator { IT operator->() const { return IndirectHelper<T>::Read(data_, 0); } VectorIterator &operator++() { - data_ += IndirectHelper<T>::element_stride; + data_ += element_stride; return *this; } VectorIterator operator++(int) { VectorIterator temp(data_, 0); - data_ += IndirectHelper<T>::element_stride; + data_ += element_stride; return temp; } - VectorIterator operator+(const uoffset_t &offset) const { - return VectorIterator(data_ + offset * IndirectHelper<T>::element_stride, - 0); + VectorIterator operator+(const SizeT &offset) const { + return VectorIterator(data_ + offset * element_stride, 0); } - VectorIterator &operator+=(const uoffset_t &offset) { - data_ += offset * IndirectHelper<T>::element_stride; + VectorIterator &operator+=(const SizeT &offset) { + data_ += offset * element_stride; return *this; } VectorIterator &operator--() { - data_ -= IndirectHelper<T>::element_stride; + data_ -= element_stride; return *this; } VectorIterator operator--(int) { VectorIterator temp(data_, 0); - data_ -= IndirectHelper<T>::element_stride; + data_ -= element_stride; return temp; } - VectorIterator operator-(const uoffset_t &offset) const { - return VectorIterator(data_ - offset * IndirectHelper<T>::element_stride, - 0); + VectorIterator operator-(const SizeT &offset) const { + return VectorIterator(data_ - offset * element_stride, 0); } - VectorIterator &operator-=(const uoffset_t &offset) { - data_ -= offset * IndirectHelper<T>::element_stride; + VectorIterator &operator-=(const SizeT &offset) { + data_ -= offset * element_stride; return *this; } private: - const uint8_t *data_; + Data data_; }; +template<typename T, typename IT, typename SizeT = uoffset_t> +using VectorConstIterator = VectorIterator<T, IT, const uint8_t *, SizeT>; + template<typename Iterator> struct VectorReverseIterator : public std::reverse_iterator<Iterator> { explicit VectorReverseIterator(Iterator iter) @@ -141,11 +145,12 @@ struct VectorReverseIterator : public std::reverse_iterator<Iterator> { // This is used as a helper type for accessing vectors. // Vector::data() assumes the vector elements start after the length field. -template<typename T> class Vector { +template<typename T, typename SizeT = uoffset_t> class Vector { public: - typedef VectorIterator<T, typename IndirectHelper<T>::mutable_return_type> + typedef VectorIterator<T, typename IndirectHelper<T>::mutable_return_type, + uint8_t *, SizeT> iterator; - typedef VectorIterator<T, typename IndirectHelper<T>::return_type> + typedef VectorConstIterator<T, typename IndirectHelper<T>::return_type, SizeT> const_iterator; typedef VectorReverseIterator<iterator> reverse_iterator; typedef VectorReverseIterator<const_iterator> const_reverse_iterator; @@ -156,39 +161,40 @@ template<typename T> class Vector { static FLATBUFFERS_CONSTEXPR bool is_span_observable = scalar_tag::value && (FLATBUFFERS_LITTLEENDIAN || sizeof(T) == 1); - uoffset_t size() const { return EndianScalar(length_); } + SizeT size() const { return EndianScalar(length_); } // Deprecated: use size(). Here for backwards compatibility. FLATBUFFERS_ATTRIBUTE([[deprecated("use size() instead")]]) - uoffset_t Length() const { return size(); } + SizeT Length() const { return size(); } + typedef SizeT size_type; typedef typename IndirectHelper<T>::return_type return_type; typedef typename IndirectHelper<T>::mutable_return_type mutable_return_type; typedef return_type value_type; - return_type Get(uoffset_t i) const { + return_type Get(SizeT i) const { FLATBUFFERS_ASSERT(i < size()); return IndirectHelper<T>::Read(Data(), i); } - return_type operator[](uoffset_t i) const { return Get(i); } + return_type operator[](SizeT i) const { return Get(i); } // If this is a Vector of enums, T will be its storage type, not the enum // type. This function makes it convenient to retrieve value with enum // type E. - template<typename E> E GetEnum(uoffset_t i) const { + template<typename E> E GetEnum(SizeT i) const { return static_cast<E>(Get(i)); } // If this a vector of unions, this does the cast for you. There's no check // to make sure this is the right type! - template<typename U> const U *GetAs(uoffset_t i) const { + template<typename U> const U *GetAs(SizeT i) const { return reinterpret_cast<const U *>(Get(i)); } // If this a vector of unions, this does the cast for you. There's no check // to make sure this is actually a string! - const String *GetAsString(uoffset_t i) const { + const String *GetAsString(SizeT i) const { return reinterpret_cast<const String *>(Get(i)); } @@ -222,7 +228,7 @@ template<typename T> class Vector { // Change elements if you have a non-const pointer to this object. // Scalars only. See reflection.h, and the documentation. - void Mutate(uoffset_t i, const T &val) { + void Mutate(SizeT i, const T &val) { FLATBUFFERS_ASSERT(i < size()); WriteScalar(data() + i, val); } @@ -230,15 +236,15 @@ template<typename T> class Vector { // Change an element of a vector of tables (or strings). // "val" points to the new table/string, as you can obtain from // e.g. reflection::AddFlatBuffer(). - void MutateOffset(uoffset_t i, const uint8_t *val) { + void MutateOffset(SizeT i, const uint8_t *val) { FLATBUFFERS_ASSERT(i < size()); - static_assert(sizeof(T) == sizeof(uoffset_t), "Unrelated types"); + static_assert(sizeof(T) == sizeof(SizeT), "Unrelated types"); WriteScalar(data() + i, - static_cast<uoffset_t>(val - (Data() + i * sizeof(uoffset_t)))); + static_cast<SizeT>(val - (Data() + i * sizeof(SizeT)))); } // Get a mutable pointer to tables/strings inside this vector. - mutable_return_type GetMutableObject(uoffset_t i) const { + mutable_return_type GetMutableObject(SizeT i) const { FLATBUFFERS_ASSERT(i < size()); return const_cast<mutable_return_type>(IndirectHelper<T>::Read(Data(), i)); } @@ -276,7 +282,7 @@ template<typename T> class Vector { // try to construct these manually. Vector(); - uoffset_t length_; + SizeT length_; private: // This class is a pointer. Copying will therefore create an invalid object. @@ -295,6 +301,8 @@ template<typename T> class Vector { } }; +template<typename T> using Vector64 = Vector<T, uoffset64_t>; + template<class U> FLATBUFFERS_CONSTEXPR_CPP11 flatbuffers::span<U> make_span(Vector<U> &vec) FLATBUFFERS_NOEXCEPT { |
