aboutsummaryrefslogtreecommitdiffstats
path: root/executor
diff options
context:
space:
mode:
authorPimyn Girgis <pimyn@google.com>2025-12-02 12:28:10 +0000
committerTahuti <pimyn@google.com>2025-12-03 09:02:54 +0000
commit1cfbf16e320ca9bdadd9c24eb1d2d68b25369ba6 (patch)
treebe0ce827f327c8a76125307e64047e01fa449d4c /executor
parent42a04216dd856c12e723e48930e85d63998e4eda (diff)
executor: update flatbuffers
Update flatbuffers to v23.5.26, which matches the compiler version in the new env container.
Diffstat (limited to 'executor')
-rw-r--r--executor/_include/flatbuffers/LICENSE (renamed from executor/_include/flatbuffers/LICENSE.txt)0
-rw-r--r--executor/_include/flatbuffers/README.md6
-rw-r--r--executor/_include/flatbuffers/allocator.h2
-rw-r--r--executor/_include/flatbuffers/array.h17
-rw-r--r--executor/_include/flatbuffers/base.h49
-rw-r--r--executor/_include/flatbuffers/bfbs_generator.h43
-rw-r--r--executor/_include/flatbuffers/buffer.h93
-rw-r--r--executor/_include/flatbuffers/buffer_ref.h2
-rw-r--r--executor/_include/flatbuffers/code_generator.h97
-rw-r--r--executor/_include/flatbuffers/code_generators.h4
-rw-r--r--executor/_include/flatbuffers/default_allocator.h2
-rw-r--r--executor/_include/flatbuffers/detached_buffer.h4
-rw-r--r--executor/_include/flatbuffers/file_manager.h48
-rw-r--r--executor/_include/flatbuffers/flatbuffer_builder.h571
-rw-r--r--executor/_include/flatbuffers/flatbuffers.h18
-rw-r--r--executor/_include/flatbuffers/flatc.h91
-rw-r--r--executor/_include/flatbuffers/flexbuffers.h21
-rw-r--r--executor/_include/flatbuffers/grpc.h1
-rw-r--r--executor/_include/flatbuffers/idl.h326
-rw-r--r--executor/_include/flatbuffers/minireflect.h5
-rw-r--r--executor/_include/flatbuffers/reflection.h1
-rw-r--r--executor/_include/flatbuffers/reflection_generated.h663
-rw-r--r--executor/_include/flatbuffers/registry.h6
-rw-r--r--executor/_include/flatbuffers/stl_emulation.h19
-rw-r--r--executor/_include/flatbuffers/string.h2
-rw-r--r--executor/_include/flatbuffers/struct.h2
-rw-r--r--executor/_include/flatbuffers/table.h32
-rw-r--r--executor/_include/flatbuffers/util.h27
-rw-r--r--executor/_include/flatbuffers/vector.h78
-rw-r--r--executor/_include/flatbuffers/vector_downward.h48
-rw-r--r--executor/_include/flatbuffers/verifier.h85
31 files changed, 1460 insertions, 903 deletions
diff --git a/executor/_include/flatbuffers/LICENSE.txt b/executor/_include/flatbuffers/LICENSE
index d64569567..d64569567 100644
--- a/executor/_include/flatbuffers/LICENSE.txt
+++ b/executor/_include/flatbuffers/LICENSE
diff --git a/executor/_include/flatbuffers/README.md b/executor/_include/flatbuffers/README.md
index 7f0d63ef0..fc1c52f27 100644
--- a/executor/_include/flatbuffers/README.md
+++ b/executor/_include/flatbuffers/README.md
@@ -1,9 +1,9 @@
-This was manually vendored on the version v2.0.8
+This was manually vendored on the version v23.5.26
(which matches the compiler version in the env container)
using the following commands:
```
-git clone --branch=v2.0.8 --depth=1 --single-branch https://github.com/google/flatbuffers.git
-cp flatbuffers/LICENSE.txt syzkaller/executor/_include/flatbuffers
+git clone --branch=v23.5.26 --depth=1 --single-branch https://github.com/google/flatbuffers.git
+cp flatbuffers/LICENSE syzkaller/executor/_include/flatbuffers
cp flatbuffers/include/flatbuffers/*.h syzkaller/executor/_include/flatbuffers
```
diff --git a/executor/_include/flatbuffers/allocator.h b/executor/_include/flatbuffers/allocator.h
index f4ef22db4..30427190b 100644
--- a/executor/_include/flatbuffers/allocator.h
+++ b/executor/_include/flatbuffers/allocator.h
@@ -65,4 +65,4 @@ class Allocator {
} // namespace flatbuffers
-#endif // FLATBUFFERS_ALLOCATOR_H_ \ No newline at end of file
+#endif // FLATBUFFERS_ALLOCATOR_H_
diff --git a/executor/_include/flatbuffers/array.h b/executor/_include/flatbuffers/array.h
index d4b73fc9e..f4bfbf054 100644
--- a/executor/_include/flatbuffers/array.h
+++ b/executor/_include/flatbuffers/array.h
@@ -17,6 +17,9 @@
#ifndef FLATBUFFERS_ARRAY_H_
#define FLATBUFFERS_ARRAY_H_
+#include <cstdint>
+#include <memory>
+
#include "flatbuffers/base.h"
#include "flatbuffers/stl_emulation.h"
#include "flatbuffers/vector.h"
@@ -35,7 +38,7 @@ template<typename T, uint16_t length> class Array {
public:
typedef uint16_t size_type;
typedef typename IndirectHelper<IndirectHelperType>::return_type return_type;
- typedef VectorIterator<T, return_type> const_iterator;
+ typedef VectorConstIterator<T, return_type, uoffset_t> const_iterator;
typedef VectorReverseIterator<const_iterator> const_reverse_iterator;
// If T is a LE-scalar or a struct (!scalar_tag::value).
@@ -156,11 +159,13 @@ template<typename T, uint16_t length> class Array {
// Specialization for Array[struct] with access using Offset<void> pointer.
// This specialization used by idl_gen_text.cpp.
-template<typename T, uint16_t length> class Array<Offset<T>, length> {
+template<typename T, uint16_t length, template<typename> class OffsetT>
+class Array<OffsetT<T>, length> {
static_assert(flatbuffers::is_same<T, void>::value, "unexpected type T");
public:
typedef const void *return_type;
+ typedef uint16_t size_type;
const uint8_t *Data() const { return data_; }
@@ -238,6 +243,14 @@ const Array<E, length> &CastToArrayOfEnum(const T (&arr)[length]) {
return *reinterpret_cast<const Array<E, length> *>(arr);
}
+template<typename T, uint16_t length>
+bool operator==(const Array<T, length> &lhs,
+ const Array<T, length> &rhs) noexcept {
+ return std::addressof(lhs) == std::addressof(rhs) ||
+ (lhs.size() == rhs.size() &&
+ std::memcmp(lhs.Data(), rhs.Data(), rhs.size() * sizeof(T)) == 0);
+}
+
} // namespace flatbuffers
#endif // FLATBUFFERS_ARRAY_H_
diff --git a/executor/_include/flatbuffers/base.h b/executor/_include/flatbuffers/base.h
index 870a811c1..5c4cae791 100644
--- a/executor/_include/flatbuffers/base.h
+++ b/executor/_include/flatbuffers/base.h
@@ -32,7 +32,7 @@
#include <cstdlib>
#include <cstring>
-#if defined(ARDUINO) && !defined(ARDUINOSTL_M_H)
+#if defined(ARDUINO) && !defined(ARDUINOSTL_M_H) && defined(__AVR__)
#include <utility.h>
#else
#include <utility>
@@ -43,6 +43,7 @@
#include <vector>
#include <set>
#include <algorithm>
+#include <limits>
#include <iterator>
#include <memory>
@@ -138,9 +139,9 @@
#endif
#endif // !defined(FLATBUFFERS_LITTLEENDIAN)
-#define FLATBUFFERS_VERSION_MAJOR 2
-#define FLATBUFFERS_VERSION_MINOR 0
-#define FLATBUFFERS_VERSION_REVISION 8
+#define FLATBUFFERS_VERSION_MAJOR 23
+#define FLATBUFFERS_VERSION_MINOR 5
+#define FLATBUFFERS_VERSION_REVISION 26
#define FLATBUFFERS_STRING_EXPAND(X) #X
#define FLATBUFFERS_STRING(X) FLATBUFFERS_STRING_EXPAND(X)
namespace flatbuffers {
@@ -233,12 +234,17 @@ namespace flatbuffers {
}
#define FLATBUFFERS_HAS_STRING_VIEW 1
// Check for absl::string_view
- #elif __has_include("absl/strings/string_view.h")
- #include "absl/strings/string_view.h"
- namespace flatbuffers {
- typedef absl::string_view string_view;
- }
- #define FLATBUFFERS_HAS_STRING_VIEW 1
+ #elif __has_include("absl/strings/string_view.h") && \
+ __has_include("absl/base/config.h") && \
+ (__cplusplus >= 201411)
+ #include "absl/base/config.h"
+ #if !defined(ABSL_USES_STD_STRING_VIEW)
+ #include "absl/strings/string_view.h"
+ namespace flatbuffers {
+ typedef absl::string_view string_view;
+ }
+ #define FLATBUFFERS_HAS_STRING_VIEW 1
+ #endif
#endif
#endif // __has_include
#endif // !FLATBUFFERS_HAS_STRING_VIEW
@@ -273,14 +279,14 @@ namespace flatbuffers {
#endif // !FLATBUFFERS_LOCALE_INDEPENDENT
// Suppress Undefined Behavior Sanitizer (recoverable only). Usage:
-// - __suppress_ubsan__("undefined")
-// - __suppress_ubsan__("signed-integer-overflow")
+// - FLATBUFFERS_SUPPRESS_UBSAN("undefined")
+// - FLATBUFFERS_SUPPRESS_UBSAN("signed-integer-overflow")
#if defined(__clang__) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >=7))
- #define __suppress_ubsan__(type) __attribute__((no_sanitize(type)))
+ #define FLATBUFFERS_SUPPRESS_UBSAN(type) __attribute__((no_sanitize(type)))
#elif defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 409)
- #define __suppress_ubsan__(type) __attribute__((no_sanitize_undefined))
+ #define FLATBUFFERS_SUPPRESS_UBSAN(type) __attribute__((no_sanitize_undefined))
#else
- #define __suppress_ubsan__(type)
+ #define FLATBUFFERS_SUPPRESS_UBSAN(type)
#endif
// This is constexpr function used for checking compile-time constants.
@@ -318,9 +324,11 @@ namespace flatbuffers {
// Also, using a consistent offset type maintains compatibility of serialized
// offset values between 32bit and 64bit systems.
typedef uint32_t uoffset_t;
+typedef uint64_t uoffset64_t;
// Signed offsets for references that can go in both directions.
typedef int32_t soffset_t;
+typedef int64_t soffset64_t;
// Offset/index used in v-tables, can be changed to uint8_t in
// format forks to save a bit of space if desired.
@@ -329,7 +337,8 @@ typedef uint16_t voffset_t;
typedef uintmax_t largest_scalar_t;
// In 32bits, this evaluates to 2GB - 1
-#define FLATBUFFERS_MAX_BUFFER_SIZE ((1ULL << (sizeof(::flatbuffers::soffset_t) * 8 - 1)) - 1)
+#define FLATBUFFERS_MAX_BUFFER_SIZE std::numeric_limits<::flatbuffers::soffset_t>::max()
+#define FLATBUFFERS_MAX_64_BUFFER_SIZE std::numeric_limits<::flatbuffers::soffset64_t>::max()
// The minimum size buffer that can be a valid flatbuffer.
// Includes the offset to the root table (uoffset_t), the offset to the vtable
@@ -413,7 +422,7 @@ template<typename T> T EndianScalar(T t) {
template<typename T>
// UBSAN: C++ aliasing type rules, see std::bit_cast<> for details.
-__suppress_ubsan__("alignment")
+FLATBUFFERS_SUPPRESS_UBSAN("alignment")
T ReadScalar(const void *p) {
return EndianScalar(*reinterpret_cast<const T *>(p));
}
@@ -427,13 +436,13 @@ T ReadScalar(const void *p) {
template<typename T>
// UBSAN: C++ aliasing type rules, see std::bit_cast<> for details.
-__suppress_ubsan__("alignment")
+FLATBUFFERS_SUPPRESS_UBSAN("alignment")
void WriteScalar(void *p, T t) {
*reinterpret_cast<T *>(p) = EndianScalar(t);
}
template<typename T> struct Offset;
-template<typename T> __suppress_ubsan__("alignment") void WriteScalar(void *p, Offset<T> t) {
+template<typename T> FLATBUFFERS_SUPPRESS_UBSAN("alignment") void WriteScalar(void *p, Offset<T> t) {
*reinterpret_cast<uoffset_t *>(p) = EndianScalar(t.o);
}
@@ -444,7 +453,7 @@ template<typename T> __suppress_ubsan__("alignment") void WriteScalar(void *p, O
// Computes how many bytes you'd have to pad to be able to write an
// "scalar_size" scalar if the buffer had grown to "buf_size" (downwards in
// memory).
-__suppress_ubsan__("unsigned-integer-overflow")
+FLATBUFFERS_SUPPRESS_UBSAN("unsigned-integer-overflow")
inline size_t PaddingBytes(size_t buf_size, size_t scalar_size) {
return ((~buf_size) + 1) & (scalar_size - 1);
}
diff --git a/executor/_include/flatbuffers/bfbs_generator.h b/executor/_include/flatbuffers/bfbs_generator.h
deleted file mode 100644
index 08faeb3eb..000000000
--- a/executor/_include/flatbuffers/bfbs_generator.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2021 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FLATBUFFERS_BFBS_GENERATOR_H_
-#define FLATBUFFERS_BFBS_GENERATOR_H_
-
-#include <cstdint>
-
-namespace flatbuffers {
-
-enum GeneratorStatus {
- OK,
- FAILED,
- FAILED_VERIFICATION,
-};
-
-// A Flatbuffer Code Generator that receives a binary serialized reflection.fbs
-// and generates code from it.
-class BfbsGenerator {
- public:
- virtual ~BfbsGenerator() {}
-
- // Generate code from the provided `buffer` of given `length`. The buffer is
- // a serialized reflection.fbs.
- virtual GeneratorStatus Generate(const uint8_t *buffer, int64_t length) = 0;
-};
-
-} // namespace flatbuffers
-
-#endif // FLATBUFFERS_BFBS_GENERATOR_H_
diff --git a/executor/_include/flatbuffers/buffer.h b/executor/_include/flatbuffers/buffer.h
index ca005f715..94d4f7903 100644
--- a/executor/_include/flatbuffers/buffer.h
+++ b/executor/_include/flatbuffers/buffer.h
@@ -17,20 +17,41 @@
#ifndef FLATBUFFERS_BUFFER_H_
#define FLATBUFFERS_BUFFER_H_
+#include <algorithm>
+
#include "flatbuffers/base.h"
namespace flatbuffers {
// Wrapper for uoffset_t to allow safe template specialization.
// Value is allowed to be 0 to indicate a null object (see e.g. AddOffset).
-template<typename T> struct Offset {
- uoffset_t o;
+template<typename T = void> struct Offset {
+ // The type of offset to use.
+ typedef uoffset_t offset_type;
+
+ offset_type o;
Offset() : o(0) {}
- Offset(uoffset_t _o) : o(_o) {}
- Offset<void> Union() const { return Offset<void>(o); }
+ Offset(const offset_type _o) : o(_o) {}
+ Offset<> Union() const { return o; }
bool IsNull() const { return !o; }
};
+// Wrapper for uoffset64_t Offsets.
+template<typename T = void> struct Offset64 {
+ // The type of offset to use.
+ typedef uoffset64_t offset_type;
+
+ offset_type o;
+ Offset64() : o(0) {}
+ Offset64(const offset_type offset) : o(offset) {}
+ Offset64<> Union() const { return o; }
+ bool IsNull() const { return !o; }
+};
+
+// Litmus check for ensuring the Offsets are the expected size.
+static_assert(sizeof(Offset<>) == 4, "Offset has wrong size");
+static_assert(sizeof(Offset64<>) == 8, "Offset64 has wrong size");
+
inline void EndianCheck() {
int endiantest = 1;
// If this fails, see FLATBUFFERS_LITTLEENDIAN above.
@@ -73,25 +94,59 @@ template<typename T> struct IndirectHelper {
typedef T return_type;
typedef T mutable_return_type;
static const size_t element_stride = sizeof(T);
- static return_type Read(const uint8_t *p, uoffset_t i) {
+
+ static return_type Read(const uint8_t *p, const size_t i) {
return EndianScalar((reinterpret_cast<const T *>(p))[i]);
}
+ static mutable_return_type Read(uint8_t *p, const size_t i) {
+ return reinterpret_cast<mutable_return_type>(
+ Read(const_cast<const uint8_t *>(p), i));
+ }
};
-template<typename T> struct IndirectHelper<Offset<T>> {
+
+// For vector of Offsets.
+template<typename T, template<typename> class OffsetT>
+struct IndirectHelper<OffsetT<T>> {
typedef const T *return_type;
typedef T *mutable_return_type;
- static const size_t element_stride = sizeof(uoffset_t);
- static return_type Read(const uint8_t *p, uoffset_t i) {
- p += i * sizeof(uoffset_t);
- return reinterpret_cast<return_type>(p + ReadScalar<uoffset_t>(p));
+ typedef typename OffsetT<T>::offset_type offset_type;
+ static const offset_type element_stride = sizeof(offset_type);
+
+ static return_type Read(const uint8_t *const p, const offset_type i) {
+ // Offsets are relative to themselves, so first update the pointer to
+ // point to the offset location.
+ const uint8_t *const offset_location = p + i * element_stride;
+
+ // Then read the scalar value of the offset (which may be 32 or 64-bits) and
+ // then determine the relative location from the offset location.
+ return reinterpret_cast<return_type>(
+ offset_location + ReadScalar<offset_type>(offset_location));
+ }
+ static mutable_return_type Read(uint8_t *const p, const offset_type i) {
+ // Offsets are relative to themselves, so first update the pointer to
+ // point to the offset location.
+ uint8_t *const offset_location = p + i * element_stride;
+
+ // Then read the scalar value of the offset (which may be 32 or 64-bits) and
+ // then determine the relative location from the offset location.
+ return reinterpret_cast<mutable_return_type>(
+ offset_location + ReadScalar<offset_type>(offset_location));
}
};
+
+// For vector of structs.
template<typename T> struct IndirectHelper<const T *> {
typedef const T *return_type;
typedef T *mutable_return_type;
static const size_t element_stride = sizeof(T);
- static return_type Read(const uint8_t *p, uoffset_t i) {
- return reinterpret_cast<const T *>(p + i * sizeof(T));
+
+ static return_type Read(const uint8_t *const p, const size_t i) {
+ // Structs are stored inline, relative to the first struct pointer.
+ return reinterpret_cast<return_type>(p + i * element_stride);
+ }
+ static mutable_return_type Read(uint8_t *const p, const size_t i) {
+ // Structs are stored inline, relative to the first struct pointer.
+ return reinterpret_cast<mutable_return_type>(p + i * element_stride);
}
};
@@ -118,25 +173,27 @@ inline bool BufferHasIdentifier(const void *buf, const char *identifier,
/// @cond FLATBUFFERS_INTERNAL
// Helpers to get a typed pointer to the root object contained in the buffer.
template<typename T> T *GetMutableRoot(void *buf) {
+ if (!buf) return nullptr;
EndianCheck();
return reinterpret_cast<T *>(
reinterpret_cast<uint8_t *>(buf) +
EndianScalar(*reinterpret_cast<uoffset_t *>(buf)));
}
-template<typename T> T *GetMutableSizePrefixedRoot(void *buf) {
- return GetMutableRoot<T>(reinterpret_cast<uint8_t *>(buf) +
- sizeof(uoffset_t));
+template<typename T, typename SizeT = uoffset_t>
+T *GetMutableSizePrefixedRoot(void *buf) {
+ return GetMutableRoot<T>(reinterpret_cast<uint8_t *>(buf) + sizeof(SizeT));
}
template<typename T> const T *GetRoot(const void *buf) {
return GetMutableRoot<T>(const_cast<void *>(buf));
}
-template<typename T> const T *GetSizePrefixedRoot(const void *buf) {
- return GetRoot<T>(reinterpret_cast<const uint8_t *>(buf) + sizeof(uoffset_t));
+template<typename T, typename SizeT = uoffset_t>
+const T *GetSizePrefixedRoot(const void *buf) {
+ return GetRoot<T>(reinterpret_cast<const uint8_t *>(buf) + sizeof(SizeT));
}
} // namespace flatbuffers
-#endif // FLATBUFFERS_BUFFER_H_ \ No newline at end of file
+#endif // FLATBUFFERS_BUFFER_H_
diff --git a/executor/_include/flatbuffers/buffer_ref.h b/executor/_include/flatbuffers/buffer_ref.h
index ce3020733..f70941fc6 100644
--- a/executor/_include/flatbuffers/buffer_ref.h
+++ b/executor/_include/flatbuffers/buffer_ref.h
@@ -50,4 +50,4 @@ template<typename T> struct BufferRef : BufferRefBase {
} // namespace flatbuffers
-#endif // FLATBUFFERS_BUFFER_REF_H_ \ No newline at end of file
+#endif // FLATBUFFERS_BUFFER_REF_H_
diff --git a/executor/_include/flatbuffers/code_generator.h b/executor/_include/flatbuffers/code_generator.h
new file mode 100644
index 000000000..2971e556e
--- /dev/null
+++ b/executor/_include/flatbuffers/code_generator.h
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2023 Google Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef FLATBUFFERS_CODE_GENERATOR_H_
+#define FLATBUFFERS_CODE_GENERATOR_H_
+
+#include <string>
+
+#include "flatbuffers/idl.h"
+
+namespace flatbuffers {
+
+struct CodeGenOptions {
+ std::string output_path;
+};
+
+// A code generator interface for producing converting flatbuffer schema into
+// code.
+class CodeGenerator {
+ public:
+ virtual ~CodeGenerator() = default;
+
+ enum Status {
+ OK = 0,
+ ERROR = 1,
+ FAILED_VERIFICATION = 2,
+ NOT_IMPLEMENTED = 3
+ };
+
+ std::string status_detail;
+
+ // Generate code from the provided `parser`.
+ //
+ // DEPRECATED: prefer using the other overload of GenerateCode for bfbs.
+ virtual Status GenerateCode(const Parser &parser, const std::string &path,
+ const std::string &filename) = 0;
+
+ // Generate code from the provided `parser` and place it in the output.
+ virtual Status GenerateCodeString(const Parser &parser,
+ const std::string &filename,
+ std::string &output) {
+ (void)parser;
+ (void)filename;
+ (void)output;
+ return Status::NOT_IMPLEMENTED;
+ }
+
+ // Generate code from the provided `buffer` of given `length`. The buffer is a
+ // serialized reflection.fbs.
+ virtual Status GenerateCode(const uint8_t *buffer, int64_t length,
+ const CodeGenOptions &options) = 0;
+
+ virtual Status GenerateMakeRule(const Parser &parser, const std::string &path,
+ const std::string &filename,
+ std::string &output) = 0;
+
+ virtual Status GenerateGrpcCode(const Parser &parser, const std::string &path,
+ const std::string &filename) = 0;
+
+ virtual Status GenerateRootFile(const Parser &parser,
+ const std::string &path) = 0;
+
+ virtual bool IsSchemaOnly() const = 0;
+
+ virtual bool SupportsBfbsGeneration() const = 0;
+
+ virtual bool SupportsRootFileGeneration() const = 0;
+
+ virtual IDLOptions::Language Language() const = 0;
+
+ virtual std::string LanguageName() const = 0;
+
+ protected:
+ CodeGenerator() = default;
+
+ private:
+ // Copying is not supported.
+ CodeGenerator(const CodeGenerator &) = delete;
+ CodeGenerator &operator=(const CodeGenerator &) = delete;
+};
+
+} // namespace flatbuffers
+
+#endif // FLATBUFFERS_CODE_GENERATOR_H_
diff --git a/executor/_include/flatbuffers/code_generators.h b/executor/_include/flatbuffers/code_generators.h
index 727552118..fc030d439 100644
--- a/executor/_include/flatbuffers/code_generators.h
+++ b/executor/_include/flatbuffers/code_generators.h
@@ -229,6 +229,10 @@ class TypedFloatConstantGenerator : public FloatConstantGenerator {
const std::string neg_inf_number_;
};
+std::string JavaCSharpMakeRule(const bool java, const Parser &parser,
+ const std::string &path,
+ const std::string &file_name);
+
} // namespace flatbuffers
#endif // FLATBUFFERS_CODE_GENERATORS_H_
diff --git a/executor/_include/flatbuffers/default_allocator.h b/executor/_include/flatbuffers/default_allocator.h
index 8b173af11..d4724122c 100644
--- a/executor/_include/flatbuffers/default_allocator.h
+++ b/executor/_include/flatbuffers/default_allocator.h
@@ -61,4 +61,4 @@ inline uint8_t *ReallocateDownward(Allocator *allocator, uint8_t *old_p,
} // namespace flatbuffers
-#endif // FLATBUFFERS_DEFAULT_ALLOCATOR_H_ \ No newline at end of file
+#endif // FLATBUFFERS_DEFAULT_ALLOCATOR_H_
diff --git a/executor/_include/flatbuffers/detached_buffer.h b/executor/_include/flatbuffers/detached_buffer.h
index 760a08845..5e900baeb 100644
--- a/executor/_include/flatbuffers/detached_buffer.h
+++ b/executor/_include/flatbuffers/detached_buffer.h
@@ -45,7 +45,7 @@ class DetachedBuffer {
cur_(cur),
size_(sz) {}
- DetachedBuffer(DetachedBuffer &&other)
+ DetachedBuffer(DetachedBuffer &&other) noexcept
: allocator_(other.allocator_),
own_allocator_(other.own_allocator_),
buf_(other.buf_),
@@ -55,7 +55,7 @@ class DetachedBuffer {
other.reset();
}
- DetachedBuffer &operator=(DetachedBuffer &&other) {
+ DetachedBuffer &operator=(DetachedBuffer &&other) noexcept {
if (this == &other) return *this;
destroy();
diff --git a/executor/_include/flatbuffers/file_manager.h b/executor/_include/flatbuffers/file_manager.h
new file mode 100644
index 000000000..069df5b88
--- /dev/null
+++ b/executor/_include/flatbuffers/file_manager.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2023 Google Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef FLATBUFFERS_FILE_MANAGER_H_
+#define FLATBUFFERS_FILE_MANAGER_H_
+
+#include <set>
+#include <string>
+
+#include "flatbuffers/util.h"
+
+namespace flatbuffers {
+
+// A File interface to write data to file by default or
+// save only file names
+class FileManager {
+ public:
+ FileManager() = default;
+ virtual ~FileManager() = default;
+
+ virtual bool SaveFile(const std::string &absolute_file_name,
+ const std::string &content) = 0;
+
+ virtual bool LoadFile(const std::string &absolute_file_name,
+ std::string *buf) = 0;
+
+ private:
+ // Copying is not supported.
+ FileManager(const FileManager &) = delete;
+ FileManager &operator=(const FileManager &) = delete;
+};
+
+} // namespace flatbuffers
+
+#endif // FLATBUFFERS_FILE_MANAGER_H_
diff --git a/executor/_include/flatbuffers/flatbuffer_builder.h b/executor/_include/flatbuffers/flatbuffer_builder.h
index f9432338f..0a38b4ac3 100644
--- a/executor/_include/flatbuffers/flatbuffer_builder.h
+++ b/executor/_include/flatbuffers/flatbuffer_builder.h
@@ -17,12 +17,16 @@
#ifndef FLATBUFFERS_FLATBUFFER_BUILDER_H_
#define FLATBUFFERS_FLATBUFFER_BUILDER_H_
+#include <algorithm>
+#include <cstdint>
#include <functional>
#include <initializer_list>
+#include <type_traits>
#include "flatbuffers/allocator.h"
#include "flatbuffers/array.h"
#include "flatbuffers/base.h"
+#include "flatbuffers/buffer.h"
#include "flatbuffers/buffer_ref.h"
#include "flatbuffers/default_allocator.h"
#include "flatbuffers/detached_buffer.h"
@@ -39,8 +43,9 @@ namespace flatbuffers {
// Converts a Field ID to a virtual table offset.
inline voffset_t FieldIndexToOffset(voffset_t field_id) {
// Should correspond to what EndTable() below builds up.
- const int fixed_fields = 2; // Vtable size and Object Size.
- return static_cast<voffset_t>((field_id + fixed_fields) * sizeof(voffset_t));
+ const voffset_t fixed_fields =
+ 2 * sizeof(voffset_t); // Vtable size and Object Size.
+ return fixed_fields + field_id * sizeof(voffset_t);
}
template<typename T, typename Alloc = std::allocator<T>>
@@ -67,8 +72,13 @@ T *data(std::vector<T, Alloc> &v) {
/// `PushElement`/`AddElement`/`EndTable`, or the builtin `CreateString`/
/// `CreateVector` functions. Do this is depth-first order to build up a tree to
/// the root. `Finish()` wraps up the buffer ready for transport.
-class FlatBufferBuilder {
+template<bool Is64Aware = false> class FlatBufferBuilderImpl {
public:
+ // This switches the size type of the builder, based on if its 64-bit aware
+ // (uoffset64_t) or not (uoffset_t).
+ typedef
+ typename std::conditional<Is64Aware, uoffset64_t, uoffset_t>::type SizeT;
+
/// @brief Default constructor for FlatBufferBuilder.
/// @param[in] initial_size The initial size of the buffer, in bytes. Defaults
/// to `1024`.
@@ -80,13 +90,16 @@ class FlatBufferBuilder {
/// minimum alignment upon reallocation. Only needed if you intend to store
/// types with custom alignment AND you wish to read the buffer in-place
/// directly after creation.
- explicit FlatBufferBuilder(
+ explicit FlatBufferBuilderImpl(
size_t initial_size = 1024, Allocator *allocator = nullptr,
bool own_allocator = false,
size_t buffer_minalign = AlignOf<largest_scalar_t>())
- : buf_(initial_size, allocator, own_allocator, buffer_minalign),
+ : buf_(initial_size, allocator, own_allocator, buffer_minalign,
+ static_cast<SizeT>(Is64Aware ? FLATBUFFERS_MAX_64_BUFFER_SIZE
+ : FLATBUFFERS_MAX_BUFFER_SIZE)),
num_field_loc(0),
max_voffset_(0),
+ length_of_64_bit_region_(0),
nested(false),
finished(false),
minalign_(1),
@@ -97,10 +110,13 @@ class FlatBufferBuilder {
}
/// @brief Move constructor for FlatBufferBuilder.
- FlatBufferBuilder(FlatBufferBuilder &&other)
- : buf_(1024, nullptr, false, AlignOf<largest_scalar_t>()),
+ FlatBufferBuilderImpl(FlatBufferBuilderImpl &&other) noexcept
+ : buf_(1024, nullptr, false, AlignOf<largest_scalar_t>(),
+ static_cast<SizeT>(Is64Aware ? FLATBUFFERS_MAX_64_BUFFER_SIZE
+ : FLATBUFFERS_MAX_BUFFER_SIZE)),
num_field_loc(0),
max_voffset_(0),
+ length_of_64_bit_region_(0),
nested(false),
finished(false),
minalign_(1),
@@ -115,18 +131,19 @@ class FlatBufferBuilder {
}
/// @brief Move assignment operator for FlatBufferBuilder.
- FlatBufferBuilder &operator=(FlatBufferBuilder &&other) {
+ FlatBufferBuilderImpl &operator=(FlatBufferBuilderImpl &&other) noexcept {
// Move construct a temporary and swap idiom
- FlatBufferBuilder temp(std::move(other));
+ FlatBufferBuilderImpl temp(std::move(other));
Swap(temp);
return *this;
}
- void Swap(FlatBufferBuilder &other) {
+ void Swap(FlatBufferBuilderImpl &other) {
using std::swap;
buf_.swap(other.buf_);
swap(num_field_loc, other.num_field_loc);
swap(max_voffset_, other.max_voffset_);
+ swap(length_of_64_bit_region_, other.length_of_64_bit_region_);
swap(nested, other.nested);
swap(finished, other.finished);
swap(minalign_, other.minalign_);
@@ -135,7 +152,7 @@ class FlatBufferBuilder {
swap(string_pool, other.string_pool);
}
- ~FlatBufferBuilder() {
+ ~FlatBufferBuilderImpl() {
if (string_pool) delete string_pool;
}
@@ -152,12 +169,36 @@ class FlatBufferBuilder {
nested = false;
finished = false;
minalign_ = 1;
+ length_of_64_bit_region_ = 0;
if (string_pool) string_pool->clear();
}
/// @brief The current size of the serialized buffer, counting from the end.
+ /// @return Returns an `SizeT` with the current size of the buffer.
+ SizeT GetSize() const { return buf_.size(); }
+
+ /// @brief The current size of the serialized buffer relative to the end of
+ /// the 32-bit region.
/// @return Returns an `uoffset_t` with the current size of the buffer.
- uoffset_t GetSize() const { return buf_.size(); }
+ template<bool is_64 = Is64Aware>
+ // Only enable this method for the 64-bit builder, as only that builder is
+ // concerned with the 32/64-bit boundary, and should be the one to bare any
+ // run time costs.
+ typename std::enable_if<is_64, uoffset_t>::type GetSizeRelative32BitRegion()
+ const {
+ //[32-bit region][64-bit region]
+ // [XXXXXXXXXXXXXXXXXXX] GetSize()
+ // [YYYYYYYYYYYYY] length_of_64_bit_region_
+ // [ZZZZ] return size
+ return static_cast<uoffset_t>(GetSize() - length_of_64_bit_region_);
+ }
+
+ template<bool is_64 = Is64Aware>
+ // Only enable this method for the 32-bit builder.
+ typename std::enable_if<!is_64, uoffset_t>::type GetSizeRelative32BitRegion()
+ const {
+ return static_cast<uoffset_t>(GetSize());
+ }
/// @brief Get the serialized buffer (after you call `Finish()`).
/// @return Returns an `uint8_t` pointer to the FlatBuffer data inside the
@@ -269,14 +310,16 @@ class FlatBufferBuilder {
}
// Write a single aligned scalar to the buffer
- template<typename T> uoffset_t PushElement(T element) {
+ template<typename T, typename ReturnT = uoffset_t>
+ ReturnT PushElement(T element) {
AssertScalarT<T>();
Align(sizeof(T));
buf_.push_small(EndianScalar(element));
- return GetSize();
+ return CalculateOffset<ReturnT>();
}
- template<typename T> uoffset_t PushElement(Offset<T> off) {
+ template<typename T, template<typename> class OffsetT = Offset>
+ uoffset_t PushElement(OffsetT<T> off) {
// Special case for offsets: see ReferTo below.
return PushElement(ReferTo(off.o));
}
@@ -306,11 +349,16 @@ class FlatBufferBuilder {
AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
}
+ template<typename T> void AddOffset(voffset_t field, Offset64<T> off) {
+ if (off.IsNull()) return; // Don't store.
+ AddElement(field, ReferTo(off.o), static_cast<uoffset64_t>(0));
+ }
+
template<typename T> void AddStruct(voffset_t field, const T *structptr) {
if (!structptr) return; // Default, don't store.
Align(AlignOf<T>());
buf_.push_small(*structptr);
- TrackField(field, GetSize());
+ TrackField(field, CalculateOffset<uoffset_t>());
}
void AddStructOffset(voffset_t field, uoffset_t off) {
@@ -321,12 +369,29 @@ class FlatBufferBuilder {
// This function converts them to be relative to the current location
// in the buffer (when stored here), pointing upwards.
uoffset_t ReferTo(uoffset_t off) {
- // Align to ensure GetSize() below is correct.
+ // Align to ensure GetSizeRelative32BitRegion() below is correct.
Align(sizeof(uoffset_t));
- // Offset must refer to something already in buffer.
- const uoffset_t size = GetSize();
+ // 32-bit offsets are relative to the tail of the 32-bit region of the
+ // buffer. For most cases (without 64-bit entities) this is equivalent to
+ // size of the whole buffer (e.g. GetSize())
+ return ReferTo(off, GetSizeRelative32BitRegion());
+ }
+
+ uoffset64_t ReferTo(uoffset64_t off) {
+ // Align to ensure GetSize() below is correct.
+ Align(sizeof(uoffset64_t));
+ // 64-bit offsets are relative to tail of the whole buffer
+ return ReferTo(off, GetSize());
+ }
+
+ template<typename T, typename T2> T ReferTo(const T off, const T2 size) {
+ FLATBUFFERS_ASSERT(off && off <= size);
+ return size - off + static_cast<T>(sizeof(T));
+ }
+
+ template<typename T> T ReferTo(const T off, const T size) {
FLATBUFFERS_ASSERT(off && off <= size);
- return size - off + static_cast<uoffset_t>(sizeof(uoffset_t));
+ return size - off + static_cast<T>(sizeof(T));
}
void NotNested() {
@@ -348,7 +413,7 @@ class FlatBufferBuilder {
uoffset_t StartTable() {
NotNested();
nested = true;
- return GetSize();
+ return GetSizeRelative32BitRegion();
}
// This finishes one serialized object by generating the vtable if it's a
@@ -359,7 +424,9 @@ class FlatBufferBuilder {
FLATBUFFERS_ASSERT(nested);
// Write the vtable offset, which is the start of any Table.
// We fill its value later.
- auto vtableoffsetloc = PushElement<soffset_t>(0);
+ // This is relative to the end of the 32-bit region.
+ const uoffset_t vtable_offset_loc =
+ static_cast<uoffset_t>(PushElement<soffset_t>(0));
// Write a vtable, which consists entirely of voffset_t elements.
// It starts with the number of offsets, followed by a type id, followed
// by the offsets themselves. In reverse:
@@ -369,7 +436,7 @@ class FlatBufferBuilder {
(std::max)(static_cast<voffset_t>(max_voffset_ + sizeof(voffset_t)),
FieldIndexToOffset(0));
buf_.fill_big(max_voffset_);
- auto table_object_size = vtableoffsetloc - start;
+ const uoffset_t table_object_size = vtable_offset_loc - start;
// Vtable use 16bit offsets.
FLATBUFFERS_ASSERT(table_object_size < 0x10000);
WriteScalar<voffset_t>(buf_.data() + sizeof(voffset_t),
@@ -379,7 +446,8 @@ class FlatBufferBuilder {
for (auto it = buf_.scratch_end() - num_field_loc * sizeof(FieldLoc);
it < buf_.scratch_end(); it += sizeof(FieldLoc)) {
auto field_location = reinterpret_cast<FieldLoc *>(it);
- auto pos = static_cast<voffset_t>(vtableoffsetloc - field_location->off);
+ const voffset_t pos =
+ static_cast<voffset_t>(vtable_offset_loc - field_location->off);
// If this asserts, it means you've set a field twice.
FLATBUFFERS_ASSERT(
!ReadScalar<voffset_t>(buf_.data() + field_location->id));
@@ -388,7 +456,7 @@ class FlatBufferBuilder {
ClearOffsets();
auto vt1 = reinterpret_cast<voffset_t *>(buf_.data());
auto vt1_size = ReadScalar<voffset_t>(vt1);
- auto vt_use = GetSize();
+ auto vt_use = GetSizeRelative32BitRegion();
// See if we already have generated a vtable with this exact same
// layout before. If so, make it point to the old one, remove this one.
if (dedup_vtables_) {
@@ -399,23 +467,24 @@ class FlatBufferBuilder {
auto vt2_size = ReadScalar<voffset_t>(vt2);
if (vt1_size != vt2_size || 0 != memcmp(vt2, vt1, vt1_size)) continue;
vt_use = *vt_offset_ptr;
- buf_.pop(GetSize() - vtableoffsetloc);
+ buf_.pop(GetSizeRelative32BitRegion() - vtable_offset_loc);
break;
}
}
// If this is a new vtable, remember it.
- if (vt_use == GetSize()) { buf_.scratch_push_small(vt_use); }
+ if (vt_use == GetSizeRelative32BitRegion()) {
+ buf_.scratch_push_small(vt_use);
+ }
// Fill the vtable offset we created above.
- // The offset points from the beginning of the object to where the
- // vtable is stored.
+ // The offset points from the beginning of the object to where the vtable is
+ // stored.
// Offsets default direction is downward in memory for future format
// flexibility (storing all vtables at the start of the file).
- WriteScalar(buf_.data_at(vtableoffsetloc),
+ WriteScalar(buf_.data_at(vtable_offset_loc + length_of_64_bit_region_),
static_cast<soffset_t>(vt_use) -
- static_cast<soffset_t>(vtableoffsetloc));
-
+ static_cast<soffset_t>(vtable_offset_loc));
nested = false;
- return vtableoffsetloc;
+ return vtable_offset_loc;
}
FLATBUFFERS_ATTRIBUTE([[deprecated("call the version above instead")]])
@@ -425,14 +494,20 @@ class FlatBufferBuilder {
// This checks a required field has been set in a given table that has
// just been constructed.
- template<typename T> void Required(Offset<T> table, voffset_t field);
+ template<typename T> void Required(Offset<T> table, voffset_t field) {
+ auto table_ptr = reinterpret_cast<const Table *>(buf_.data_at(table.o));
+ bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
+ // If this fails, the caller will show what field needs to be set.
+ FLATBUFFERS_ASSERT(ok);
+ (void)ok;
+ }
uoffset_t StartStruct(size_t alignment) {
Align(alignment);
- return GetSize();
+ return GetSizeRelative32BitRegion();
}
- uoffset_t EndStruct() { return GetSize(); }
+ uoffset_t EndStruct() { return GetSizeRelative32BitRegion(); }
void ClearOffsets() {
buf_.scratch_pop(num_field_loc * sizeof(FieldLoc));
@@ -441,15 +516,18 @@ class FlatBufferBuilder {
}
// Aligns such that when "len" bytes are written, an object can be written
- // after it with "alignment" without padding.
+ // after it (forward in the buffer) with "alignment" without padding.
void PreAlign(size_t len, size_t alignment) {
if (len == 0) return;
TrackMinAlign(alignment);
buf_.fill(PaddingBytes(GetSize() + len, alignment));
}
- template<typename T> void PreAlign(size_t len) {
- AssertScalarT<T>();
- PreAlign(len, sizeof(T));
+
+ // Aligns such than when "len" bytes are written, an object of type `AlignT`
+ // can be written after it (forward in the buffer) without padding.
+ template<typename AlignT> void PreAlign(size_t len) {
+ AssertScalarT<AlignT>();
+ PreAlign(len, AlignOf<AlignT>());
}
/// @endcond
@@ -457,34 +535,35 @@ class FlatBufferBuilder {
/// @param[in] str A const char pointer to the data to be stored as a string.
/// @param[in] len The number of bytes that should be stored from `str`.
/// @return Returns the offset in the buffer where the string starts.
- Offset<String> CreateString(const char *str, size_t len) {
- NotNested();
- PreAlign<uoffset_t>(len + 1); // Always 0-terminated.
- buf_.fill(1);
- PushBytes(reinterpret_cast<const uint8_t *>(str), len);
- PushElement(static_cast<uoffset_t>(len));
- return Offset<String>(GetSize());
+ template<template<typename> class OffsetT = Offset>
+ OffsetT<String> CreateString(const char *str, size_t len) {
+ CreateStringImpl(str, len);
+ return OffsetT<String>(
+ CalculateOffset<typename OffsetT<String>::offset_type>());
}
/// @brief Store a string in the buffer, which is null-terminated.
/// @param[in] str A const char pointer to a C-string to add to the buffer.
/// @return Returns the offset in the buffer where the string starts.
- Offset<String> CreateString(const char *str) {
- return CreateString(str, strlen(str));
+ template<template<typename> class OffsetT = Offset>
+ OffsetT<String> CreateString(const char *str) {
+ return CreateString<OffsetT>(str, strlen(str));
}
/// @brief Store a string in the buffer, which is null-terminated.
/// @param[in] str A char pointer to a C-string to add to the buffer.
/// @return Returns the offset in the buffer where the string starts.
- Offset<String> CreateString(char *str) {
- return CreateString(str, strlen(str));
+ template<template<typename> class OffsetT = Offset>
+ OffsetT<String> CreateString(char *str) {
+ return CreateString<OffsetT>(str, strlen(str));
}
/// @brief Store a string in the buffer, which can contain any binary data.
/// @param[in] str A const reference to a std::string to store in the buffer.
/// @return Returns the offset in the buffer where the string starts.
- Offset<String> CreateString(const std::string &str) {
- return CreateString(str.c_str(), str.length());
+ template<template<typename> class OffsetT = Offset>
+ OffsetT<String> CreateString(const std::string &str) {
+ return CreateString<OffsetT>(str.c_str(), str.length());
}
// clang-format off
@@ -492,8 +571,9 @@ class FlatBufferBuilder {
/// @brief Store a string in the buffer, which can contain any binary data.
/// @param[in] str A const string_view to copy in to the buffer.
/// @return Returns the offset in the buffer where the string starts.
- Offset<String> CreateString(flatbuffers::string_view str) {
- return CreateString(str.data(), str.size());
+ template<template <typename> class OffsetT = Offset>
+ OffsetT<String>CreateString(flatbuffers::string_view str) {
+ return CreateString<OffsetT>(str.data(), str.size());
}
#endif // FLATBUFFERS_HAS_STRING_VIEW
// clang-format on
@@ -501,16 +581,21 @@ class FlatBufferBuilder {
/// @brief Store a string in the buffer, which can contain any binary data.
/// @param[in] str A const pointer to a `String` struct to add to the buffer.
/// @return Returns the offset in the buffer where the string starts
- Offset<String> CreateString(const String *str) {
- return str ? CreateString(str->c_str(), str->size()) : 0;
+ template<template<typename> class OffsetT = Offset>
+ OffsetT<String> CreateString(const String *str) {
+ return str ? CreateString<OffsetT>(str->c_str(), str->size()) : 0;
}
/// @brief Store a string in the buffer, which can contain any binary data.
/// @param[in] str A const reference to a std::string like type with support
/// of T::c_str() and T::length() to store in the buffer.
/// @return Returns the offset in the buffer where the string starts.
- template<typename T> Offset<String> CreateString(const T &str) {
- return CreateString(str.c_str(), str.length());
+ template<template<typename> class OffsetT = Offset,
+ // No need to explicitly declare the T type, let the compiler deduce
+ // it.
+ int &...ExplicitArgumentBarrier, typename T>
+ OffsetT<String> CreateString(const T &str) {
+ return CreateString<OffsetT>(str.c_str(), str.length());
}
/// @brief Store a string in the buffer, which can contain any binary data.
@@ -522,12 +607,14 @@ class FlatBufferBuilder {
/// @return Returns the offset in the buffer where the string starts.
Offset<String> CreateSharedString(const char *str, size_t len) {
FLATBUFFERS_ASSERT(FLATBUFFERS_GENERAL_HEAP_ALLOC_OK);
- if (!string_pool)
+ if (!string_pool) {
string_pool = new StringOffsetMap(StringOffsetCompare(buf_));
- auto size_before_string = buf_.size();
+ }
+
+ const size_t size_before_string = buf_.size();
// Must first serialize the string, since the set is all offsets into
// buffer.
- auto off = CreateString(str, len);
+ const Offset<String> off = CreateString<Offset>(str, len);
auto it = string_pool->find(off);
// If it exists we reuse existing serialized data!
if (it != string_pool->end()) {
@@ -583,17 +670,27 @@ class FlatBufferBuilder {
}
/// @cond FLATBUFFERS_INTERNAL
- uoffset_t EndVector(size_t len) {
+ template<typename LenT = uoffset_t, typename ReturnT = uoffset_t>
+ ReturnT EndVector(size_t len) {
FLATBUFFERS_ASSERT(nested); // Hit if no corresponding StartVector.
nested = false;
- return PushElement(static_cast<uoffset_t>(len));
+ return PushElement<LenT, ReturnT>(static_cast<LenT>(len));
}
- void StartVector(size_t len, size_t elemsize) {
+ template<template<typename> class OffsetT = Offset, typename LenT = uint32_t>
+ void StartVector(size_t len, size_t elemsize, size_t alignment) {
NotNested();
nested = true;
- PreAlign<uoffset_t>(len * elemsize);
- PreAlign(len * elemsize, elemsize); // Just in case elemsize > uoffset_t.
+ // Align to the Length type of the vector (either 32-bit or 64-bit), so
+ // that the length of the buffer can be added without padding.
+ PreAlign<LenT>(len * elemsize);
+ PreAlign(len * elemsize, alignment); // Just in case elemsize > uoffset_t.
+ }
+
+ template<typename T, template<typename> class OffsetT = Offset,
+ typename LenT = uint32_t>
+ void StartVector(size_t len) {
+ return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
}
// Call this right before StartVector/CreateVector if you want to force the
@@ -618,31 +715,39 @@ class FlatBufferBuilder {
/// @brief Serialize an array into a FlatBuffer `vector`.
/// @tparam T The data type of the array elements.
+ /// @tparam OffsetT the type of offset to return
+ /// @tparam VectorT the type of vector to cast to.
/// @param[in] v A pointer to the array of type `T` to serialize into the
/// buffer as a `vector`.
/// @param[in] len The number of elements to serialize.
- /// @return Returns a typed `Offset` into the serialized data indicating
+ /// @return Returns a typed `TOffset` into the serialized data indicating
/// where the vector is stored.
- template<typename T> Offset<Vector<T>> CreateVector(const T *v, size_t len) {
+ template<typename T, template<typename...> class OffsetT = Offset,
+ template<typename...> class VectorT = Vector>
+ OffsetT<VectorT<T>> CreateVector(const T *v, size_t len) {
+ // The type of the length field in the vector.
+ typedef typename VectorT<T>::size_type LenT;
+ typedef typename OffsetT<VectorT<T>>::offset_type offset_type;
// If this assert hits, you're specifying a template argument that is
// causing the wrong overload to be selected, remove it.
AssertScalarT<T>();
- StartVector(len, sizeof(T));
- if (len == 0) { return Offset<Vector<T>>(EndVector(len)); }
- // clang-format off
- #if FLATBUFFERS_LITTLEENDIAN
- PushBytes(reinterpret_cast<const uint8_t *>(v), len * sizeof(T));
- #else
- if (sizeof(T) == 1) {
- PushBytes(reinterpret_cast<const uint8_t *>(v), len);
- } else {
- for (auto i = len; i > 0; ) {
- PushElement(v[--i]);
+ StartVector<T, OffsetT, LenT>(len);
+ if (len > 0) {
+ // clang-format off
+ #if FLATBUFFERS_LITTLEENDIAN
+ PushBytes(reinterpret_cast<const uint8_t *>(v), len * sizeof(T));
+ #else
+ if (sizeof(T) == 1) {
+ PushBytes(reinterpret_cast<const uint8_t *>(v), len);
+ } else {
+ for (auto i = len; i > 0; ) {
+ PushElement(v[--i]);
+ }
}
- }
- #endif
- // clang-format on
- return Offset<Vector<T>>(EndVector(len));
+ #endif
+ // clang-format on
+ }
+ return OffsetT<VectorT<T>>(EndVector<LenT, offset_type>(len));
}
/// @brief Serialize an array like object into a FlatBuffer `vector`.
@@ -668,7 +773,7 @@ class FlatBufferBuilder {
template<typename T>
Offset<Vector<Offset<T>>> CreateVector(const Offset<T> *v, size_t len) {
- StartVector(len, sizeof(Offset<T>));
+ StartVector<Offset<T>>(len);
for (auto i = len; i > 0;) { PushElement(v[--i]); }
return Offset<Vector<Offset<T>>>(EndVector(len));
}
@@ -684,11 +789,17 @@ class FlatBufferBuilder {
return CreateVector(data(v), v.size());
}
+ template<template<typename...> class VectorT = Vector64,
+ int &...ExplicitArgumentBarrier, typename T>
+ Offset64<VectorT<T>> CreateVector64(const std::vector<T> &v) {
+ return CreateVector<T, Offset64, VectorT>(data(v), v.size());
+ }
+
// vector<bool> may be implemented using a bit-set, so we can't access it as
// an array. Instead, read elements manually.
// Background: https://isocpp.org/blog/2012/11/on-vectorbool
Offset<Vector<uint8_t>> CreateVector(const std::vector<bool> &v) {
- StartVector(v.size(), sizeof(uint8_t));
+ StartVector<uint8_t>(v.size());
for (auto i = v.size(); i > 0;) {
PushElement(static_cast<uint8_t>(v[--i]));
}
@@ -762,7 +873,7 @@ class FlatBufferBuilder {
for (auto it = begin; it != end; ++it) {
buf_.scratch_push_small(CreateString(*it));
}
- StartVector(size, sizeof(Offset<String>));
+ StartVector<Offset<String>>(size);
for (auto i = 1; i <= size; i++) {
// Note we re-evaluate the buf location each iteration to account for any
// underlying buffer resizing that may occur.
@@ -780,47 +891,19 @@ class FlatBufferBuilder {
/// @param[in] len The number of elements to serialize.
/// @return Returns a typed `Offset` into the serialized data indicating
/// where the vector is stored.
- template<typename T>
- Offset<Vector<const T *>> CreateVectorOfStructs(const T *v, size_t len) {
- StartVector(len * sizeof(T) / AlignOf<T>(), AlignOf<T>());
+ template<typename T, template<typename...> class OffsetT = Offset,
+ template<typename...> class VectorT = Vector>
+ OffsetT<VectorT<const T *>> CreateVectorOfStructs(const T *v, size_t len) {
+ // The type of the length field in the vector.
+ typedef typename VectorT<T>::size_type LenT;
+ typedef typename OffsetT<VectorT<const T *>>::offset_type offset_type;
+
+ StartVector<OffsetT, LenT>(len * sizeof(T) / AlignOf<T>(), sizeof(T),
+ AlignOf<T>());
if (len > 0) {
PushBytes(reinterpret_cast<const uint8_t *>(v), sizeof(T) * len);
}
- return Offset<Vector<const T *>>(EndVector(len));
- }
-
- /// @brief Serialize an array of native structs into a FlatBuffer `vector`.
- /// @tparam T The data type of the struct array elements.
- /// @tparam S The data type of the native struct array elements.
- /// @param[in] v A pointer to the array of type `S` to serialize into the
- /// buffer as a `vector`.
- /// @param[in] len The number of elements to serialize.
- /// @param[in] pack_func Pointer to a function to convert the native struct
- /// to the FlatBuffer struct.
- /// @return Returns a typed `Offset` into the serialized data indicating
- /// where the vector is stored.
- template<typename T, typename S>
- Offset<Vector<const T *>> CreateVectorOfNativeStructs(
- const S *v, size_t len, T (*const pack_func)(const S &)) {
- FLATBUFFERS_ASSERT(pack_func);
- auto structs = StartVectorOfStructs<T>(len);
- for (size_t i = 0; i < len; i++) { structs[i] = pack_func(v[i]); }
- return EndVectorOfStructs<T>(len);
- }
-
- /// @brief Serialize an array of native structs into a FlatBuffer `vector`.
- /// @tparam T The data type of the struct array elements.
- /// @tparam S The data type of the native struct array elements.
- /// @param[in] v A pointer to the array of type `S` to serialize into the
- /// buffer as a `vector`.
- /// @param[in] len The number of elements to serialize.
- /// @return Returns a typed `Offset` into the serialized data indicating
- /// where the vector is stored.
- template<typename T, typename S>
- Offset<Vector<const T *>> CreateVectorOfNativeStructs(const S *v,
- size_t len) {
- extern T Pack(const S &);
- return CreateVectorOfNativeStructs(v, len, Pack);
+ return OffsetT<VectorT<const T *>>(EndVector<LenT, offset_type>(len));
}
/// @brief Serialize an array of structs into a FlatBuffer `vector`.
@@ -868,10 +951,52 @@ class FlatBufferBuilder {
/// serialize into the buffer as a `vector`.
/// @return Returns a typed `Offset` into the serialized data indicating
/// where the vector is stored.
- template<typename T, typename Alloc = std::allocator<T>>
- Offset<Vector<const T *>> CreateVectorOfStructs(
+ template<typename T, template<typename...> class OffsetT = Offset,
+ template<typename...> class VectorT = Vector,
+ typename Alloc = std::allocator<T>>
+ OffsetT<VectorT<const T *>> CreateVectorOfStructs(
const std::vector<T, Alloc> &v) {
- return CreateVectorOfStructs(data(v), v.size());
+ return CreateVectorOfStructs<T, OffsetT, VectorT>(data(v), v.size());
+ }
+
+ template<template<typename...> class VectorT = Vector64, int &..., typename T>
+ Offset64<VectorT<const T *>> CreateVectorOfStructs64(
+ const std::vector<T> &v) {
+ return CreateVectorOfStructs<T, Offset64, VectorT>(data(v), v.size());
+ }
+
+ /// @brief Serialize an array of native structs into a FlatBuffer `vector`.
+ /// @tparam T The data type of the struct array elements.
+ /// @tparam S The data type of the native struct array elements.
+ /// @param[in] v A pointer to the array of type `S` to serialize into the
+ /// buffer as a `vector`.
+ /// @param[in] len The number of elements to serialize.
+ /// @param[in] pack_func Pointer to a function to convert the native struct
+ /// to the FlatBuffer struct.
+ /// @return Returns a typed `Offset` into the serialized data indicating
+ /// where the vector is stored.
+ template<typename T, typename S>
+ Offset<Vector<const T *>> CreateVectorOfNativeStructs(
+ const S *v, size_t len, T (*const pack_func)(const S &)) {
+ FLATBUFFERS_ASSERT(pack_func);
+ auto structs = StartVectorOfStructs<T>(len);
+ for (size_t i = 0; i < len; i++) { structs[i] = pack_func(v[i]); }
+ return EndVectorOfStructs<T>(len);
+ }
+
+ /// @brief Serialize an array of native structs into a FlatBuffer `vector`.
+ /// @tparam T The data type of the struct array elements.
+ /// @tparam S The data type of the native struct array elements.
+ /// @param[in] v A pointer to the array of type `S` to serialize into the
+ /// buffer as a `vector`.
+ /// @param[in] len The number of elements to serialize.
+ /// @return Returns a typed `Offset` into the serialized data indicating
+ /// where the vector is stored.
+ template<typename T, typename S>
+ Offset<Vector<const T *>> CreateVectorOfNativeStructs(const S *v,
+ size_t len) {
+ extern T Pack(const S &);
+ return CreateVectorOfNativeStructs(v, len, Pack);
}
/// @brief Serialize a `std::vector` of native structs into a FlatBuffer
@@ -974,14 +1099,14 @@ class FlatBufferBuilder {
/// @cond FLATBUFFERS_INTERNAL
template<typename T> struct TableKeyComparator {
- TableKeyComparator(vector_downward &buf) : buf_(buf) {}
+ explicit TableKeyComparator(vector_downward<SizeT> &buf) : buf_(buf) {}
TableKeyComparator(const TableKeyComparator &other) : buf_(other.buf_) {}
bool operator()(const Offset<T> &a, const Offset<T> &b) const {
auto table_a = reinterpret_cast<T *>(buf_.data_at(a.o));
auto table_b = reinterpret_cast<T *>(buf_.data_at(b.o));
return table_a->KeyCompareLessThan(table_b);
}
- vector_downward &buf_;
+ vector_downward<SizeT> &buf_;
private:
FLATBUFFERS_DELETE_FUNC(
@@ -1025,16 +1150,22 @@ class FlatBufferBuilder {
/// written to at a later time to serialize the data into a `vector`
/// in the buffer.
uoffset_t CreateUninitializedVector(size_t len, size_t elemsize,
- uint8_t **buf) {
+ size_t alignment, uint8_t **buf) {
NotNested();
- StartVector(len, elemsize);
+ StartVector(len, elemsize, alignment);
buf_.make_space(len * elemsize);
- auto vec_start = GetSize();
+ const uoffset_t vec_start = GetSizeRelative32BitRegion();
auto vec_end = EndVector(len);
*buf = buf_.data_at(vec_start);
return vec_end;
}
+ FLATBUFFERS_ATTRIBUTE([[deprecated("call the version above instead")]])
+ uoffset_t CreateUninitializedVector(size_t len, size_t elemsize,
+ uint8_t **buf) {
+ return CreateUninitializedVector(len, elemsize, elemsize, buf);
+ }
+
/// @brief Specialized version of `CreateVector` for non-copying use cases.
/// Write the data any time later to the returned buffer pointer `buf`.
/// @tparam T The data type of the data that will be stored in the buffer
@@ -1046,14 +1177,14 @@ class FlatBufferBuilder {
template<typename T>
Offset<Vector<T>> CreateUninitializedVector(size_t len, T **buf) {
AssertScalarT<T>();
- return CreateUninitializedVector(len, sizeof(T),
+ return CreateUninitializedVector(len, sizeof(T), AlignOf<T>(),
reinterpret_cast<uint8_t **>(buf));
}
template<typename T>
Offset<Vector<const T *>> CreateUninitializedVectorOfStructs(size_t len,
T **buf) {
- return CreateUninitializedVector(len, sizeof(T),
+ return CreateUninitializedVector(len, sizeof(T), AlignOf<T>(),
reinterpret_cast<uint8_t **>(buf));
}
@@ -1064,7 +1195,7 @@ class FlatBufferBuilder {
Offset<Vector<T>> CreateVectorScalarCast(const U *v, size_t len) {
AssertScalarT<T>();
AssertScalarT<U>();
- StartVector(len, sizeof(T));
+ StartVector<T>(len);
for (auto i = len; i > 0;) { PushElement(static_cast<T>(v[--i])); }
return Offset<Vector<T>>(EndVector(len));
}
@@ -1074,7 +1205,8 @@ class FlatBufferBuilder {
NotNested();
Align(AlignOf<T>());
buf_.push_small(structobj);
- return Offset<const T *>(GetSize());
+ return Offset<const T *>(
+ CalculateOffset<typename Offset<const T *>::offset_type>());
}
/// @brief Finish serializing a buffer by writing the root offset.
@@ -1098,7 +1230,7 @@ class FlatBufferBuilder {
Finish(root.o, file_identifier, true);
}
- void SwapBufAllocator(FlatBufferBuilder &other) {
+ void SwapBufAllocator(FlatBufferBuilderImpl &other) {
buf_.swap_allocator(other.buf_);
}
@@ -1108,16 +1240,23 @@ class FlatBufferBuilder {
protected:
// You shouldn't really be copying instances of this class.
- FlatBufferBuilder(const FlatBufferBuilder &);
- FlatBufferBuilder &operator=(const FlatBufferBuilder &);
+ FlatBufferBuilderImpl(const FlatBufferBuilderImpl &);
+ FlatBufferBuilderImpl &operator=(const FlatBufferBuilderImpl &);
void Finish(uoffset_t root, const char *file_identifier, bool size_prefix) {
NotNested();
buf_.clear_scratch();
+
+ const size_t prefix_size = size_prefix ? sizeof(SizeT) : 0;
+ // Make sure we track the alignment of the size prefix.
+ TrackMinAlign(prefix_size);
+
+ const size_t root_offset_size = sizeof(uoffset_t);
+ const size_t file_id_size = file_identifier ? kFileIdentifierLength : 0;
+
// This will cause the whole buffer to be aligned.
- PreAlign((size_prefix ? sizeof(uoffset_t) : 0) + sizeof(uoffset_t) +
- (file_identifier ? kFileIdentifierLength : 0),
- minalign_);
+ PreAlign(prefix_size + root_offset_size + file_id_size, minalign_);
+
if (file_identifier) {
FLATBUFFERS_ASSERT(strlen(file_identifier) == kFileIdentifierLength);
PushBytes(reinterpret_cast<const uint8_t *>(file_identifier),
@@ -1133,7 +1272,7 @@ class FlatBufferBuilder {
voffset_t id;
};
- vector_downward buf_;
+ vector_downward<SizeT> buf_;
// Accumulating offsets of table members while it is being built.
// We store these in the scratch pad of buf_, after the vtable offsets.
@@ -1142,6 +1281,26 @@ class FlatBufferBuilder {
// possible vtable.
voffset_t max_voffset_;
+ // This is the length of the 64-bit region of the buffer. The buffer supports
+ // 64-bit offsets by forcing serialization of those elements in the "tail"
+ // region of the buffer (i.e. "64-bit region"). To properly keep track of
+ // offsets that are referenced from the tail of the buffer to not overflow
+ // their size (e.g. Offset is a uint32_t type), the boundary of the 32-/64-bit
+ // regions must be tracked.
+ //
+ // [ Complete FlatBuffer ]
+ // [32-bit region][64-bit region]
+ // ^ ^
+ // | Tail of the buffer.
+ // |
+ // Tail of the 32-bit region of the buffer.
+ //
+ // This keeps track of the size of the 64-bit region so that the tail of the
+ // 32-bit region can be calculated as `GetSize() - length_of_64_bit_region_`.
+ //
+ // This will remain 0 if no 64-bit offset types are added to the buffer.
+ size_t length_of_64_bit_region_;
+
// Ensure objects are not nested.
bool nested;
@@ -1155,14 +1314,15 @@ class FlatBufferBuilder {
bool dedup_vtables_;
struct StringOffsetCompare {
- StringOffsetCompare(const vector_downward &buf) : buf_(&buf) {}
+ explicit StringOffsetCompare(const vector_downward<SizeT> &buf)
+ : buf_(&buf) {}
bool operator()(const Offset<String> &a, const Offset<String> &b) const {
auto stra = reinterpret_cast<const String *>(buf_->data_at(a.o));
auto strb = reinterpret_cast<const String *>(buf_->data_at(b.o));
return StringLessThan(stra->data(), stra->size(), strb->data(),
strb->size());
}
- const vector_downward *buf_;
+ const vector_downward<SizeT> *buf_;
};
// For use with CreateSharedString. Instantiated on first use only.
@@ -1170,22 +1330,122 @@ class FlatBufferBuilder {
StringOffsetMap *string_pool;
private:
+ void CanAddOffset64() {
+ // If you hit this assertion, you are attempting to add a 64-bit offset to
+ // a 32-bit only builder. This is because the builder has overloads that
+ // differ only on the offset size returned: e.g.:
+ //
+ // FlatBufferBuilder builder;
+ // Offset64<String> string_offset = builder.CreateString<Offset64>();
+ //
+ // Either use a 64-bit aware builder, or don't try to create an Offset64
+ // return type.
+ //
+ // TODO(derekbailey): we can probably do more enable_if to avoid this
+ // looking like its possible to the user.
+ static_assert(Is64Aware, "cannot add 64-bit offset to a 32-bit builder");
+
+ // If you hit this assertion, you are attempting to add an 64-bit offset
+ // item after already serializing a 32-bit item. All 64-bit offsets have to
+ // added to the tail of the buffer before any 32-bit items can be added.
+ // Otherwise some items might not be addressable due to the maximum range of
+ // the 32-bit offset.
+ FLATBUFFERS_ASSERT(GetSize() == length_of_64_bit_region_);
+ }
+
+ /// @brief Store a string in the buffer, which can contain any binary data.
+ /// @param[in] str A const char pointer to the data to be stored as a string.
+ /// @param[in] len The number of bytes that should be stored from `str`.
+ /// @return Returns the offset in the buffer where the string starts.
+ void CreateStringImpl(const char *str, size_t len) {
+ NotNested();
+ PreAlign<uoffset_t>(len + 1); // Always 0-terminated.
+ buf_.fill(1);
+ PushBytes(reinterpret_cast<const uint8_t *>(str), len);
+ PushElement(static_cast<uoffset_t>(len));
+ }
+
// Allocates space for a vector of structures.
// Must be completed with EndVectorOfStructs().
- template<typename T> T *StartVectorOfStructs(size_t vector_size) {
- StartVector(vector_size * sizeof(T) / AlignOf<T>(), AlignOf<T>());
+ template<typename T, template<typename> class OffsetT = Offset>
+ T *StartVectorOfStructs(size_t vector_size) {
+ StartVector<OffsetT>(vector_size * sizeof(T) / AlignOf<T>(), sizeof(T),
+ AlignOf<T>());
return reinterpret_cast<T *>(buf_.make_space(vector_size * sizeof(T)));
}
// End the vector of structures in the flatbuffers.
// Vector should have previously be started with StartVectorOfStructs().
+ template<typename T, template<typename> class OffsetT = Offset>
+ OffsetT<Vector<const T *>> EndVectorOfStructs(size_t vector_size) {
+ return OffsetT<Vector<const T *>>(
+ EndVector<typename Vector<const T *>::size_type,
+ typename OffsetT<Vector<const T *>>::offset_type>(
+ vector_size));
+ }
+
template<typename T>
- Offset<Vector<const T *>> EndVectorOfStructs(size_t vector_size) {
- return Offset<Vector<const T *>>(EndVector(vector_size));
+ typename std::enable_if<std::is_same<T, uoffset_t>::value, T>::type
+ CalculateOffset() {
+ // Default to the end of the 32-bit region. This may or may not be the end
+ // of the buffer, depending on if any 64-bit offsets have been added.
+ return GetSizeRelative32BitRegion();
+ }
+
+ // Specializations to handle the 64-bit CalculateOffset, which is relative to
+ // end of the buffer.
+ template<typename T>
+ typename std::enable_if<std::is_same<T, uoffset64_t>::value, T>::type
+ CalculateOffset() {
+ // This should never be compiled in when not using a 64-bit builder.
+ static_assert(Is64Aware, "invalid 64-bit offset in 32-bit builder");
+
+ // Store how big the 64-bit region of the buffer is, so we can determine
+ // where the 32/64 bit boundary is.
+ length_of_64_bit_region_ = GetSize();
+
+ return length_of_64_bit_region_;
}
};
/// @}
+// Hack to `FlatBufferBuilder` mean `FlatBufferBuilder<false>` or
+// `FlatBufferBuilder<>`, where the template < > syntax is required.
+using FlatBufferBuilder = FlatBufferBuilderImpl<false>;
+using FlatBufferBuilder64 = FlatBufferBuilderImpl<true>;
+
+// These are external due to GCC not allowing them in the class.
+// See: https://stackoverflow.com/q/8061456/868247
+template<>
+template<>
+inline Offset64<String> FlatBufferBuilder64::CreateString(const char *str,
+ size_t len) {
+ CanAddOffset64();
+ CreateStringImpl(str, len);
+ return Offset64<String>(
+ CalculateOffset<typename Offset64<String>::offset_type>());
+}
+
+// Used to distinguish from real Offsets.
+template<typename T = void> struct EmptyOffset {};
+
+// TODO(derekbailey): it would be nice to combine these two methods.
+template<>
+template<>
+inline void FlatBufferBuilder64::StartVector<Offset64, uint32_t>(
+ size_t len, size_t elemsize, size_t alignment) {
+ CanAddOffset64();
+ StartVector<EmptyOffset, uint32_t>(len, elemsize, alignment);
+}
+
+template<>
+template<>
+inline void FlatBufferBuilder64::StartVector<Offset64, uint64_t>(
+ size_t len, size_t elemsize, size_t alignment) {
+ CanAddOffset64();
+ StartVector<EmptyOffset, uint64_t>(len, elemsize, alignment);
+}
+
/// Helpers to get a typed pointer to objects that are currently being built.
/// @warning Creating new objects will lead to reallocations and invalidates
/// the pointer!
@@ -1200,15 +1460,6 @@ const T *GetTemporaryPointer(FlatBufferBuilder &fbb, Offset<T> offset) {
return GetMutableTemporaryPointer<T>(fbb, offset);
}
-template<typename T>
-void FlatBufferBuilder::Required(Offset<T> table, voffset_t field) {
- auto table_ptr = reinterpret_cast<const Table *>(buf_.data_at(table.o));
- bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
- // If this fails, the caller will show what field needs to be set.
- FLATBUFFERS_ASSERT(ok);
- (void)ok;
-}
-
} // namespace flatbuffers
-#endif // FLATBUFFERS_VECTOR_DOWNWARD_H_
+#endif // FLATBUFFERS_FLATBUFFER_BUILDER_H_
diff --git a/executor/_include/flatbuffers/flatbuffers.h b/executor/_include/flatbuffers/flatbuffers.h
index 642178897..bc828a313 100644
--- a/executor/_include/flatbuffers/flatbuffers.h
+++ b/executor/_include/flatbuffers/flatbuffers.h
@@ -17,6 +17,8 @@
#ifndef FLATBUFFERS_H_
#define FLATBUFFERS_H_
+#include <algorithm>
+
// TODO: These includes are for mitigating the pains of users editing their
// source because they relied on flatbuffers.h to include everything for them.
#include "flatbuffers/array.h"
@@ -74,8 +76,20 @@ inline const uint8_t *GetBufferStartFromRootPointer(const void *root) {
}
/// @brief This return the prefixed size of a FlatBuffer.
-inline uoffset_t GetPrefixedSize(const uint8_t *buf) {
- return ReadScalar<uoffset_t>(buf);
+template<typename SizeT = uoffset_t>
+inline SizeT GetPrefixedSize(const uint8_t *buf) {
+ return ReadScalar<SizeT>(buf);
+}
+
+// Gets the total length of the buffer given a sized prefixed FlatBuffer.
+//
+// This includes the size of the prefix as well as the buffer:
+//
+// [size prefix][flatbuffer]
+// |---------length--------|
+template<typename SizeT = uoffset_t>
+inline SizeT GetSizePrefixedBufferLength(const uint8_t *const buf) {
+ return ReadScalar<SizeT>(buf) + sizeof(SizeT);
}
// Base class for native objects (FlatBuffer data de-serialized into native
diff --git a/executor/_include/flatbuffers/flatc.h b/executor/_include/flatbuffers/flatc.h
index af4ccae70..e98eb80d7 100644
--- a/executor/_include/flatbuffers/flatc.h
+++ b/executor/_include/flatbuffers/flatc.h
@@ -19,9 +19,11 @@
#include <functional>
#include <limits>
+#include <list>
+#include <memory>
#include <string>
-#include "flatbuffers/bfbs_generator.h"
+#include "flatbuffers/code_generator.h"
#include "flatbuffers/flatbuffers.h"
#include "flatbuffers/idl.h"
#include "flatbuffers/util.h"
@@ -31,6 +33,34 @@ namespace flatbuffers {
extern void LogCompilerWarn(const std::string &warn);
extern void LogCompilerError(const std::string &err);
+struct FlatCOptions {
+ IDLOptions opts;
+
+ std::string program_name;
+
+ std::string output_path;
+
+ std::vector<std::string> filenames;
+
+ std::list<std::string> include_directories_storage;
+ std::vector<const char *> include_directories;
+ std::vector<const char *> conform_include_directories;
+ std::vector<bool> generator_enabled;
+ size_t binary_files_from = std::numeric_limits<size_t>::max();
+ std::string conform_to_schema;
+ std::string annotate_schema;
+ bool annotate_include_vector_contents = true;
+ bool any_generator = false;
+ bool print_make_rules = false;
+ bool raw_binary = false;
+ bool schema_binary = false;
+ bool grpc_enabled = false;
+ bool requires_bfbs = false;
+ bool file_names_only = false;
+
+ std::vector<std::shared_ptr<CodeGenerator>> generators;
+};
+
struct FlatCOption {
std::string short_opt;
std::string long_opt;
@@ -40,29 +70,6 @@ struct FlatCOption {
class FlatCompiler {
public:
- // Output generator for the various programming languages and formats we
- // support.
- struct Generator {
- typedef bool (*GenerateFn)(const flatbuffers::Parser &parser,
- const std::string &path,
- const std::string &file_name);
- typedef std::string (*MakeRuleFn)(const flatbuffers::Parser &parser,
- const std::string &path,
- const std::string &file_name);
- typedef bool (*ParsingCompletedFn)(const flatbuffers::Parser &parser,
- const std::string &output_path);
-
- GenerateFn generate;
- const char *lang_name;
- bool schema_only;
- GenerateFn generateGRPC;
- flatbuffers::IDLOptions::Language lang;
- FlatCOption option;
- MakeRuleFn make_rule;
- BfbsGenerator *bfbs_generator;
- ParsingCompletedFn parsing_completed;
- };
-
typedef void (*WarnFn)(const FlatCompiler *flatc, const std::string &warn,
bool show_exe_name);
@@ -71,29 +78,29 @@ class FlatCompiler {
// Parameters required to initialize the FlatCompiler.
struct InitParams {
- InitParams()
- : generators(nullptr),
- num_generators(0),
- warn_fn(nullptr),
- error_fn(nullptr) {}
-
- const Generator *generators;
- size_t num_generators;
+ InitParams() : warn_fn(nullptr), error_fn(nullptr) {}
+
WarnFn warn_fn;
ErrorFn error_fn;
};
explicit FlatCompiler(const InitParams &params) : params_(params) {}
- int Compile(int argc, const char **argv);
+ bool RegisterCodeGenerator(const FlatCOption &option,
+ std::shared_ptr<CodeGenerator> code_generator);
+
+ int Compile(const FlatCOptions &options);
+
+ std::string GetShortUsageString(const std::string &program_name) const;
+ std::string GetUsageString(const std::string &program_name) const;
- std::string GetShortUsageString(const char *program_name) const;
- std::string GetUsageString(const char *program_name) const;
+ // Parse the FlatC options from command line arguments.
+ FlatCOptions ParseFromCommandLineArguments(int argc, const char **argv);
private:
void ParseFile(flatbuffers::Parser &parser, const std::string &filename,
const std::string &contents,
- std::vector<const char *> &include_directories) const;
+ const std::vector<const char *> &include_directories) const;
void LoadBinarySchema(Parser &parser, const std::string &filename,
const std::string &contents);
@@ -105,8 +112,16 @@ class FlatCompiler {
void AnnotateBinaries(const uint8_t *binary_schema,
uint64_t binary_schema_size,
- const std::string & schema_filename,
- const std::vector<std::string> &binary_files);
+ const FlatCOptions &options);
+
+ void ValidateOptions(const FlatCOptions &options);
+
+ Parser GetConformParser(const FlatCOptions &options);
+
+ std::unique_ptr<Parser> GenerateCode(const FlatCOptions &options,
+ Parser &conform_parser);
+
+ std::map<std::string, std::shared_ptr<CodeGenerator>> code_generators_;
InitParams params_;
};
diff --git a/executor/_include/flatbuffers/flexbuffers.h b/executor/_include/flatbuffers/flexbuffers.h
index 7bf84302e..8e8cac144 100644
--- a/executor/_include/flatbuffers/flexbuffers.h
+++ b/executor/_include/flatbuffers/flexbuffers.h
@@ -17,6 +17,7 @@
#ifndef FLATBUFFERS_FLEXBUFFERS_H_
#define FLATBUFFERS_FLEXBUFFERS_H_
+#include <algorithm>
#include <map>
// Used to select STL variant.
#include "flatbuffers/base.h"
@@ -382,10 +383,10 @@ class Reference {
type_(type) {}
Reference(const uint8_t *data, uint8_t parent_width, uint8_t packed_type)
- : data_(data), parent_width_(parent_width) {
- byte_width_ = 1U << static_cast<BitWidth>(packed_type & 3);
- type_ = static_cast<Type>(packed_type >> 2);
- }
+ : data_(data),
+ parent_width_(parent_width),
+ byte_width_(static_cast<uint8_t>(1 << (packed_type & 3))),
+ type_(static_cast<Type>(packed_type >> 2)) {}
Type GetType() const { return type_; }
@@ -1423,12 +1424,10 @@ class Builder FLATBUFFERS_FINAL_CLASS {
template<typename T> static Type GetScalarType() {
static_assert(flatbuffers::is_scalar<T>::value, "Unrelated types");
- return flatbuffers::is_floating_point<T>::value
- ? FBT_FLOAT
- : flatbuffers::is_same<T, bool>::value
- ? FBT_BOOL
- : (flatbuffers::is_unsigned<T>::value ? FBT_UINT
- : FBT_INT);
+ return flatbuffers::is_floating_point<T>::value ? FBT_FLOAT
+ : flatbuffers::is_same<T, bool>::value
+ ? FBT_BOOL
+ : (flatbuffers::is_unsigned<T>::value ? FBT_UINT : FBT_INT);
}
public:
@@ -1844,7 +1843,7 @@ class Verifier FLATBUFFERS_FINAL_CLASS {
uint8_t len = 0;
auto vtype = ToFixedTypedVectorElementType(r.type_, &len);
if (!VerifyType(vtype)) return false;
- return VerifyFromPointer(p, r.byte_width_ * len);
+ return VerifyFromPointer(p, static_cast<size_t>(r.byte_width_) * len);
}
default: return false;
}
diff --git a/executor/_include/flatbuffers/grpc.h b/executor/_include/flatbuffers/grpc.h
index 5d15bc51c..7472c31d4 100644
--- a/executor/_include/flatbuffers/grpc.h
+++ b/executor/_include/flatbuffers/grpc.h
@@ -20,7 +20,6 @@
// Helper functionality to glue FlatBuffers and GRPC.
#include "flatbuffers/flatbuffers.h"
-#include "grpc/byte_buffer_reader.h"
#include "grpcpp/support/byte_buffer.h"
#include "grpcpp/support/slice.h"
diff --git a/executor/_include/flatbuffers/idl.h b/executor/_include/flatbuffers/idl.h
index 4cfd7ebfb..ad45d3115 100644
--- a/executor/_include/flatbuffers/idl.h
+++ b/executor/_include/flatbuffers/idl.h
@@ -17,6 +17,7 @@
#ifndef FLATBUFFERS_IDL_H_
#define FLATBUFFERS_IDL_H_
+#include <algorithm>
#include <functional>
#include <map>
#include <memory>
@@ -44,26 +45,27 @@ namespace flatbuffers {
// of type tokens.
// clang-format off
#define FLATBUFFERS_GEN_TYPES_SCALAR(TD) \
- TD(NONE, "", uint8_t, byte, byte, byte, uint8, u8, UByte, UInt8) \
- TD(UTYPE, "", uint8_t, byte, byte, byte, uint8, u8, UByte, UInt8) /* begin scalar/int */ \
- TD(BOOL, "bool", uint8_t, boolean,bool, bool, bool, bool, Boolean, Bool) \
- TD(CHAR, "byte", int8_t, byte, int8, sbyte, int8, i8, Byte, Int8) \
- TD(UCHAR, "ubyte", uint8_t, byte, byte, byte, uint8, u8, UByte, UInt8) \
- TD(SHORT, "short", int16_t, short, int16, short, int16, i16, Short, Int16) \
- TD(USHORT, "ushort", uint16_t, short, uint16, ushort, uint16, u16, UShort, UInt16) \
- TD(INT, "int", int32_t, int, int32, int, int32, i32, Int, Int32) \
- TD(UINT, "uint", uint32_t, int, uint32, uint, uint32, u32, UInt, UInt32) \
- TD(LONG, "long", int64_t, long, int64, long, int64, i64, Long, Int64) \
- TD(ULONG, "ulong", uint64_t, long, uint64, ulong, uint64, u64, ULong, UInt64) /* end int */ \
- TD(FLOAT, "float", float, float, float32, float, float32, f32, Float, Float32) /* begin float */ \
- TD(DOUBLE, "double", double, double, float64, double, float64, f64, Double, Double) /* end float/scalar */
+ TD(NONE, "", uint8_t, byte, byte, byte, uint8, u8, UByte, UInt8, 0) \
+ TD(UTYPE, "", uint8_t, byte, byte, byte, uint8, u8, UByte, UInt8, 1) /* begin scalar/int */ \
+ TD(BOOL, "bool", uint8_t, boolean,bool, bool, bool, bool, Boolean, Bool, 2) \
+ TD(CHAR, "byte", int8_t, byte, int8, sbyte, int8, i8, Byte, Int8, 3) \
+ TD(UCHAR, "ubyte", uint8_t, byte, byte, byte, uint8, u8, UByte, UInt8, 4) \
+ TD(SHORT, "short", int16_t, short, int16, short, int16, i16, Short, Int16, 5) \
+ TD(USHORT, "ushort", uint16_t, short, uint16, ushort, uint16, u16, UShort, UInt16, 6) \
+ TD(INT, "int", int32_t, int, int32, int, int32, i32, Int, Int32, 7) \
+ TD(UINT, "uint", uint32_t, int, uint32, uint, uint32, u32, UInt, UInt32, 8) \
+ TD(LONG, "long", int64_t, long, int64, long, int64, i64, Long, Int64, 9) \
+ TD(ULONG, "ulong", uint64_t, long, uint64, ulong, uint64, u64, ULong, UInt64, 10) /* end int */ \
+ TD(FLOAT, "float", float, float, float32, float, float32, f32, Float, Float32, 11) /* begin float */ \
+ TD(DOUBLE, "double", double, double, float64, double, float64, f64, Double, Double, 12) /* end float/scalar */
#define FLATBUFFERS_GEN_TYPES_POINTER(TD) \
- TD(STRING, "string", Offset<void>, int, int, StringOffset, int, unused, Int, Offset<String>) \
- TD(VECTOR, "", Offset<void>, int, int, VectorOffset, int, unused, Int, Offset<UOffset>) \
- TD(STRUCT, "", Offset<void>, int, int, int, int, unused, Int, Offset<UOffset>) \
- TD(UNION, "", Offset<void>, int, int, int, int, unused, Int, Offset<UOffset>)
+ TD(STRING, "string", Offset<void>, int, int, StringOffset, int, unused, Int, Offset<String>, 13) \
+ TD(VECTOR, "", Offset<void>, int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 14) \
+ TD(VECTOR64, "", Offset64<void>, int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 18) \
+ TD(STRUCT, "", Offset<void>, int, int, int, int, unused, Int, Offset<UOffset>, 15) \
+ TD(UNION, "", Offset<void>, int, int, int, int, unused, Int, Offset<UOffset>, 16)
#define FLATBUFFERS_GEN_TYPE_ARRAY(TD) \
- TD(ARRAY, "", int, int, int, int, int, unused, Int, Offset<UOffset>)
+ TD(ARRAY, "", int, int, int, int, int, unused, Int, Offset<UOffset>, 17)
// The fields are:
// - enum
// - FlatBuffers schema type.
@@ -74,13 +76,15 @@ namespace flatbuffers {
// - Python type.
// - Kotlin type.
// - Rust type.
+// - Swift type.
+// - enum value (matches the reflected values)
// using these macros, we can now write code dealing with types just once, e.g.
/*
switch (type) {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, \
- RTYPE, KTYPE) \
+ RTYPE, KTYPE, STYPE, ...) \
case BASE_TYPE_ ## ENUM: \
// do something specific to CTYPE here
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
@@ -112,8 +116,9 @@ switch (type) {
__extension__ // Stop GCC complaining about trailing comma with -Wpendantic.
#endif
enum BaseType {
- #define FLATBUFFERS_TD(ENUM, ...) \
- BASE_TYPE_ ## ENUM,
+ #define FLATBUFFERS_TD(ENUM, IDLTYPE, \
+ CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE, STYPE, ENUM_VALUE) \
+ BASE_TYPE_ ## ENUM = ENUM_VALUE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD
};
@@ -135,6 +140,8 @@ inline bool IsLong (BaseType t) { return t == BASE_TYPE_LONG ||
inline bool IsBool (BaseType t) { return t == BASE_TYPE_BOOL; }
inline bool IsOneByte(BaseType t) { return t >= BASE_TYPE_UTYPE &&
t <= BASE_TYPE_UCHAR; }
+inline bool IsVector (BaseType t) { return t == BASE_TYPE_VECTOR ||
+ t == BASE_TYPE_VECTOR64; }
inline bool IsUnsigned(BaseType t) {
return (t == BASE_TYPE_UTYPE) || (t == BASE_TYPE_UCHAR) ||
@@ -142,12 +149,40 @@ inline bool IsUnsigned(BaseType t) {
(t == BASE_TYPE_ULONG);
}
-// clang-format on
+inline size_t SizeOf(const BaseType t) {
+ switch (t) {
+ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
+ case BASE_TYPE_##ENUM: return sizeof(CTYPE);
+ FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
+ #undef FLATBUFFERS_TD
+ default: FLATBUFFERS_ASSERT(0);
+ }
+ return 0;
+}
-extern const char *const kTypeNames[];
-extern const char kTypeSizes[];
+inline const char* TypeName(const BaseType t) {
+ switch (t) {
+ #define FLATBUFFERS_TD(ENUM, IDLTYPE, ...) \
+ case BASE_TYPE_##ENUM: return IDLTYPE;
+ FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
+ #undef FLATBUFFERS_TD
+ default: FLATBUFFERS_ASSERT(0);
+ }
+ return nullptr;
+}
-inline size_t SizeOf(BaseType t) { return kTypeSizes[t]; }
+inline const char* StringOf(const BaseType t) {
+ switch (t) {
+ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
+ case BASE_TYPE_##ENUM: return #CTYPE;
+ FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
+ #undef FLATBUFFERS_TD
+ default: FLATBUFFERS_ASSERT(0);
+ }
+ return "";
+}
+
+// clang-format on
struct StructDef;
struct EnumDef;
@@ -178,7 +213,8 @@ struct Type {
bool Deserialize(const Parser &parser, const reflection::Type *type);
BaseType base_type;
- BaseType element; // only set if t == BASE_TYPE_VECTOR
+ BaseType element; // only set if t == BASE_TYPE_VECTOR or
+ // BASE_TYPE_VECTOR64
StructDef *struct_def; // only set if t or element == BASE_TYPE_STRUCT
EnumDef *enum_def; // set if t == BASE_TYPE_UNION / BASE_TYPE_UTYPE,
// or for an integral type derived from an enum.
@@ -294,9 +330,11 @@ struct FieldDef : public Definition {
shared(false),
native_inline(false),
flexbuffer(false),
+ offset64(false),
presence(kDefault),
nested_flatbuffer(nullptr),
- padding(0) {}
+ padding(0),
+ sibling_union_field(nullptr) {}
Offset<reflection::Field> Serialize(FlatBufferBuilder *builder, uint16_t id,
const Parser &parser) const;
@@ -319,6 +357,7 @@ struct FieldDef : public Definition {
bool native_inline; // Field will be defined inline (instead of as a pointer)
// for native tables if field is a struct.
bool flexbuffer; // This field contains FlexBuffer data.
+ bool offset64; // If the field uses 64-bit offsets.
enum Presence {
// Field must always be present.
@@ -341,6 +380,12 @@ struct FieldDef : public Definition {
StructDef *nested_flatbuffer; // This field contains nested FlatBuffer data.
size_t padding; // Bytes to always pad after this field.
+
+ // sibling_union_field is always set to nullptr. The only exception is
+ // when FieldDef is a union field or an union type field. Therefore,
+ // sibling_union_field on a union field points to the union type field
+ // and vice-versa.
+ FieldDef *sibling_union_field;
};
struct StructDef : public Definition {
@@ -373,6 +418,7 @@ struct StructDef : public Definition {
size_t bytesize; // Size if fixed.
flatbuffers::unique_ptr<std::string> original_location;
+ std::vector<voffset_t> reserved_ids;
};
struct EnumDef;
@@ -382,7 +428,14 @@ struct EnumVal {
Offset<reflection::EnumVal> Serialize(FlatBufferBuilder *builder,
const Parser &parser) const;
- bool Deserialize(const Parser &parser, const reflection::EnumVal *val);
+ bool Deserialize(Parser &parser, const reflection::EnumVal *val);
+
+ flatbuffers::Offset<
+ flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>>>
+ SerializeAttributes(FlatBufferBuilder *builder, const Parser &parser) const;
+
+ bool DeserializeAttributes(Parser &parser,
+ const Vector<Offset<reflection::KeyValue>> *attrs);
uint64_t GetAsUInt64() const { return static_cast<uint64_t>(value); }
int64_t GetAsInt64() const { return value; }
@@ -392,6 +445,7 @@ struct EnumVal {
std::string name;
std::vector<std::string> doc_comment;
Type union_type;
+ SymbolTable<Value> attributes;
private:
friend EnumDef;
@@ -464,6 +518,10 @@ inline bool IsStruct(const Type &type) {
return type.base_type == BASE_TYPE_STRUCT && type.struct_def->fixed;
}
+inline bool IsIncompleteStruct(const Type &type) {
+ return type.base_type == BASE_TYPE_STRUCT && type.struct_def->predecl;
+}
+
inline bool IsTable(const Type &type) {
return type.base_type == BASE_TYPE_STRUCT && !type.struct_def->fixed;
}
@@ -476,15 +534,13 @@ inline bool IsUnionType(const Type &type) {
return IsUnion(type) && IsInteger(type.base_type);
}
-inline bool IsVector(const Type &type) {
- return type.base_type == BASE_TYPE_VECTOR;
-}
+inline bool IsVector(const Type &type) { return IsVector(type.base_type); }
-inline bool IsVectorOfStruct(const Type& type) {
+inline bool IsVectorOfStruct(const Type &type) {
return IsVector(type) && IsStruct(type.VectorType());
}
-inline bool IsVectorOfTable(const Type& type) {
+inline bool IsVectorOfTable(const Type &type) {
return IsVector(type) && IsTable(type.VectorType());
}
@@ -528,8 +584,11 @@ inline bool operator!=(const EnumVal &lhs, const EnumVal &rhs) {
inline bool EqualByName(const Type &a, const Type &b) {
return a.base_type == b.base_type && a.element == b.element &&
(a.struct_def == b.struct_def ||
- a.struct_def->name == b.struct_def->name) &&
- (a.enum_def == b.enum_def || a.enum_def->name == b.enum_def->name);
+ (a.struct_def != nullptr && b.struct_def != nullptr &&
+ a.struct_def->name == b.struct_def->name)) &&
+ (a.enum_def == b.enum_def ||
+ (a.enum_def != nullptr && b.enum_def != nullptr &&
+ a.enum_def->name == b.enum_def->name));
}
struct RPCCall : public Definition {
@@ -571,16 +630,18 @@ inline bool operator<(const IncludedFile &a, const IncludedFile &b) {
struct IDLOptions {
// field case style options for C++
enum CaseStyle { CaseStyle_Unchanged = 0, CaseStyle_Upper, CaseStyle_Lower };
-
+ enum class ProtoIdGapAction { NO_OP, WARNING, ERROR };
bool gen_jvmstatic;
// Use flexbuffers instead for binary and text generation
bool use_flexbuffers;
bool strict_json;
bool output_default_scalars_in_json;
int indent_step;
+ bool cpp_minify_enums;
bool output_enum_identifiers;
bool prefixed_enums;
bool scoped_enums;
+ bool emit_min_max_enum_values;
bool swift_implementation_only;
bool include_dependence_headers;
bool mutable_buffer;
@@ -598,6 +659,7 @@ struct IDLOptions {
CaseStyle cpp_object_api_field_case_style;
bool cpp_direct_copy;
bool gen_nullable;
+ std::string java_package_prefix;
bool java_checkerframework;
bool gen_generated;
bool gen_json_coders;
@@ -613,6 +675,7 @@ struct IDLOptions {
bool binary_schema_gen_embed;
std::string go_import;
std::string go_namespace;
+ std::string go_module_name;
bool protobuf_ascii_alike;
bool size_prefixed;
std::string root_type;
@@ -632,8 +695,15 @@ struct IDLOptions {
bool json_nested_flatbuffers;
bool json_nested_flexbuffers;
bool json_nested_legacy_flatbuffers;
- bool ts_flat_file;
+ bool ts_flat_files;
+ bool ts_entry_points;
+ bool ts_no_import_ext;
bool no_leak_private_annotations;
+ bool require_json_eof;
+ bool keep_proto_id;
+ bool python_no_type_prefix_suffix;
+ bool python_typing;
+ ProtoIdGapAction proto_id_gap_action;
// Possible options for the more general generator below.
enum Language {
@@ -653,6 +723,8 @@ struct IDLOptions {
kRust = 1 << 14,
kKotlin = 1 << 15,
kSwift = 1 << 16,
+ kNim = 1 << 17,
+ kProto = 1 << 18,
kMAX
};
@@ -687,9 +759,11 @@ struct IDLOptions {
strict_json(false),
output_default_scalars_in_json(false),
indent_step(2),
+ cpp_minify_enums(false),
output_enum_identifiers(true),
prefixed_enums(true),
scoped_enums(false),
+ emit_min_max_enum_values(true),
swift_implementation_only(false),
include_dependence_headers(true),
mutable_buffer(false),
@@ -732,8 +806,15 @@ struct IDLOptions {
json_nested_flatbuffers(true),
json_nested_flexbuffers(true),
json_nested_legacy_flatbuffers(false),
- ts_flat_file(false),
+ ts_flat_files(false),
+ ts_entry_points(false),
+ ts_no_import_ext(false),
no_leak_private_annotations(false),
+ require_json_eof(true),
+ keep_proto_id(false),
+ python_no_type_prefix_suffix(false),
+ python_typing(false),
+ proto_id_gap_action(ProtoIdGapAction::WARNING),
mini_reflect(IDLOptions::kNone),
require_explicit_ids(false),
rust_serialize(false),
@@ -746,7 +827,8 @@ struct IDLOptions {
// This encapsulates where the parser is in the current source file.
struct ParserState {
ParserState()
- : cursor_(nullptr),
+ : prev_cursor_(nullptr),
+ cursor_(nullptr),
line_start_(nullptr),
line_(0),
token_(-1),
@@ -754,6 +836,7 @@ struct ParserState {
protected:
void ResetState(const char *source) {
+ prev_cursor_ = source;
cursor_ = source;
line_ = 0;
MarkNewLine();
@@ -769,6 +852,7 @@ struct ParserState {
return static_cast<int64_t>(cursor_ - line_start_);
}
+ const char *prev_cursor_;
const char *cursor_;
const char *line_start_;
int line_; // the current line being parsed
@@ -872,8 +956,22 @@ class Parser : public ParserState {
known_attributes_["native_default"] = true;
known_attributes_["flexbuffer"] = true;
known_attributes_["private"] = true;
+
+ // An attribute added to a field to indicate that is uses 64-bit addressing.
+ known_attributes_["offset64"] = true;
+
+ // An attribute added to a vector field to indicate that it uses 64-bit
+ // addressing and it has a 64-bit length.
+ known_attributes_["vector64"] = true;
}
+ // Copying is not allowed
+ Parser(const Parser &) = delete;
+ Parser &operator=(const Parser &) = delete;
+
+ Parser(Parser &&) = default;
+ Parser &operator=(Parser &&) = default;
+
~Parser() {
for (auto it = namespaces_.begin(); it != namespaces_.end(); ++it) {
delete *it;
@@ -896,6 +994,9 @@ class Parser : public ParserState {
bool ParseJson(const char *json, const char *json_filename = nullptr);
+ // Returns the number of characters were consumed when parsing a JSON string.
+ std::ptrdiff_t BytesConsumed() const;
+
// Set the root type. May override the one set in the schema.
bool SetRootType(const char *name);
@@ -972,7 +1073,7 @@ class Parser : public ParserState {
FLATBUFFERS_CHECKED_ERROR ParseAnyValue(Value &val, FieldDef *field,
size_t parent_fieldn,
const StructDef *parent_struct_def,
- uoffset_t count,
+ size_t count,
bool inside_vector = false);
template<typename F>
FLATBUFFERS_CHECKED_ERROR ParseTableDelimiters(size_t &fieldn,
@@ -984,7 +1085,7 @@ class Parser : public ParserState {
void SerializeStruct(FlatBufferBuilder &builder, const StructDef &struct_def,
const Value &val);
template<typename F>
- FLATBUFFERS_CHECKED_ERROR ParseVectorDelimiters(uoffset_t &count, F body);
+ FLATBUFFERS_CHECKED_ERROR ParseVectorDelimiters(size_t &count, F body);
FLATBUFFERS_CHECKED_ERROR ParseVector(const Type &type, uoffset_t *ovalue,
FieldDef *field, size_t fieldn);
FLATBUFFERS_CHECKED_ERROR ParseArray(Value &array);
@@ -1016,6 +1117,7 @@ class Parser : public ParserState {
FLATBUFFERS_CHECKED_ERROR ParseService(const char *filename);
FLATBUFFERS_CHECKED_ERROR ParseProtoFields(StructDef *struct_def,
bool isextend, bool inside_oneof);
+ FLATBUFFERS_CHECKED_ERROR ParseProtoMapField(StructDef *struct_def);
FLATBUFFERS_CHECKED_ERROR ParseProtoOption();
FLATBUFFERS_CHECKED_ERROR ParseProtoKey();
FLATBUFFERS_CHECKED_ERROR ParseProtoDecl();
@@ -1048,6 +1150,8 @@ class Parser : public ParserState {
bool SupportsAdvancedArrayFeatures() const;
bool SupportsOptionalScalars() const;
bool SupportsDefaultVectorsAndStrings() const;
+ bool Supports64BitOffsets() const;
+ bool SupportsUnionUnderlyingType() const;
Namespace *UniqueNamespace(Namespace *ns);
FLATBUFFERS_CHECKED_ERROR RecurseError();
@@ -1107,136 +1211,17 @@ class Parser : public ParserState {
// if it is less than 0, no linefeeds will be generated either.
// See idl_gen_text.cpp.
// strict_json adds "quotes" around field names if true.
-// If the flatbuffer cannot be encoded in JSON (e.g., it contains non-UTF-8
-// byte arrays in String values), returns false.
-extern bool GenerateTextFromTable(const Parser &parser, const void *table,
- const std::string &tablename,
- std::string *text);
-extern bool GenerateText(const Parser &parser, const void *flatbuffer,
- std::string *text);
-extern bool GenerateTextFile(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate Json schema to string
-// See idl_gen_json_schema.cpp.
-extern bool GenerateJsonSchema(const Parser &parser, std::string *json);
-
-// Generate binary files from a given FlatBuffer, and a given Parser
-// object that has been populated with the corresponding schema.
-// See code_generators.cpp.
-extern bool GenerateBinary(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate a C++ header from the definitions in the Parser object.
-// See idl_gen_cpp.
-extern bool GenerateCPP(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate C# files from the definitions in the Parser object.
-// See idl_gen_csharp.cpp.
-extern bool GenerateCSharp(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-extern bool GenerateDart(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate Java files from the definitions in the Parser object.
-// See idl_gen_java.cpp.
-extern bool GenerateJava(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate JavaScript or TypeScript code from the definitions in the Parser
-// object. See idl_gen_js.
-extern bool GenerateTS(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate Go files from the definitions in the Parser object.
-// See idl_gen_go.cpp.
-extern bool GenerateGo(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate Php code from the definitions in the Parser object.
-// See idl_gen_php.
-extern bool GeneratePhp(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate Python files from the definitions in the Parser object.
-// See idl_gen_python.cpp.
-extern bool GeneratePython(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate Lobster files from the definitions in the Parser object.
-// See idl_gen_lobster.cpp.
-extern bool GenerateLobster(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate Lua files from the definitions in the Parser object.
-// See idl_gen_lua.cpp.
-extern bool GenerateLua(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate Rust files from the definitions in the Parser object.
-// See idl_gen_rust.cpp.
-extern bool GenerateRust(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate Json schema file
-// See idl_gen_json_schema.cpp.
-extern bool GenerateJsonSchema(const Parser &parser, const std::string &path,
+// These functions return nullptr on success, or an error string,
+// which may happen if the flatbuffer cannot be encoded in JSON (e.g.,
+// it contains non-UTF-8 byte arrays in String values).
+extern const char *GenTextFromTable(const Parser &parser, const void *table,
+ const std::string &tablename,
+ std::string *text);
+extern const char *GenText(const Parser &parser, const void *flatbuffer,
+ std::string *text);
+extern const char *GenTextFile(const Parser &parser, const std::string &path,
const std::string &file_name);
-extern bool GenerateKotlin(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate Swift classes.
-// See idl_gen_swift.cpp
-extern bool GenerateSwift(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate a schema file from the internal representation, useful after
-// parsing a .proto schema.
-extern std::string GenerateFBS(const Parser &parser,
- const std::string &file_name);
-extern bool GenerateFBS(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate a make rule for the generated TypeScript code.
-// See idl_gen_ts.cpp.
-extern std::string TSMakeRule(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate a make rule for the generated C++ header.
-// See idl_gen_cpp.cpp.
-extern std::string CPPMakeRule(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate a make rule for the generated Dart code
-// see idl_gen_dart.cpp
-extern std::string DartMakeRule(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate a make rule for the generated Rust code.
-// See idl_gen_rust.cpp.
-extern std::string RustMakeRule(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate a make rule for generated Java or C# files.
-// See code_generators.cpp.
-extern std::string CSharpMakeRule(const Parser &parser, const std::string &path,
- const std::string &file_name);
-extern std::string JavaMakeRule(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
-// Generate a make rule for the generated text (JSON) files.
-// See idl_gen_text.cpp.
-extern std::string TextMakeRule(const Parser &parser, const std::string &path,
- const std::string &file_names);
-
-// Generate a make rule for the generated binary files.
-// See code_generators.cpp.
-extern std::string BinaryMakeRule(const Parser &parser, const std::string &path,
- const std::string &file_name);
-
// Generate GRPC Cpp interfaces.
// See idl_gen_grpc.cpp.
bool GenerateCppGRPC(const Parser &parser, const std::string &path,
@@ -1264,9 +1249,6 @@ extern bool GenerateSwiftGRPC(const Parser &parser, const std::string &path,
extern bool GenerateTSGRPC(const Parser &parser, const std::string &path,
const std::string &file_name);
-
-extern bool GenerateRustModuleRootFile(const Parser &parser,
- const std::string &path);
} // namespace flatbuffers
#endif // FLATBUFFERS_IDL_H_
diff --git a/executor/_include/flatbuffers/minireflect.h b/executor/_include/flatbuffers/minireflect.h
index 26fd86c96..1e04bfff0 100644
--- a/executor/_include/flatbuffers/minireflect.h
+++ b/executor/_include/flatbuffers/minireflect.h
@@ -407,8 +407,9 @@ struct ToStringVisitor : public IterationVisitor {
inline std::string FlatBufferToString(const uint8_t *buffer,
const TypeTable *type_table,
bool multi_line = false,
- bool vector_delimited = true) {
- ToStringVisitor tostring_visitor(multi_line ? "\n" : " ", false, "",
+ bool vector_delimited = true,
+ const std::string &indent = "") {
+ ToStringVisitor tostring_visitor(multi_line ? "\n" : " ", false, indent,
vector_delimited);
IterateFlatBuffer(buffer, type_table, &tostring_visitor);
return tostring_visitor.s;
diff --git a/executor/_include/flatbuffers/reflection.h b/executor/_include/flatbuffers/reflection.h
index e445d792e..faf647c3b 100644
--- a/executor/_include/flatbuffers/reflection.h
+++ b/executor/_include/flatbuffers/reflection.h
@@ -66,6 +66,7 @@ inline size_t GetTypeSize(reflection::BaseType base_type) {
4, // Union
0, // Array. Only used in structs. 0 was chosen to prevent out-of-bounds
// errors.
+ 8, // Vector64
0 // MaxBaseType. This must be kept the last entry in this array.
};
diff --git a/executor/_include/flatbuffers/reflection_generated.h b/executor/_include/flatbuffers/reflection_generated.h
index 78674db5d..96e9315ac 100644
--- a/executor/_include/flatbuffers/reflection_generated.h
+++ b/executor/_include/flatbuffers/reflection_generated.h
@@ -8,9 +8,9 @@
// Ensure the included flatbuffers.h is the same version as when this file was
// generated, otherwise it may not be compatible.
-static_assert(FLATBUFFERS_VERSION_MAJOR == 2 &&
- FLATBUFFERS_VERSION_MINOR == 0 &&
- FLATBUFFERS_VERSION_REVISION == 8,
+static_assert(FLATBUFFERS_VERSION_MAJOR == 23 &&
+ FLATBUFFERS_VERSION_MINOR == 5 &&
+ FLATBUFFERS_VERSION_REVISION == 26,
"Non-compatible flatbuffers version included");
namespace reflection {
@@ -64,10 +64,11 @@ enum BaseType {
Obj = 15,
Union = 16,
Array = 17,
- MaxBaseType = 18
+ Vector64 = 18,
+ MaxBaseType = 19
};
-inline const BaseType (&EnumValuesBaseType())[19] {
+inline const BaseType (&EnumValuesBaseType())[20] {
static const BaseType values[] = {
None,
UType,
@@ -87,13 +88,14 @@ inline const BaseType (&EnumValuesBaseType())[19] {
Obj,
Union,
Array,
+ Vector64,
MaxBaseType
};
return values;
}
inline const char * const *EnumNamesBaseType() {
- static const char * const names[20] = {
+ static const char * const names[21] = {
"None",
"UType",
"Bool",
@@ -112,6 +114,7 @@ inline const char * const *EnumNamesBaseType() {
"Obj",
"Union",
"Array",
+ "Vector64",
"MaxBaseType",
nullptr
};
@@ -119,7 +122,7 @@ inline const char * const *EnumNamesBaseType() {
}
inline const char *EnumNameBaseType(BaseType e) {
- if (flatbuffers::IsOutRange(e, None, MaxBaseType)) return "";
+ if (::flatbuffers::IsOutRange(e, None, MaxBaseType)) return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesBaseType()[index];
}
@@ -158,12 +161,12 @@ inline const char * const *EnumNamesAdvancedFeatures() {
}
inline const char *EnumNameAdvancedFeatures(AdvancedFeatures e) {
- if (flatbuffers::IsOutRange(e, AdvancedArrayFeatures, DefaultVectorsAndStrings)) return "";
+ if (::flatbuffers::IsOutRange(e, AdvancedArrayFeatures, DefaultVectorsAndStrings)) return "";
const size_t index = static_cast<size_t>(e) - static_cast<size_t>(AdvancedArrayFeatures);
return EnumNamesAdvancedFeatures()[index];
}
-struct Type FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
+struct Type FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef TypeBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_BASE_TYPE = 4,
@@ -193,7 +196,7 @@ struct Type FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
uint32_t element_size() const {
return GetField<uint32_t>(VT_ELEMENT_SIZE, 0);
}
- bool Verify(flatbuffers::Verifier &verifier) const {
+ bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<int8_t>(verifier, VT_BASE_TYPE, 1) &&
VerifyField<int8_t>(verifier, VT_ELEMENT, 1) &&
@@ -207,8 +210,8 @@ struct Type FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
struct TypeBuilder {
typedef Type Table;
- flatbuffers::FlatBufferBuilder &fbb_;
- flatbuffers::uoffset_t start_;
+ ::flatbuffers::FlatBufferBuilder &fbb_;
+ ::flatbuffers::uoffset_t start_;
void add_base_type(reflection::BaseType base_type) {
fbb_.AddElement<int8_t>(Type::VT_BASE_TYPE, static_cast<int8_t>(base_type), 0);
}
@@ -227,19 +230,19 @@ struct TypeBuilder {
void add_element_size(uint32_t element_size) {
fbb_.AddElement<uint32_t>(Type::VT_ELEMENT_SIZE, element_size, 0);
}
- explicit TypeBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+ explicit TypeBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
- flatbuffers::Offset<Type> Finish() {
+ ::flatbuffers::Offset<Type> Finish() {
const auto end = fbb_.EndTable(start_);
- auto o = flatbuffers::Offset<Type>(end);
+ auto o = ::flatbuffers::Offset<Type>(end);
return o;
}
};
-inline flatbuffers::Offset<Type> CreateType(
- flatbuffers::FlatBufferBuilder &_fbb,
+inline ::flatbuffers::Offset<Type> CreateType(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
reflection::BaseType base_type = reflection::None,
reflection::BaseType element = reflection::None,
int32_t index = -1,
@@ -256,25 +259,25 @@ inline flatbuffers::Offset<Type> CreateType(
return builder_.Finish();
}
-struct KeyValue FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
+struct KeyValue FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef KeyValueBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_KEY = 4,
VT_VALUE = 6
};
- const flatbuffers::String *key() const {
- return GetPointer<const flatbuffers::String *>(VT_KEY);
+ const ::flatbuffers::String *key() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_KEY);
}
- bool KeyCompareLessThan(const KeyValue *o) const {
+ bool KeyCompareLessThan(const KeyValue * const o) const {
return *key() < *o->key();
}
int KeyCompareWithValue(const char *_key) const {
return strcmp(key()->c_str(), _key);
}
- const flatbuffers::String *value() const {
- return GetPointer<const flatbuffers::String *>(VT_VALUE);
+ const ::flatbuffers::String *value() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_VALUE);
}
- bool Verify(flatbuffers::Verifier &verifier) const {
+ bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyOffsetRequired(verifier, VT_KEY) &&
verifier.VerifyString(key()) &&
@@ -286,38 +289,38 @@ struct KeyValue FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
struct KeyValueBuilder {
typedef KeyValue Table;
- flatbuffers::FlatBufferBuilder &fbb_;
- flatbuffers::uoffset_t start_;
- void add_key(flatbuffers::Offset<flatbuffers::String> key) {
+ ::flatbuffers::FlatBufferBuilder &fbb_;
+ ::flatbuffers::uoffset_t start_;
+ void add_key(::flatbuffers::Offset<::flatbuffers::String> key) {
fbb_.AddOffset(KeyValue::VT_KEY, key);
}
- void add_value(flatbuffers::Offset<flatbuffers::String> value) {
+ void add_value(::flatbuffers::Offset<::flatbuffers::String> value) {
fbb_.AddOffset(KeyValue::VT_VALUE, value);
}
- explicit KeyValueBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+ explicit KeyValueBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
- flatbuffers::Offset<KeyValue> Finish() {
+ ::flatbuffers::Offset<KeyValue> Finish() {
const auto end = fbb_.EndTable(start_);
- auto o = flatbuffers::Offset<KeyValue>(end);
+ auto o = ::flatbuffers::Offset<KeyValue>(end);
fbb_.Required(o, KeyValue::VT_KEY);
return o;
}
};
-inline flatbuffers::Offset<KeyValue> CreateKeyValue(
- flatbuffers::FlatBufferBuilder &_fbb,
- flatbuffers::Offset<flatbuffers::String> key = 0,
- flatbuffers::Offset<flatbuffers::String> value = 0) {
+inline ::flatbuffers::Offset<KeyValue> CreateKeyValue(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
+ ::flatbuffers::Offset<::flatbuffers::String> key = 0,
+ ::flatbuffers::Offset<::flatbuffers::String> value = 0) {
KeyValueBuilder builder_(_fbb);
builder_.add_value(value);
builder_.add_key(key);
return builder_.Finish();
}
-inline flatbuffers::Offset<KeyValue> CreateKeyValueDirect(
- flatbuffers::FlatBufferBuilder &_fbb,
+inline ::flatbuffers::Offset<KeyValue> CreateKeyValueDirect(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
const char *key = nullptr,
const char *value = nullptr) {
auto key__ = key ? _fbb.CreateString(key) : 0;
@@ -328,21 +331,22 @@ inline flatbuffers::Offset<KeyValue> CreateKeyValueDirect(
value__);
}
-struct EnumVal FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
+struct EnumVal FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef EnumValBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_NAME = 4,
VT_VALUE = 6,
VT_UNION_TYPE = 10,
- VT_DOCUMENTATION = 12
+ VT_DOCUMENTATION = 12,
+ VT_ATTRIBUTES = 14
};
- const flatbuffers::String *name() const {
- return GetPointer<const flatbuffers::String *>(VT_NAME);
+ const ::flatbuffers::String *name() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_NAME);
}
int64_t value() const {
return GetField<int64_t>(VT_VALUE, 0);
}
- bool KeyCompareLessThan(const EnumVal *o) const {
+ bool KeyCompareLessThan(const EnumVal * const o) const {
return value() < o->value();
}
int KeyCompareWithValue(int64_t _value) const {
@@ -351,10 +355,13 @@ struct EnumVal FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
const reflection::Type *union_type() const {
return GetPointer<const reflection::Type *>(VT_UNION_TYPE);
}
- const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *documentation() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_DOCUMENTATION);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *>(VT_DOCUMENTATION);
+ }
+ const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
}
- bool Verify(flatbuffers::Verifier &verifier) const {
+ bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyOffsetRequired(verifier, VT_NAME) &&
verifier.VerifyString(name()) &&
@@ -364,69 +371,80 @@ struct EnumVal FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
VerifyOffset(verifier, VT_DOCUMENTATION) &&
verifier.VerifyVector(documentation()) &&
verifier.VerifyVectorOfStrings(documentation()) &&
+ VerifyOffset(verifier, VT_ATTRIBUTES) &&
+ verifier.VerifyVector(attributes()) &&
+ verifier.VerifyVectorOfTables(attributes()) &&
verifier.EndTable();
}
};
struct EnumValBuilder {
typedef EnumVal Table;
- flatbuffers::FlatBufferBuilder &fbb_;
- flatbuffers::uoffset_t start_;
- void add_name(flatbuffers::Offset<flatbuffers::String> name) {
+ ::flatbuffers::FlatBufferBuilder &fbb_;
+ ::flatbuffers::uoffset_t start_;
+ void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
fbb_.AddOffset(EnumVal::VT_NAME, name);
}
void add_value(int64_t value) {
fbb_.AddElement<int64_t>(EnumVal::VT_VALUE, value, 0);
}
- void add_union_type(flatbuffers::Offset<reflection::Type> union_type) {
+ void add_union_type(::flatbuffers::Offset<reflection::Type> union_type) {
fbb_.AddOffset(EnumVal::VT_UNION_TYPE, union_type);
}
- void add_documentation(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation) {
+ void add_documentation(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation) {
fbb_.AddOffset(EnumVal::VT_DOCUMENTATION, documentation);
}
- explicit EnumValBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+ void add_attributes(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes) {
+ fbb_.AddOffset(EnumVal::VT_ATTRIBUTES, attributes);
+ }
+ explicit EnumValBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
- flatbuffers::Offset<EnumVal> Finish() {
+ ::flatbuffers::Offset<EnumVal> Finish() {
const auto end = fbb_.EndTable(start_);
- auto o = flatbuffers::Offset<EnumVal>(end);
+ auto o = ::flatbuffers::Offset<EnumVal>(end);
fbb_.Required(o, EnumVal::VT_NAME);
return o;
}
};
-inline flatbuffers::Offset<EnumVal> CreateEnumVal(
- flatbuffers::FlatBufferBuilder &_fbb,
- flatbuffers::Offset<flatbuffers::String> name = 0,
+inline ::flatbuffers::Offset<EnumVal> CreateEnumVal(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
+ ::flatbuffers::Offset<::flatbuffers::String> name = 0,
int64_t value = 0,
- flatbuffers::Offset<reflection::Type> union_type = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation = 0) {
+ ::flatbuffers::Offset<reflection::Type> union_type = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes = 0) {
EnumValBuilder builder_(_fbb);
builder_.add_value(value);
+ builder_.add_attributes(attributes);
builder_.add_documentation(documentation);
builder_.add_union_type(union_type);
builder_.add_name(name);
return builder_.Finish();
}
-inline flatbuffers::Offset<EnumVal> CreateEnumValDirect(
- flatbuffers::FlatBufferBuilder &_fbb,
+inline ::flatbuffers::Offset<EnumVal> CreateEnumValDirect(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
const char *name = nullptr,
int64_t value = 0,
- flatbuffers::Offset<reflection::Type> union_type = 0,
- const std::vector<flatbuffers::Offset<flatbuffers::String>> *documentation = nullptr) {
+ ::flatbuffers::Offset<reflection::Type> union_type = 0,
+ const std::vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation = nullptr,
+ std::vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes = nullptr) {
auto name__ = name ? _fbb.CreateString(name) : 0;
- auto documentation__ = documentation ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*documentation) : 0;
+ auto documentation__ = documentation ? _fbb.CreateVector<::flatbuffers::Offset<::flatbuffers::String>>(*documentation) : 0;
+ auto attributes__ = attributes ? _fbb.CreateVectorOfSortedTables<reflection::KeyValue>(attributes) : 0;
return reflection::CreateEnumVal(
_fbb,
name__,
value,
union_type,
- documentation__);
+ documentation__,
+ attributes__);
}
-struct Enum FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
+struct Enum FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef EnumBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_NAME = 4,
@@ -437,17 +455,17 @@ struct Enum FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
VT_DOCUMENTATION = 14,
VT_DECLARATION_FILE = 16
};
- const flatbuffers::String *name() const {
- return GetPointer<const flatbuffers::String *>(VT_NAME);
+ const ::flatbuffers::String *name() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_NAME);
}
- bool KeyCompareLessThan(const Enum *o) const {
+ bool KeyCompareLessThan(const Enum * const o) const {
return *name() < *o->name();
}
int KeyCompareWithValue(const char *_name) const {
return strcmp(name()->c_str(), _name);
}
- const flatbuffers::Vector<flatbuffers::Offset<reflection::EnumVal>> *values() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<reflection::EnumVal>> *>(VT_VALUES);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::EnumVal>> *values() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::EnumVal>> *>(VT_VALUES);
}
bool is_union() const {
return GetField<uint8_t>(VT_IS_UNION, 0) != 0;
@@ -455,17 +473,17 @@ struct Enum FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
const reflection::Type *underlying_type() const {
return GetPointer<const reflection::Type *>(VT_UNDERLYING_TYPE);
}
- const flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
}
- const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *documentation() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_DOCUMENTATION);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *>(VT_DOCUMENTATION);
}
/// File that this Enum is declared in.
- const flatbuffers::String *declaration_file() const {
- return GetPointer<const flatbuffers::String *>(VT_DECLARATION_FILE);
+ const ::flatbuffers::String *declaration_file() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_DECLARATION_FILE);
}
- bool Verify(flatbuffers::Verifier &verifier) const {
+ bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyOffsetRequired(verifier, VT_NAME) &&
verifier.VerifyString(name()) &&
@@ -489,36 +507,36 @@ struct Enum FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
struct EnumBuilder {
typedef Enum Table;
- flatbuffers::FlatBufferBuilder &fbb_;
- flatbuffers::uoffset_t start_;
- void add_name(flatbuffers::Offset<flatbuffers::String> name) {
+ ::flatbuffers::FlatBufferBuilder &fbb_;
+ ::flatbuffers::uoffset_t start_;
+ void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
fbb_.AddOffset(Enum::VT_NAME, name);
}
- void add_values(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::EnumVal>>> values) {
+ void add_values(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::EnumVal>>> values) {
fbb_.AddOffset(Enum::VT_VALUES, values);
}
void add_is_union(bool is_union) {
fbb_.AddElement<uint8_t>(Enum::VT_IS_UNION, static_cast<uint8_t>(is_union), 0);
}
- void add_underlying_type(flatbuffers::Offset<reflection::Type> underlying_type) {
+ void add_underlying_type(::flatbuffers::Offset<reflection::Type> underlying_type) {
fbb_.AddOffset(Enum::VT_UNDERLYING_TYPE, underlying_type);
}
- void add_attributes(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>>> attributes) {
+ void add_attributes(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes) {
fbb_.AddOffset(Enum::VT_ATTRIBUTES, attributes);
}
- void add_documentation(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation) {
+ void add_documentation(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation) {
fbb_.AddOffset(Enum::VT_DOCUMENTATION, documentation);
}
- void add_declaration_file(flatbuffers::Offset<flatbuffers::String> declaration_file) {
+ void add_declaration_file(::flatbuffers::Offset<::flatbuffers::String> declaration_file) {
fbb_.AddOffset(Enum::VT_DECLARATION_FILE, declaration_file);
}
- explicit EnumBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+ explicit EnumBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
- flatbuffers::Offset<Enum> Finish() {
+ ::flatbuffers::Offset<Enum> Finish() {
const auto end = fbb_.EndTable(start_);
- auto o = flatbuffers::Offset<Enum>(end);
+ auto o = ::flatbuffers::Offset<Enum>(end);
fbb_.Required(o, Enum::VT_NAME);
fbb_.Required(o, Enum::VT_VALUES);
fbb_.Required(o, Enum::VT_UNDERLYING_TYPE);
@@ -526,15 +544,15 @@ struct EnumBuilder {
}
};
-inline flatbuffers::Offset<Enum> CreateEnum(
- flatbuffers::FlatBufferBuilder &_fbb,
- flatbuffers::Offset<flatbuffers::String> name = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::EnumVal>>> values = 0,
+inline ::flatbuffers::Offset<Enum> CreateEnum(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
+ ::flatbuffers::Offset<::flatbuffers::String> name = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::EnumVal>>> values = 0,
bool is_union = false,
- flatbuffers::Offset<reflection::Type> underlying_type = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>>> attributes = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation = 0,
- flatbuffers::Offset<flatbuffers::String> declaration_file = 0) {
+ ::flatbuffers::Offset<reflection::Type> underlying_type = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation = 0,
+ ::flatbuffers::Offset<::flatbuffers::String> declaration_file = 0) {
EnumBuilder builder_(_fbb);
builder_.add_declaration_file(declaration_file);
builder_.add_documentation(documentation);
@@ -546,19 +564,19 @@ inline flatbuffers::Offset<Enum> CreateEnum(
return builder_.Finish();
}
-inline flatbuffers::Offset<Enum> CreateEnumDirect(
- flatbuffers::FlatBufferBuilder &_fbb,
+inline ::flatbuffers::Offset<Enum> CreateEnumDirect(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
const char *name = nullptr,
- std::vector<flatbuffers::Offset<reflection::EnumVal>> *values = nullptr,
+ std::vector<::flatbuffers::Offset<reflection::EnumVal>> *values = nullptr,
bool is_union = false,
- flatbuffers::Offset<reflection::Type> underlying_type = 0,
- std::vector<flatbuffers::Offset<reflection::KeyValue>> *attributes = nullptr,
- const std::vector<flatbuffers::Offset<flatbuffers::String>> *documentation = nullptr,
+ ::flatbuffers::Offset<reflection::Type> underlying_type = 0,
+ std::vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes = nullptr,
+ const std::vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation = nullptr,
const char *declaration_file = nullptr) {
auto name__ = name ? _fbb.CreateString(name) : 0;
auto values__ = values ? _fbb.CreateVectorOfSortedTables<reflection::EnumVal>(values) : 0;
auto attributes__ = attributes ? _fbb.CreateVectorOfSortedTables<reflection::KeyValue>(attributes) : 0;
- auto documentation__ = documentation ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*documentation) : 0;
+ auto documentation__ = documentation ? _fbb.CreateVector<::flatbuffers::Offset<::flatbuffers::String>>(*documentation) : 0;
auto declaration_file__ = declaration_file ? _fbb.CreateString(declaration_file) : 0;
return reflection::CreateEnum(
_fbb,
@@ -571,7 +589,7 @@ inline flatbuffers::Offset<Enum> CreateEnumDirect(
declaration_file__);
}
-struct Field FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
+struct Field FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef FieldBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_NAME = 4,
@@ -586,12 +604,13 @@ struct Field FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
VT_ATTRIBUTES = 22,
VT_DOCUMENTATION = 24,
VT_OPTIONAL = 26,
- VT_PADDING = 28
+ VT_PADDING = 28,
+ VT_OFFSET64 = 30
};
- const flatbuffers::String *name() const {
- return GetPointer<const flatbuffers::String *>(VT_NAME);
+ const ::flatbuffers::String *name() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_NAME);
}
- bool KeyCompareLessThan(const Field *o) const {
+ bool KeyCompareLessThan(const Field * const o) const {
return *name() < *o->name();
}
int KeyCompareWithValue(const char *_name) const {
@@ -621,11 +640,11 @@ struct Field FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool key() const {
return GetField<uint8_t>(VT_KEY, 0) != 0;
}
- const flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
}
- const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *documentation() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_DOCUMENTATION);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *>(VT_DOCUMENTATION);
}
bool optional() const {
return GetField<uint8_t>(VT_OPTIONAL, 0) != 0;
@@ -634,7 +653,11 @@ struct Field FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
uint16_t padding() const {
return GetField<uint16_t>(VT_PADDING, 0);
}
- bool Verify(flatbuffers::Verifier &verifier) const {
+ /// If the field uses 64-bit offsets.
+ bool offset64() const {
+ return GetField<uint8_t>(VT_OFFSET64, 0) != 0;
+ }
+ bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyOffsetRequired(verifier, VT_NAME) &&
verifier.VerifyString(name()) &&
@@ -655,18 +678,19 @@ struct Field FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
verifier.VerifyVectorOfStrings(documentation()) &&
VerifyField<uint8_t>(verifier, VT_OPTIONAL, 1) &&
VerifyField<uint16_t>(verifier, VT_PADDING, 2) &&
+ VerifyField<uint8_t>(verifier, VT_OFFSET64, 1) &&
verifier.EndTable();
}
};
struct FieldBuilder {
typedef Field Table;
- flatbuffers::FlatBufferBuilder &fbb_;
- flatbuffers::uoffset_t start_;
- void add_name(flatbuffers::Offset<flatbuffers::String> name) {
+ ::flatbuffers::FlatBufferBuilder &fbb_;
+ ::flatbuffers::uoffset_t start_;
+ void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
fbb_.AddOffset(Field::VT_NAME, name);
}
- void add_type(flatbuffers::Offset<reflection::Type> type) {
+ void add_type(::flatbuffers::Offset<reflection::Type> type) {
fbb_.AddOffset(Field::VT_TYPE, type);
}
void add_id(uint16_t id) {
@@ -690,10 +714,10 @@ struct FieldBuilder {
void add_key(bool key) {
fbb_.AddElement<uint8_t>(Field::VT_KEY, static_cast<uint8_t>(key), 0);
}
- void add_attributes(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>>> attributes) {
+ void add_attributes(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes) {
fbb_.AddOffset(Field::VT_ATTRIBUTES, attributes);
}
- void add_documentation(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation) {
+ void add_documentation(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation) {
fbb_.AddOffset(Field::VT_DOCUMENTATION, documentation);
}
void add_optional(bool optional) {
@@ -702,23 +726,26 @@ struct FieldBuilder {
void add_padding(uint16_t padding) {
fbb_.AddElement<uint16_t>(Field::VT_PADDING, padding, 0);
}
- explicit FieldBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+ void add_offset64(bool offset64) {
+ fbb_.AddElement<uint8_t>(Field::VT_OFFSET64, static_cast<uint8_t>(offset64), 0);
+ }
+ explicit FieldBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
- flatbuffers::Offset<Field> Finish() {
+ ::flatbuffers::Offset<Field> Finish() {
const auto end = fbb_.EndTable(start_);
- auto o = flatbuffers::Offset<Field>(end);
+ auto o = ::flatbuffers::Offset<Field>(end);
fbb_.Required(o, Field::VT_NAME);
fbb_.Required(o, Field::VT_TYPE);
return o;
}
};
-inline flatbuffers::Offset<Field> CreateField(
- flatbuffers::FlatBufferBuilder &_fbb,
- flatbuffers::Offset<flatbuffers::String> name = 0,
- flatbuffers::Offset<reflection::Type> type = 0,
+inline ::flatbuffers::Offset<Field> CreateField(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
+ ::flatbuffers::Offset<::flatbuffers::String> name = 0,
+ ::flatbuffers::Offset<reflection::Type> type = 0,
uint16_t id = 0,
uint16_t offset = 0,
int64_t default_integer = 0,
@@ -726,10 +753,11 @@ inline flatbuffers::Offset<Field> CreateField(
bool deprecated = false,
bool required = false,
bool key = false,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>>> attributes = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation = 0,
bool optional = false,
- uint16_t padding = 0) {
+ uint16_t padding = 0,
+ bool offset64 = false) {
FieldBuilder builder_(_fbb);
builder_.add_default_real(default_real);
builder_.add_default_integer(default_integer);
@@ -740,6 +768,7 @@ inline flatbuffers::Offset<Field> CreateField(
builder_.add_padding(padding);
builder_.add_offset(offset);
builder_.add_id(id);
+ builder_.add_offset64(offset64);
builder_.add_optional(optional);
builder_.add_key(key);
builder_.add_required(required);
@@ -747,10 +776,10 @@ inline flatbuffers::Offset<Field> CreateField(
return builder_.Finish();
}
-inline flatbuffers::Offset<Field> CreateFieldDirect(
- flatbuffers::FlatBufferBuilder &_fbb,
+inline ::flatbuffers::Offset<Field> CreateFieldDirect(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
const char *name = nullptr,
- flatbuffers::Offset<reflection::Type> type = 0,
+ ::flatbuffers::Offset<reflection::Type> type = 0,
uint16_t id = 0,
uint16_t offset = 0,
int64_t default_integer = 0,
@@ -758,13 +787,14 @@ inline flatbuffers::Offset<Field> CreateFieldDirect(
bool deprecated = false,
bool required = false,
bool key = false,
- std::vector<flatbuffers::Offset<reflection::KeyValue>> *attributes = nullptr,
- const std::vector<flatbuffers::Offset<flatbuffers::String>> *documentation = nullptr,
+ std::vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes = nullptr,
+ const std::vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation = nullptr,
bool optional = false,
- uint16_t padding = 0) {
+ uint16_t padding = 0,
+ bool offset64 = false) {
auto name__ = name ? _fbb.CreateString(name) : 0;
auto attributes__ = attributes ? _fbb.CreateVectorOfSortedTables<reflection::KeyValue>(attributes) : 0;
- auto documentation__ = documentation ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*documentation) : 0;
+ auto documentation__ = documentation ? _fbb.CreateVector<::flatbuffers::Offset<::flatbuffers::String>>(*documentation) : 0;
return reflection::CreateField(
_fbb,
name__,
@@ -779,10 +809,11 @@ inline flatbuffers::Offset<Field> CreateFieldDirect(
attributes__,
documentation__,
optional,
- padding);
+ padding,
+ offset64);
}
-struct Object FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
+struct Object FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef ObjectBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_NAME = 4,
@@ -794,17 +825,17 @@ struct Object FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
VT_DOCUMENTATION = 16,
VT_DECLARATION_FILE = 18
};
- const flatbuffers::String *name() const {
- return GetPointer<const flatbuffers::String *>(VT_NAME);
+ const ::flatbuffers::String *name() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_NAME);
}
- bool KeyCompareLessThan(const Object *o) const {
+ bool KeyCompareLessThan(const Object * const o) const {
return *name() < *o->name();
}
int KeyCompareWithValue(const char *_name) const {
return strcmp(name()->c_str(), _name);
}
- const flatbuffers::Vector<flatbuffers::Offset<reflection::Field>> *fields() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<reflection::Field>> *>(VT_FIELDS);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Field>> *fields() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Field>> *>(VT_FIELDS);
}
bool is_struct() const {
return GetField<uint8_t>(VT_IS_STRUCT, 0) != 0;
@@ -815,17 +846,17 @@ struct Object FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
int32_t bytesize() const {
return GetField<int32_t>(VT_BYTESIZE, 0);
}
- const flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
}
- const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *documentation() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_DOCUMENTATION);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *>(VT_DOCUMENTATION);
}
/// File that this Object is declared in.
- const flatbuffers::String *declaration_file() const {
- return GetPointer<const flatbuffers::String *>(VT_DECLARATION_FILE);
+ const ::flatbuffers::String *declaration_file() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_DECLARATION_FILE);
}
- bool Verify(flatbuffers::Verifier &verifier) const {
+ bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyOffsetRequired(verifier, VT_NAME) &&
verifier.VerifyString(name()) &&
@@ -849,12 +880,12 @@ struct Object FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
struct ObjectBuilder {
typedef Object Table;
- flatbuffers::FlatBufferBuilder &fbb_;
- flatbuffers::uoffset_t start_;
- void add_name(flatbuffers::Offset<flatbuffers::String> name) {
+ ::flatbuffers::FlatBufferBuilder &fbb_;
+ ::flatbuffers::uoffset_t start_;
+ void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
fbb_.AddOffset(Object::VT_NAME, name);
}
- void add_fields(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::Field>>> fields) {
+ void add_fields(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::Field>>> fields) {
fbb_.AddOffset(Object::VT_FIELDS, fields);
}
void add_is_struct(bool is_struct) {
@@ -866,38 +897,38 @@ struct ObjectBuilder {
void add_bytesize(int32_t bytesize) {
fbb_.AddElement<int32_t>(Object::VT_BYTESIZE, bytesize, 0);
}
- void add_attributes(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>>> attributes) {
+ void add_attributes(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes) {
fbb_.AddOffset(Object::VT_ATTRIBUTES, attributes);
}
- void add_documentation(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation) {
+ void add_documentation(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation) {
fbb_.AddOffset(Object::VT_DOCUMENTATION, documentation);
}
- void add_declaration_file(flatbuffers::Offset<flatbuffers::String> declaration_file) {
+ void add_declaration_file(::flatbuffers::Offset<::flatbuffers::String> declaration_file) {
fbb_.AddOffset(Object::VT_DECLARATION_FILE, declaration_file);
}
- explicit ObjectBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+ explicit ObjectBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
- flatbuffers::Offset<Object> Finish() {
+ ::flatbuffers::Offset<Object> Finish() {
const auto end = fbb_.EndTable(start_);
- auto o = flatbuffers::Offset<Object>(end);
+ auto o = ::flatbuffers::Offset<Object>(end);
fbb_.Required(o, Object::VT_NAME);
fbb_.Required(o, Object::VT_FIELDS);
return o;
}
};
-inline flatbuffers::Offset<Object> CreateObject(
- flatbuffers::FlatBufferBuilder &_fbb,
- flatbuffers::Offset<flatbuffers::String> name = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::Field>>> fields = 0,
+inline ::flatbuffers::Offset<Object> CreateObject(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
+ ::flatbuffers::Offset<::flatbuffers::String> name = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::Field>>> fields = 0,
bool is_struct = false,
int32_t minalign = 0,
int32_t bytesize = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>>> attributes = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation = 0,
- flatbuffers::Offset<flatbuffers::String> declaration_file = 0) {
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation = 0,
+ ::flatbuffers::Offset<::flatbuffers::String> declaration_file = 0) {
ObjectBuilder builder_(_fbb);
builder_.add_declaration_file(declaration_file);
builder_.add_documentation(documentation);
@@ -910,20 +941,20 @@ inline flatbuffers::Offset<Object> CreateObject(
return builder_.Finish();
}
-inline flatbuffers::Offset<Object> CreateObjectDirect(
- flatbuffers::FlatBufferBuilder &_fbb,
+inline ::flatbuffers::Offset<Object> CreateObjectDirect(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
const char *name = nullptr,
- std::vector<flatbuffers::Offset<reflection::Field>> *fields = nullptr,
+ std::vector<::flatbuffers::Offset<reflection::Field>> *fields = nullptr,
bool is_struct = false,
int32_t minalign = 0,
int32_t bytesize = 0,
- std::vector<flatbuffers::Offset<reflection::KeyValue>> *attributes = nullptr,
- const std::vector<flatbuffers::Offset<flatbuffers::String>> *documentation = nullptr,
+ std::vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes = nullptr,
+ const std::vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation = nullptr,
const char *declaration_file = nullptr) {
auto name__ = name ? _fbb.CreateString(name) : 0;
auto fields__ = fields ? _fbb.CreateVectorOfSortedTables<reflection::Field>(fields) : 0;
auto attributes__ = attributes ? _fbb.CreateVectorOfSortedTables<reflection::KeyValue>(attributes) : 0;
- auto documentation__ = documentation ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*documentation) : 0;
+ auto documentation__ = documentation ? _fbb.CreateVector<::flatbuffers::Offset<::flatbuffers::String>>(*documentation) : 0;
auto declaration_file__ = declaration_file ? _fbb.CreateString(declaration_file) : 0;
return reflection::CreateObject(
_fbb,
@@ -937,7 +968,7 @@ inline flatbuffers::Offset<Object> CreateObjectDirect(
declaration_file__);
}
-struct RPCCall FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
+struct RPCCall FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef RPCCallBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_NAME = 4,
@@ -946,10 +977,10 @@ struct RPCCall FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
VT_ATTRIBUTES = 10,
VT_DOCUMENTATION = 12
};
- const flatbuffers::String *name() const {
- return GetPointer<const flatbuffers::String *>(VT_NAME);
+ const ::flatbuffers::String *name() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_NAME);
}
- bool KeyCompareLessThan(const RPCCall *o) const {
+ bool KeyCompareLessThan(const RPCCall * const o) const {
return *name() < *o->name();
}
int KeyCompareWithValue(const char *_name) const {
@@ -961,13 +992,13 @@ struct RPCCall FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
const reflection::Object *response() const {
return GetPointer<const reflection::Object *>(VT_RESPONSE);
}
- const flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
}
- const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *documentation() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_DOCUMENTATION);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *>(VT_DOCUMENTATION);
}
- bool Verify(flatbuffers::Verifier &verifier) const {
+ bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyOffsetRequired(verifier, VT_NAME) &&
verifier.VerifyString(name()) &&
@@ -987,30 +1018,30 @@ struct RPCCall FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
struct RPCCallBuilder {
typedef RPCCall Table;
- flatbuffers::FlatBufferBuilder &fbb_;
- flatbuffers::uoffset_t start_;
- void add_name(flatbuffers::Offset<flatbuffers::String> name) {
+ ::flatbuffers::FlatBufferBuilder &fbb_;
+ ::flatbuffers::uoffset_t start_;
+ void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
fbb_.AddOffset(RPCCall::VT_NAME, name);
}
- void add_request(flatbuffers::Offset<reflection::Object> request) {
+ void add_request(::flatbuffers::Offset<reflection::Object> request) {
fbb_.AddOffset(RPCCall::VT_REQUEST, request);
}
- void add_response(flatbuffers::Offset<reflection::Object> response) {
+ void add_response(::flatbuffers::Offset<reflection::Object> response) {
fbb_.AddOffset(RPCCall::VT_RESPONSE, response);
}
- void add_attributes(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>>> attributes) {
+ void add_attributes(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes) {
fbb_.AddOffset(RPCCall::VT_ATTRIBUTES, attributes);
}
- void add_documentation(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation) {
+ void add_documentation(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation) {
fbb_.AddOffset(RPCCall::VT_DOCUMENTATION, documentation);
}
- explicit RPCCallBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+ explicit RPCCallBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
- flatbuffers::Offset<RPCCall> Finish() {
+ ::flatbuffers::Offset<RPCCall> Finish() {
const auto end = fbb_.EndTable(start_);
- auto o = flatbuffers::Offset<RPCCall>(end);
+ auto o = ::flatbuffers::Offset<RPCCall>(end);
fbb_.Required(o, RPCCall::VT_NAME);
fbb_.Required(o, RPCCall::VT_REQUEST);
fbb_.Required(o, RPCCall::VT_RESPONSE);
@@ -1018,13 +1049,13 @@ struct RPCCallBuilder {
}
};
-inline flatbuffers::Offset<RPCCall> CreateRPCCall(
- flatbuffers::FlatBufferBuilder &_fbb,
- flatbuffers::Offset<flatbuffers::String> name = 0,
- flatbuffers::Offset<reflection::Object> request = 0,
- flatbuffers::Offset<reflection::Object> response = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>>> attributes = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation = 0) {
+inline ::flatbuffers::Offset<RPCCall> CreateRPCCall(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
+ ::flatbuffers::Offset<::flatbuffers::String> name = 0,
+ ::flatbuffers::Offset<reflection::Object> request = 0,
+ ::flatbuffers::Offset<reflection::Object> response = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation = 0) {
RPCCallBuilder builder_(_fbb);
builder_.add_documentation(documentation);
builder_.add_attributes(attributes);
@@ -1034,16 +1065,16 @@ inline flatbuffers::Offset<RPCCall> CreateRPCCall(
return builder_.Finish();
}
-inline flatbuffers::Offset<RPCCall> CreateRPCCallDirect(
- flatbuffers::FlatBufferBuilder &_fbb,
+inline ::flatbuffers::Offset<RPCCall> CreateRPCCallDirect(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
const char *name = nullptr,
- flatbuffers::Offset<reflection::Object> request = 0,
- flatbuffers::Offset<reflection::Object> response = 0,
- std::vector<flatbuffers::Offset<reflection::KeyValue>> *attributes = nullptr,
- const std::vector<flatbuffers::Offset<flatbuffers::String>> *documentation = nullptr) {
+ ::flatbuffers::Offset<reflection::Object> request = 0,
+ ::flatbuffers::Offset<reflection::Object> response = 0,
+ std::vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes = nullptr,
+ const std::vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation = nullptr) {
auto name__ = name ? _fbb.CreateString(name) : 0;
auto attributes__ = attributes ? _fbb.CreateVectorOfSortedTables<reflection::KeyValue>(attributes) : 0;
- auto documentation__ = documentation ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*documentation) : 0;
+ auto documentation__ = documentation ? _fbb.CreateVector<::flatbuffers::Offset<::flatbuffers::String>>(*documentation) : 0;
return reflection::CreateRPCCall(
_fbb,
name__,
@@ -1053,7 +1084,7 @@ inline flatbuffers::Offset<RPCCall> CreateRPCCallDirect(
documentation__);
}
-struct Service FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
+struct Service FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef ServiceBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_NAME = 4,
@@ -1062,29 +1093,29 @@ struct Service FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
VT_DOCUMENTATION = 10,
VT_DECLARATION_FILE = 12
};
- const flatbuffers::String *name() const {
- return GetPointer<const flatbuffers::String *>(VT_NAME);
+ const ::flatbuffers::String *name() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_NAME);
}
- bool KeyCompareLessThan(const Service *o) const {
+ bool KeyCompareLessThan(const Service * const o) const {
return *name() < *o->name();
}
int KeyCompareWithValue(const char *_name) const {
return strcmp(name()->c_str(), _name);
}
- const flatbuffers::Vector<flatbuffers::Offset<reflection::RPCCall>> *calls() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<reflection::RPCCall>> *>(VT_CALLS);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::RPCCall>> *calls() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::RPCCall>> *>(VT_CALLS);
}
- const flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
}
- const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *documentation() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_DOCUMENTATION);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *>(VT_DOCUMENTATION);
}
/// File that this Service is declared in.
- const flatbuffers::String *declaration_file() const {
- return GetPointer<const flatbuffers::String *>(VT_DECLARATION_FILE);
+ const ::flatbuffers::String *declaration_file() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_DECLARATION_FILE);
}
- bool Verify(flatbuffers::Verifier &verifier) const {
+ bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyOffsetRequired(verifier, VT_NAME) &&
verifier.VerifyString(name()) &&
@@ -1105,42 +1136,42 @@ struct Service FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
struct ServiceBuilder {
typedef Service Table;
- flatbuffers::FlatBufferBuilder &fbb_;
- flatbuffers::uoffset_t start_;
- void add_name(flatbuffers::Offset<flatbuffers::String> name) {
+ ::flatbuffers::FlatBufferBuilder &fbb_;
+ ::flatbuffers::uoffset_t start_;
+ void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
fbb_.AddOffset(Service::VT_NAME, name);
}
- void add_calls(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::RPCCall>>> calls) {
+ void add_calls(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::RPCCall>>> calls) {
fbb_.AddOffset(Service::VT_CALLS, calls);
}
- void add_attributes(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>>> attributes) {
+ void add_attributes(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes) {
fbb_.AddOffset(Service::VT_ATTRIBUTES, attributes);
}
- void add_documentation(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation) {
+ void add_documentation(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation) {
fbb_.AddOffset(Service::VT_DOCUMENTATION, documentation);
}
- void add_declaration_file(flatbuffers::Offset<flatbuffers::String> declaration_file) {
+ void add_declaration_file(::flatbuffers::Offset<::flatbuffers::String> declaration_file) {
fbb_.AddOffset(Service::VT_DECLARATION_FILE, declaration_file);
}
- explicit ServiceBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+ explicit ServiceBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
- flatbuffers::Offset<Service> Finish() {
+ ::flatbuffers::Offset<Service> Finish() {
const auto end = fbb_.EndTable(start_);
- auto o = flatbuffers::Offset<Service>(end);
+ auto o = ::flatbuffers::Offset<Service>(end);
fbb_.Required(o, Service::VT_NAME);
return o;
}
};
-inline flatbuffers::Offset<Service> CreateService(
- flatbuffers::FlatBufferBuilder &_fbb,
- flatbuffers::Offset<flatbuffers::String> name = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::RPCCall>>> calls = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::KeyValue>>> attributes = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation = 0,
- flatbuffers::Offset<flatbuffers::String> declaration_file = 0) {
+inline ::flatbuffers::Offset<Service> CreateService(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
+ ::flatbuffers::Offset<::flatbuffers::String> name = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::RPCCall>>> calls = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation = 0,
+ ::flatbuffers::Offset<::flatbuffers::String> declaration_file = 0) {
ServiceBuilder builder_(_fbb);
builder_.add_declaration_file(declaration_file);
builder_.add_documentation(documentation);
@@ -1150,17 +1181,17 @@ inline flatbuffers::Offset<Service> CreateService(
return builder_.Finish();
}
-inline flatbuffers::Offset<Service> CreateServiceDirect(
- flatbuffers::FlatBufferBuilder &_fbb,
+inline ::flatbuffers::Offset<Service> CreateServiceDirect(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
const char *name = nullptr,
- std::vector<flatbuffers::Offset<reflection::RPCCall>> *calls = nullptr,
- std::vector<flatbuffers::Offset<reflection::KeyValue>> *attributes = nullptr,
- const std::vector<flatbuffers::Offset<flatbuffers::String>> *documentation = nullptr,
+ std::vector<::flatbuffers::Offset<reflection::RPCCall>> *calls = nullptr,
+ std::vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes = nullptr,
+ const std::vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation = nullptr,
const char *declaration_file = nullptr) {
auto name__ = name ? _fbb.CreateString(name) : 0;
auto calls__ = calls ? _fbb.CreateVectorOfSortedTables<reflection::RPCCall>(calls) : 0;
auto attributes__ = attributes ? _fbb.CreateVectorOfSortedTables<reflection::KeyValue>(attributes) : 0;
- auto documentation__ = documentation ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*documentation) : 0;
+ auto documentation__ = documentation ? _fbb.CreateVector<::flatbuffers::Offset<::flatbuffers::String>>(*documentation) : 0;
auto declaration_file__ = declaration_file ? _fbb.CreateString(declaration_file) : 0;
return reflection::CreateService(
_fbb,
@@ -1174,27 +1205,27 @@ inline flatbuffers::Offset<Service> CreateServiceDirect(
/// File specific information.
/// Symbols declared within a file may be recovered by iterating over all
/// symbols and examining the `declaration_file` field.
-struct SchemaFile FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
+struct SchemaFile FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef SchemaFileBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_FILENAME = 4,
VT_INCLUDED_FILENAMES = 6
};
/// Filename, relative to project root.
- const flatbuffers::String *filename() const {
- return GetPointer<const flatbuffers::String *>(VT_FILENAME);
+ const ::flatbuffers::String *filename() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_FILENAME);
}
- bool KeyCompareLessThan(const SchemaFile *o) const {
+ bool KeyCompareLessThan(const SchemaFile * const o) const {
return *filename() < *o->filename();
}
int KeyCompareWithValue(const char *_filename) const {
return strcmp(filename()->c_str(), _filename);
}
/// Names of included files, relative to project root.
- const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *included_filenames() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_INCLUDED_FILENAMES);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *included_filenames() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *>(VT_INCLUDED_FILENAMES);
}
- bool Verify(flatbuffers::Verifier &verifier) const {
+ bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyOffsetRequired(verifier, VT_FILENAME) &&
verifier.VerifyString(filename()) &&
@@ -1207,49 +1238,49 @@ struct SchemaFile FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
struct SchemaFileBuilder {
typedef SchemaFile Table;
- flatbuffers::FlatBufferBuilder &fbb_;
- flatbuffers::uoffset_t start_;
- void add_filename(flatbuffers::Offset<flatbuffers::String> filename) {
+ ::flatbuffers::FlatBufferBuilder &fbb_;
+ ::flatbuffers::uoffset_t start_;
+ void add_filename(::flatbuffers::Offset<::flatbuffers::String> filename) {
fbb_.AddOffset(SchemaFile::VT_FILENAME, filename);
}
- void add_included_filenames(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> included_filenames) {
+ void add_included_filenames(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> included_filenames) {
fbb_.AddOffset(SchemaFile::VT_INCLUDED_FILENAMES, included_filenames);
}
- explicit SchemaFileBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+ explicit SchemaFileBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
- flatbuffers::Offset<SchemaFile> Finish() {
+ ::flatbuffers::Offset<SchemaFile> Finish() {
const auto end = fbb_.EndTable(start_);
- auto o = flatbuffers::Offset<SchemaFile>(end);
+ auto o = ::flatbuffers::Offset<SchemaFile>(end);
fbb_.Required(o, SchemaFile::VT_FILENAME);
return o;
}
};
-inline flatbuffers::Offset<SchemaFile> CreateSchemaFile(
- flatbuffers::FlatBufferBuilder &_fbb,
- flatbuffers::Offset<flatbuffers::String> filename = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> included_filenames = 0) {
+inline ::flatbuffers::Offset<SchemaFile> CreateSchemaFile(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
+ ::flatbuffers::Offset<::flatbuffers::String> filename = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> included_filenames = 0) {
SchemaFileBuilder builder_(_fbb);
builder_.add_included_filenames(included_filenames);
builder_.add_filename(filename);
return builder_.Finish();
}
-inline flatbuffers::Offset<SchemaFile> CreateSchemaFileDirect(
- flatbuffers::FlatBufferBuilder &_fbb,
+inline ::flatbuffers::Offset<SchemaFile> CreateSchemaFileDirect(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
const char *filename = nullptr,
- const std::vector<flatbuffers::Offset<flatbuffers::String>> *included_filenames = nullptr) {
+ const std::vector<::flatbuffers::Offset<::flatbuffers::String>> *included_filenames = nullptr) {
auto filename__ = filename ? _fbb.CreateString(filename) : 0;
- auto included_filenames__ = included_filenames ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*included_filenames) : 0;
+ auto included_filenames__ = included_filenames ? _fbb.CreateVector<::flatbuffers::Offset<::flatbuffers::String>>(*included_filenames) : 0;
return reflection::CreateSchemaFile(
_fbb,
filename__,
included_filenames__);
}
-struct Schema FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
+struct Schema FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef SchemaBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_OBJECTS = 4,
@@ -1261,33 +1292,33 @@ struct Schema FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
VT_ADVANCED_FEATURES = 16,
VT_FBS_FILES = 18
};
- const flatbuffers::Vector<flatbuffers::Offset<reflection::Object>> *objects() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<reflection::Object>> *>(VT_OBJECTS);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Object>> *objects() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Object>> *>(VT_OBJECTS);
}
- const flatbuffers::Vector<flatbuffers::Offset<reflection::Enum>> *enums() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<reflection::Enum>> *>(VT_ENUMS);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Enum>> *enums() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Enum>> *>(VT_ENUMS);
}
- const flatbuffers::String *file_ident() const {
- return GetPointer<const flatbuffers::String *>(VT_FILE_IDENT);
+ const ::flatbuffers::String *file_ident() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_FILE_IDENT);
}
- const flatbuffers::String *file_ext() const {
- return GetPointer<const flatbuffers::String *>(VT_FILE_EXT);
+ const ::flatbuffers::String *file_ext() const {
+ return GetPointer<const ::flatbuffers::String *>(VT_FILE_EXT);
}
const reflection::Object *root_table() const {
return GetPointer<const reflection::Object *>(VT_ROOT_TABLE);
}
- const flatbuffers::Vector<flatbuffers::Offset<reflection::Service>> *services() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<reflection::Service>> *>(VT_SERVICES);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Service>> *services() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Service>> *>(VT_SERVICES);
}
reflection::AdvancedFeatures advanced_features() const {
return static_cast<reflection::AdvancedFeatures>(GetField<uint64_t>(VT_ADVANCED_FEATURES, 0));
}
/// All the files used in this compilation. Files are relative to where
/// flatc was invoked.
- const flatbuffers::Vector<flatbuffers::Offset<reflection::SchemaFile>> *fbs_files() const {
- return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<reflection::SchemaFile>> *>(VT_FBS_FILES);
+ const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::SchemaFile>> *fbs_files() const {
+ return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::SchemaFile>> *>(VT_FBS_FILES);
}
- bool Verify(flatbuffers::Verifier &verifier) const {
+ bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyOffsetRequired(verifier, VT_OBJECTS) &&
verifier.VerifyVector(objects()) &&
@@ -1314,55 +1345,55 @@ struct Schema FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
struct SchemaBuilder {
typedef Schema Table;
- flatbuffers::FlatBufferBuilder &fbb_;
- flatbuffers::uoffset_t start_;
- void add_objects(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::Object>>> objects) {
+ ::flatbuffers::FlatBufferBuilder &fbb_;
+ ::flatbuffers::uoffset_t start_;
+ void add_objects(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::Object>>> objects) {
fbb_.AddOffset(Schema::VT_OBJECTS, objects);
}
- void add_enums(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::Enum>>> enums) {
+ void add_enums(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::Enum>>> enums) {
fbb_.AddOffset(Schema::VT_ENUMS, enums);
}
- void add_file_ident(flatbuffers::Offset<flatbuffers::String> file_ident) {
+ void add_file_ident(::flatbuffers::Offset<::flatbuffers::String> file_ident) {
fbb_.AddOffset(Schema::VT_FILE_IDENT, file_ident);
}
- void add_file_ext(flatbuffers::Offset<flatbuffers::String> file_ext) {
+ void add_file_ext(::flatbuffers::Offset<::flatbuffers::String> file_ext) {
fbb_.AddOffset(Schema::VT_FILE_EXT, file_ext);
}
- void add_root_table(flatbuffers::Offset<reflection::Object> root_table) {
+ void add_root_table(::flatbuffers::Offset<reflection::Object> root_table) {
fbb_.AddOffset(Schema::VT_ROOT_TABLE, root_table);
}
- void add_services(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::Service>>> services) {
+ void add_services(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::Service>>> services) {
fbb_.AddOffset(Schema::VT_SERVICES, services);
}
void add_advanced_features(reflection::AdvancedFeatures advanced_features) {
fbb_.AddElement<uint64_t>(Schema::VT_ADVANCED_FEATURES, static_cast<uint64_t>(advanced_features), 0);
}
- void add_fbs_files(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::SchemaFile>>> fbs_files) {
+ void add_fbs_files(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::SchemaFile>>> fbs_files) {
fbb_.AddOffset(Schema::VT_FBS_FILES, fbs_files);
}
- explicit SchemaBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+ explicit SchemaBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
- flatbuffers::Offset<Schema> Finish() {
+ ::flatbuffers::Offset<Schema> Finish() {
const auto end = fbb_.EndTable(start_);
- auto o = flatbuffers::Offset<Schema>(end);
+ auto o = ::flatbuffers::Offset<Schema>(end);
fbb_.Required(o, Schema::VT_OBJECTS);
fbb_.Required(o, Schema::VT_ENUMS);
return o;
}
};
-inline flatbuffers::Offset<Schema> CreateSchema(
- flatbuffers::FlatBufferBuilder &_fbb,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::Object>>> objects = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::Enum>>> enums = 0,
- flatbuffers::Offset<flatbuffers::String> file_ident = 0,
- flatbuffers::Offset<flatbuffers::String> file_ext = 0,
- flatbuffers::Offset<reflection::Object> root_table = 0,
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::Service>>> services = 0,
+inline ::flatbuffers::Offset<Schema> CreateSchema(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::Object>>> objects = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::Enum>>> enums = 0,
+ ::flatbuffers::Offset<::flatbuffers::String> file_ident = 0,
+ ::flatbuffers::Offset<::flatbuffers::String> file_ext = 0,
+ ::flatbuffers::Offset<reflection::Object> root_table = 0,
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::Service>>> services = 0,
reflection::AdvancedFeatures advanced_features = static_cast<reflection::AdvancedFeatures>(0),
- flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<reflection::SchemaFile>>> fbs_files = 0) {
+ ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::SchemaFile>>> fbs_files = 0) {
SchemaBuilder builder_(_fbb);
builder_.add_advanced_features(advanced_features);
builder_.add_fbs_files(fbs_files);
@@ -1375,16 +1406,16 @@ inline flatbuffers::Offset<Schema> CreateSchema(
return builder_.Finish();
}
-inline flatbuffers::Offset<Schema> CreateSchemaDirect(
- flatbuffers::FlatBufferBuilder &_fbb,
- std::vector<flatbuffers::Offset<reflection::Object>> *objects = nullptr,
- std::vector<flatbuffers::Offset<reflection::Enum>> *enums = nullptr,
+inline ::flatbuffers::Offset<Schema> CreateSchemaDirect(
+ ::flatbuffers::FlatBufferBuilder &_fbb,
+ std::vector<::flatbuffers::Offset<reflection::Object>> *objects = nullptr,
+ std::vector<::flatbuffers::Offset<reflection::Enum>> *enums = nullptr,
const char *file_ident = nullptr,
const char *file_ext = nullptr,
- flatbuffers::Offset<reflection::Object> root_table = 0,
- std::vector<flatbuffers::Offset<reflection::Service>> *services = nullptr,
+ ::flatbuffers::Offset<reflection::Object> root_table = 0,
+ std::vector<::flatbuffers::Offset<reflection::Service>> *services = nullptr,
reflection::AdvancedFeatures advanced_features = static_cast<reflection::AdvancedFeatures>(0),
- std::vector<flatbuffers::Offset<reflection::SchemaFile>> *fbs_files = nullptr) {
+ std::vector<::flatbuffers::Offset<reflection::SchemaFile>> *fbs_files = nullptr) {
auto objects__ = objects ? _fbb.CreateVectorOfSortedTables<reflection::Object>(objects) : 0;
auto enums__ = enums ? _fbb.CreateVectorOfSortedTables<reflection::Enum>(enums) : 0;
auto file_ident__ = file_ident ? _fbb.CreateString(file_ident) : 0;
@@ -1404,11 +1435,11 @@ inline flatbuffers::Offset<Schema> CreateSchemaDirect(
}
inline const reflection::Schema *GetSchema(const void *buf) {
- return flatbuffers::GetRoot<reflection::Schema>(buf);
+ return ::flatbuffers::GetRoot<reflection::Schema>(buf);
}
inline const reflection::Schema *GetSizePrefixedSchema(const void *buf) {
- return flatbuffers::GetSizePrefixedRoot<reflection::Schema>(buf);
+ return ::flatbuffers::GetSizePrefixedRoot<reflection::Schema>(buf);
}
inline const char *SchemaIdentifier() {
@@ -1416,22 +1447,22 @@ inline const char *SchemaIdentifier() {
}
inline bool SchemaBufferHasIdentifier(const void *buf) {
- return flatbuffers::BufferHasIdentifier(
+ return ::flatbuffers::BufferHasIdentifier(
buf, SchemaIdentifier());
}
inline bool SizePrefixedSchemaBufferHasIdentifier(const void *buf) {
- return flatbuffers::BufferHasIdentifier(
+ return ::flatbuffers::BufferHasIdentifier(
buf, SchemaIdentifier(), true);
}
inline bool VerifySchemaBuffer(
- flatbuffers::Verifier &verifier) {
+ ::flatbuffers::Verifier &verifier) {
return verifier.VerifyBuffer<reflection::Schema>(SchemaIdentifier());
}
inline bool VerifySizePrefixedSchemaBuffer(
- flatbuffers::Verifier &verifier) {
+ ::flatbuffers::Verifier &verifier) {
return verifier.VerifySizePrefixedBuffer<reflection::Schema>(SchemaIdentifier());
}
@@ -1440,14 +1471,14 @@ inline const char *SchemaExtension() {
}
inline void FinishSchemaBuffer(
- flatbuffers::FlatBufferBuilder &fbb,
- flatbuffers::Offset<reflection::Schema> root) {
+ ::flatbuffers::FlatBufferBuilder &fbb,
+ ::flatbuffers::Offset<reflection::Schema> root) {
fbb.Finish(root, SchemaIdentifier());
}
inline void FinishSizePrefixedSchemaBuffer(
- flatbuffers::FlatBufferBuilder &fbb,
- flatbuffers::Offset<reflection::Schema> root) {
+ ::flatbuffers::FlatBufferBuilder &fbb,
+ ::flatbuffers::Offset<reflection::Schema> root) {
fbb.FinishSizePrefixed(root, SchemaIdentifier());
}
diff --git a/executor/_include/flatbuffers/registry.h b/executor/_include/flatbuffers/registry.h
index e8bb8f5e3..f59aa647d 100644
--- a/executor/_include/flatbuffers/registry.h
+++ b/executor/_include/flatbuffers/registry.h
@@ -52,8 +52,10 @@ class Registry {
Parser parser;
if (!LoadSchema(ident, &parser)) return false;
// Now we're ready to generate text.
- if (!GenerateText(parser, flatbuf, dest)) {
- lasterror_ = "unable to generate text for FlatBuffer binary";
+ auto err = GenText(parser, flatbuf, dest);
+ if (err) {
+ lasterror_ =
+ "unable to generate text for FlatBuffer binary: " + std::string(err);
return false;
}
return true;
diff --git a/executor/_include/flatbuffers/stl_emulation.h b/executor/_include/flatbuffers/stl_emulation.h
index 452ddb832..fd3a8cda7 100644
--- a/executor/_include/flatbuffers/stl_emulation.h
+++ b/executor/_include/flatbuffers/stl_emulation.h
@@ -41,15 +41,18 @@
#include <optional>
#endif
-// The __cpp_lib_span is the predefined feature macro.
-#if defined(FLATBUFFERS_USE_STD_SPAN)
- #include <span>
-#elif defined(__cpp_lib_span) && defined(__has_include)
- #if __has_include(<span>)
- #include <array>
- #include <span>
- #define FLATBUFFERS_USE_STD_SPAN
+#ifndef FLATBUFFERS_USE_STD_SPAN
+ // Testing __cpp_lib_span requires including either <version> or <span>,
+ // both of which were added in C++20.
+ // See: https://en.cppreference.com/w/cpp/utility/feature_test
+ #if defined(__cplusplus) && __cplusplus >= 202002L
+ #define FLATBUFFERS_USE_STD_SPAN 1
#endif
+#endif // FLATBUFFERS_USE_STD_SPAN
+
+#if defined(FLATBUFFERS_USE_STD_SPAN)
+ #include <array>
+ #include <span>
#else
// Disable non-trivial ctors if FLATBUFFERS_SPAN_MINIMAL defined.
#if !defined(FLATBUFFERS_TEMPLATES_ALIASES)
diff --git a/executor/_include/flatbuffers/string.h b/executor/_include/flatbuffers/string.h
index 3db95fce1..97e399fd6 100644
--- a/executor/_include/flatbuffers/string.h
+++ b/executor/_include/flatbuffers/string.h
@@ -61,4 +61,4 @@ static inline flatbuffers::string_view GetStringView(const String *str) {
} // namespace flatbuffers
-#endif // FLATBUFFERS_STRING_H_ \ No newline at end of file
+#endif // FLATBUFFERS_STRING_H_
diff --git a/executor/_include/flatbuffers/struct.h b/executor/_include/flatbuffers/struct.h
index d8753c84f..abacc8a9a 100644
--- a/executor/_include/flatbuffers/struct.h
+++ b/executor/_include/flatbuffers/struct.h
@@ -50,4 +50,4 @@ class Struct FLATBUFFERS_FINAL_CLASS {
} // namespace flatbuffers
-#endif // FLATBUFFERS_STRUCT_H_ \ No newline at end of file
+#endif // FLATBUFFERS_STRUCT_H_
diff --git a/executor/_include/flatbuffers/table.h b/executor/_include/flatbuffers/table.h
index 11b292476..e92d8ae8e 100644
--- a/executor/_include/flatbuffers/table.h
+++ b/executor/_include/flatbuffers/table.h
@@ -47,14 +47,24 @@ class Table {
return field_offset ? ReadScalar<T>(data_ + field_offset) : defaultval;
}
- template<typename P> P GetPointer(voffset_t field) {
+ template<typename P, typename OffsetSize = uoffset_t>
+ P GetPointer(voffset_t field) {
auto field_offset = GetOptionalFieldOffset(field);
auto p = data_ + field_offset;
- return field_offset ? reinterpret_cast<P>(p + ReadScalar<uoffset_t>(p))
+ return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
: nullptr;
}
- template<typename P> P GetPointer(voffset_t field) const {
- return const_cast<Table *>(this)->GetPointer<P>(field);
+ template<typename P, typename OffsetSize = uoffset_t>
+ P GetPointer(voffset_t field) const {
+ return const_cast<Table *>(this)->GetPointer<P, OffsetSize>(field);
+ }
+
+ template<typename P> P GetPointer64(voffset_t field) {
+ return GetPointer<P, uoffset64_t>(field);
+ }
+
+ template<typename P> P GetPointer64(voffset_t field) const {
+ return GetPointer<P, uoffset64_t>(field);
}
template<typename P> P GetStruct(voffset_t field) const {
@@ -131,15 +141,25 @@ class Table {
}
// Versions for offsets.
+ template<typename OffsetT = uoffset_t>
bool VerifyOffset(const Verifier &verifier, voffset_t field) const {
auto field_offset = GetOptionalFieldOffset(field);
- return !field_offset || verifier.VerifyOffset(data_, field_offset);
+ return !field_offset || verifier.VerifyOffset<OffsetT>(data_, field_offset);
}
+ template<typename OffsetT = uoffset_t>
bool VerifyOffsetRequired(const Verifier &verifier, voffset_t field) const {
auto field_offset = GetOptionalFieldOffset(field);
return verifier.Check(field_offset != 0) &&
- verifier.VerifyOffset(data_, field_offset);
+ verifier.VerifyOffset<OffsetT>(data_, field_offset);
+ }
+
+ bool VerifyOffset64(const Verifier &verifier, voffset_t field) const {
+ return VerifyOffset<uoffset64_t>(verifier, field);
+ }
+
+ bool VerifyOffset64Required(const Verifier &verifier, voffset_t field) const {
+ return VerifyOffsetRequired<uoffset64_t>(verifier, field);
}
private:
diff --git a/executor/_include/flatbuffers/util.h b/executor/_include/flatbuffers/util.h
index dcc5065f9..1ccf3517d 100644
--- a/executor/_include/flatbuffers/util.h
+++ b/executor/_include/flatbuffers/util.h
@@ -31,6 +31,8 @@
# include <stdio.h>
#endif // FLATBUFFERS_PREFER_PRINTF
+#include <cmath>
+#include <limits>
#include <string>
namespace flatbuffers {
@@ -255,7 +257,7 @@ inline void strtoval_impl(double *val, const char *str, char **endptr) {
}
// UBSAN: double to float is safe if numeric_limits<float>::is_iec559 is true.
-__suppress_ubsan__("float-cast-overflow")
+FLATBUFFERS_SUPPRESS_UBSAN("float-cast-overflow")
inline void strtoval_impl(float *val, const char *str, char **endptr) {
*val = __strtof_impl(str, endptr);
}
@@ -312,6 +314,7 @@ inline bool StringToFloatImpl(T *val, const char *const str) {
strtoval_impl(val, str, const_cast<char **>(&end));
auto done = (end != str) && (*end == '\0');
if (!done) *val = 0; // erase partial result
+ if (done && std::isnan(*val)) { *val = std::numeric_limits<T>::quiet_NaN(); }
return done;
}
@@ -392,6 +395,18 @@ inline uint64_t StringToUInt(const char *s, int base = 10) {
return StringToIntegerImpl(&val, s, base) ? val : 0;
}
+inline bool StringIsFlatbufferNan(const std::string &s) {
+ return s == "nan" || s == "+nan" || s == "-nan";
+}
+
+inline bool StringIsFlatbufferPositiveInfinity(const std::string &s) {
+ return s == "inf" || s == "+inf" || s == "infinity" || s == "+infinity";
+}
+
+inline bool StringIsFlatbufferNegativeInfinity(const std::string &s) {
+ return s == "-inf" || s == "-infinity";
+}
+
typedef bool (*LoadFileFunction)(const char *filename, bool binary,
std::string *dest);
typedef bool (*FileExistsFunction)(const char *filename);
@@ -608,7 +623,7 @@ inline bool EscapeString(const char *s, size_t length, std::string *_text,
// we previously checked for non-UTF-8, so we shouldn't reach
// here.
//
- // 2) We reached here by someone calling GenerateText()
+ // 2) We reached here by someone calling GenText()
// on a previously-serialized flatbuffer. The data might have
// non-UTF-8 Strings, or might be corrupt.
//
@@ -685,9 +700,6 @@ bool SetGlobalTestLocale(const char *locale_name,
bool ReadEnvironmentVariable(const char *var_name,
std::string *_value = nullptr);
-// MSVC specific: Send all assert reports to STDOUT to prevent CI hangs.
-void SetupDefaultCRTReportMode();
-
enum class Case {
kUnknown = 0,
// TheQuickBrownFox
@@ -710,9 +722,10 @@ enum class Case {
kSnake2 = 9,
};
-// Convert the `input` string of case `input_case` to the specified `output_case`.
+// Convert the `input` string of case `input_case` to the specified
+// `output_case`.
std::string ConvertCase(const std::string &input, Case output_case,
- Case input_case = Case::kSnake);
+ Case input_case = Case::kSnake);
} // namespace flatbuffers
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 {
diff --git a/executor/_include/flatbuffers/vector_downward.h b/executor/_include/flatbuffers/vector_downward.h
index d25e54497..2b5a92cf1 100644
--- a/executor/_include/flatbuffers/vector_downward.h
+++ b/executor/_include/flatbuffers/vector_downward.h
@@ -17,6 +17,9 @@
#ifndef FLATBUFFERS_VECTOR_DOWNWARD_H_
#define FLATBUFFERS_VECTOR_DOWNWARD_H_
+#include <algorithm>
+#include <cstdint>
+
#include "flatbuffers/base.h"
#include "flatbuffers/default_allocator.h"
#include "flatbuffers/detached_buffer.h"
@@ -29,13 +32,15 @@ namespace flatbuffers {
// Since this vector leaves the lower part unused, we support a "scratch-pad"
// that can be stored there for temporary data, to share the allocated space.
// Essentially, this supports 2 std::vectors in a single buffer.
-class vector_downward {
+template<typename SizeT = uoffset_t> class vector_downward {
public:
explicit vector_downward(size_t initial_size, Allocator *allocator,
- bool own_allocator, size_t buffer_minalign)
+ bool own_allocator, size_t buffer_minalign,
+ const SizeT max_size = FLATBUFFERS_MAX_BUFFER_SIZE)
: allocator_(allocator),
own_allocator_(own_allocator),
initial_size_(initial_size),
+ max_size_(max_size),
buffer_minalign_(buffer_minalign),
reserved_(0),
size_(0),
@@ -43,11 +48,12 @@ class vector_downward {
cur_(nullptr),
scratch_(nullptr) {}
- vector_downward(vector_downward &&other)
+ vector_downward(vector_downward &&other) noexcept
// clang-format on
: allocator_(other.allocator_),
own_allocator_(other.own_allocator_),
initial_size_(other.initial_size_),
+ max_size_(other.max_size_),
buffer_minalign_(other.buffer_minalign_),
reserved_(other.reserved_),
size_(other.size_),
@@ -64,7 +70,7 @@ class vector_downward {
other.scratch_ = nullptr;
}
- vector_downward &operator=(vector_downward &&other) {
+ vector_downward &operator=(vector_downward &&other) noexcept {
// Move construct a temporary and swap idiom
vector_downward temp(std::move(other));
swap(temp);
@@ -109,7 +115,7 @@ class vector_downward {
uint8_t *release_raw(size_t &allocated_bytes, size_t &offset) {
auto *buf = buf_;
allocated_bytes = reserved_;
- offset = static_cast<size_t>(cur_ - buf_);
+ offset = vector_downward::offset();
// release_raw only relinquishes the buffer ownership.
// Does not deallocate or reset the allocator. Destructor will do that.
@@ -134,10 +140,10 @@ class vector_downward {
size_t ensure_space(size_t len) {
FLATBUFFERS_ASSERT(cur_ >= scratch_ && scratch_ >= buf_);
- if (len > static_cast<size_t>(cur_ - scratch_)) { reallocate(len); }
- // Beyond this, signed offsets may not have enough range:
- // (FlatBuffers > 2GB not supported).
- FLATBUFFERS_ASSERT(size() < FLATBUFFERS_MAX_BUFFER_SIZE);
+ // If the length is larger than the unused part of the buffer, we need to
+ // grow.
+ if (len > unused_buffer_size()) { reallocate(len); }
+ FLATBUFFERS_ASSERT(size() < max_size_);
return len;
}
@@ -145,7 +151,7 @@ class vector_downward {
if (len) {
ensure_space(len);
cur_ -= len;
- size_ += static_cast<uoffset_t>(len);
+ size_ += static_cast<SizeT>(len);
}
return cur_;
}
@@ -153,12 +159,20 @@ class vector_downward {
// Returns nullptr if using the DefaultAllocator.
Allocator *get_custom_allocator() { return allocator_; }
- inline uoffset_t size() const { return size_; }
+ // The current offset into the buffer.
+ size_t offset() const { return cur_ - buf_; }
+
+ // The total size of the vector (both the buffer and scratch parts).
+ inline SizeT size() const { return size_; }
- uoffset_t scratch_size() const {
- return static_cast<uoffset_t>(scratch_ - buf_);
+ // The size of the buffer part of the vector that is currently unused.
+ SizeT unused_buffer_size() const {
+ return static_cast<SizeT>(cur_ - scratch_);
}
+ // The size of the scratch part of the vector.
+ SizeT scratch_size() const { return static_cast<SizeT>(scratch_ - buf_); }
+
size_t capacity() const { return reserved_; }
uint8_t *data() const {
@@ -209,7 +223,7 @@ class vector_downward {
void pop(size_t bytes_to_remove) {
cur_ += bytes_to_remove;
- size_ -= static_cast<uoffset_t>(bytes_to_remove);
+ size_ -= static_cast<SizeT>(bytes_to_remove);
}
void scratch_pop(size_t bytes_to_remove) { scratch_ -= bytes_to_remove; }
@@ -222,6 +236,7 @@ class vector_downward {
swap(buffer_minalign_, other.buffer_minalign_);
swap(reserved_, other.reserved_);
swap(size_, other.size_);
+ swap(max_size_, other.max_size_);
swap(buf_, other.buf_);
swap(cur_, other.cur_);
swap(scratch_, other.scratch_);
@@ -241,9 +256,12 @@ class vector_downward {
Allocator *allocator_;
bool own_allocator_;
size_t initial_size_;
+
+ // The maximum size the vector can be.
+ SizeT max_size_;
size_t buffer_minalign_;
size_t reserved_;
- uoffset_t size_;
+ SizeT size_;
uint8_t *buf_;
uint8_t *cur_; // Points at location between empty (below) and used (above).
uint8_t *scratch_; // Points to the end of the scratchpad in use.
diff --git a/executor/_include/flatbuffers/verifier.h b/executor/_include/flatbuffers/verifier.h
index 87d3f54a5..de1146be9 100644
--- a/executor/_include/flatbuffers/verifier.h
+++ b/executor/_include/flatbuffers/verifier.h
@@ -34,12 +34,16 @@ class Verifier FLATBUFFERS_FINAL_CLASS {
bool check_alignment = true;
// If true, run verifier on nested flatbuffers
bool check_nested_flatbuffers = true;
+ // The maximum size of a buffer.
+ size_t max_size = FLATBUFFERS_MAX_BUFFER_SIZE;
+ // Use assertions to check for errors.
+ bool assert = false;
};
explicit Verifier(const uint8_t *const buf, const size_t buf_len,
const Options &opts)
: buf_(buf), size_(buf_len), opts_(opts) {
- FLATBUFFERS_ASSERT(size_ < FLATBUFFERS_MAX_BUFFER_SIZE);
+ FLATBUFFERS_ASSERT(size_ < opts.max_size);
}
// Deprecated API, please construct with Verifier::Options.
@@ -58,7 +62,7 @@ class Verifier FLATBUFFERS_FINAL_CLASS {
bool Check(const bool ok) const {
// clang-format off
#ifdef FLATBUFFERS_DEBUG_VERIFICATION_FAILURE
- FLATBUFFERS_ASSERT(ok);
+ if (opts_.assert) { FLATBUFFERS_ASSERT(ok); }
#endif
#ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
if (!ok)
@@ -113,41 +117,43 @@ class Verifier FLATBUFFERS_FINAL_CLASS {
}
// Verify a pointer (may be NULL) of any vector type.
- template<typename T> bool VerifyVector(const Vector<T> *const vec) const {
- return !vec || VerifyVectorOrString(reinterpret_cast<const uint8_t *>(vec),
- sizeof(T));
+ template<int &..., typename T, typename LenT>
+ bool VerifyVector(const Vector<T, LenT> *const vec) const {
+ return !vec || VerifyVectorOrString<LenT>(
+ reinterpret_cast<const uint8_t *>(vec), sizeof(T));
}
// Verify a pointer (may be NULL) of a vector to struct.
- template<typename T>
- bool VerifyVector(const Vector<const T *> *const vec) const {
- return VerifyVector(reinterpret_cast<const Vector<T> *>(vec));
+ template<int &..., typename T, typename LenT>
+ bool VerifyVector(const Vector<const T *, LenT> *const vec) const {
+ return VerifyVector(reinterpret_cast<const Vector<T, LenT> *>(vec));
}
// Verify a pointer (may be NULL) to string.
bool VerifyString(const String *const str) const {
size_t end;
- return !str || (VerifyVectorOrString(reinterpret_cast<const uint8_t *>(str),
- 1, &end) &&
+ return !str || (VerifyVectorOrString<uoffset_t>(
+ reinterpret_cast<const uint8_t *>(str), 1, &end) &&
Verify(end, 1) && // Must have terminator
Check(buf_[end] == '\0')); // Terminating byte must be 0.
}
// Common code between vectors and strings.
+ template<typename LenT = uoffset_t>
bool VerifyVectorOrString(const uint8_t *const vec, const size_t elem_size,
size_t *const end = nullptr) const {
- const auto veco = static_cast<size_t>(vec - buf_);
+ const auto vec_offset = static_cast<size_t>(vec - buf_);
// Check we can read the size field.
- if (!Verify<uoffset_t>(veco)) return false;
+ if (!Verify<LenT>(vec_offset)) return false;
// Check the whole array. If this is a string, the byte past the array must
// be 0.
- const auto size = ReadScalar<uoffset_t>(vec);
- const auto max_elems = FLATBUFFERS_MAX_BUFFER_SIZE / elem_size;
+ const LenT size = ReadScalar<LenT>(vec);
+ const auto max_elems = opts_.max_size / elem_size;
if (!Check(size < max_elems))
return false; // Protect against byte_size overflowing.
- const auto byte_size = sizeof(size) + elem_size * size;
- if (end) *end = veco + byte_size;
- return Verify(veco, byte_size);
+ const auto byte_size = sizeof(LenT) + elem_size * size;
+ if (end) *end = vec_offset + byte_size;
+ return Verify(vec_offset, byte_size);
}
// Special case for string contents, after the above has been called.
@@ -171,8 +177,8 @@ class Verifier FLATBUFFERS_FINAL_CLASS {
return true;
}
- __suppress_ubsan__("unsigned-integer-overflow") bool VerifyTableStart(
- const uint8_t *const table) {
+ FLATBUFFERS_SUPPRESS_UBSAN("unsigned-integer-overflow")
+ bool VerifyTableStart(const uint8_t *const table) {
// Check the vtable offset.
const auto tableo = static_cast<size_t>(table - buf_);
if (!Verify<soffset_t>(tableo)) return false;
@@ -203,7 +209,7 @@ class Verifier FLATBUFFERS_FINAL_CLASS {
}
// Call T::Verify, which must be in the generated code for this type.
- const auto o = VerifyOffset(start);
+ const auto o = VerifyOffset<uoffset_t>(start);
return Check(o != 0) &&
reinterpret_cast<const T *>(buf_ + start + o)->Verify(*this)
// clang-format off
@@ -214,8 +220,8 @@ class Verifier FLATBUFFERS_FINAL_CLASS {
// clang-format on
}
- template<typename T>
- bool VerifyNestedFlatBuffer(const Vector<uint8_t> *const buf,
+ template<typename T, int &..., typename SizeT>
+ bool VerifyNestedFlatBuffer(const Vector<uint8_t, SizeT> *const buf,
const char *const identifier) {
// Caller opted out of this.
if (!opts_.check_nested_flatbuffers) return true;
@@ -226,7 +232,7 @@ class Verifier FLATBUFFERS_FINAL_CLASS {
// If there is a nested buffer, it must be greater than the min size.
if (!Check(buf->size() >= FLATBUFFERS_MIN_BUFFER_SIZE)) return false;
- Verifier nested_verifier(buf->data(), buf->size());
+ Verifier nested_verifier(buf->data(), buf->size(), opts_);
return nested_verifier.VerifyBuffer<T>(identifier);
}
@@ -237,29 +243,32 @@ class Verifier FLATBUFFERS_FINAL_CLASS {
return VerifyBufferFromStart<T>(identifier, 0);
}
- template<typename T>
+ template<typename T, typename SizeT = uoffset_t>
bool VerifySizePrefixedBuffer(const char *const identifier) {
- return Verify<uoffset_t>(0U) &&
- Check(ReadScalar<uoffset_t>(buf_) == size_ - sizeof(uoffset_t)) &&
- VerifyBufferFromStart<T>(identifier, sizeof(uoffset_t));
+ return Verify<SizeT>(0U) &&
+ // Ensure the prefixed size is within the bounds of the provided
+ // length.
+ Check(ReadScalar<SizeT>(buf_) + sizeof(SizeT) <= size_) &&
+ VerifyBufferFromStart<T>(identifier, sizeof(SizeT));
}
- uoffset_t VerifyOffset(const size_t start) const {
- if (!Verify<uoffset_t>(start)) return 0;
- const auto o = ReadScalar<uoffset_t>(buf_ + start);
+ template<typename OffsetT = uoffset_t, typename SOffsetT = soffset_t>
+ size_t VerifyOffset(const size_t start) const {
+ if (!Verify<OffsetT>(start)) return 0;
+ const auto o = ReadScalar<OffsetT>(buf_ + start);
// May not point to itself.
if (!Check(o != 0)) return 0;
- // Can't wrap around / buffers are max 2GB.
- if (!Check(static_cast<soffset_t>(o) >= 0)) return 0;
+ // Can't wrap around larger than the max size.
+ if (!Check(static_cast<SOffsetT>(o) >= 0)) return 0;
// Must be inside the buffer to create a pointer from it (pointer outside
// buffer is UB).
if (!Verify(start + o, 1)) return 0;
return o;
}
- uoffset_t VerifyOffset(const uint8_t *const base,
- const voffset_t start) const {
- return VerifyOffset(static_cast<size_t>(base - buf_) + start);
+ template<typename OffsetT = uoffset_t>
+ size_t VerifyOffset(const uint8_t *const base, const voffset_t start) const {
+ return VerifyOffset<OffsetT>(static_cast<size_t>(base - buf_) + start);
}
// Called at the start of a table to increase counters measuring data
@@ -312,6 +321,12 @@ class Verifier FLATBUFFERS_FINAL_CLASS {
std::vector<uint8_t> *flex_reuse_tracker_ = nullptr;
};
+// Specialization for 64-bit offsets.
+template<>
+inline size_t Verifier::VerifyOffset<uoffset64_t>(const size_t start) const {
+ return VerifyOffset<uoffset64_t, soffset64_t>(start);
+}
+
} // namespace flatbuffers
#endif // FLATBUFFERS_VERIFIER_H_