// automatically generated by the FlatBuffers compiler, do not modify


#ifndef FLATBUFFERS_GENERATED_SIGMFCORE_CORE_H_
#define FLATBUFFERS_GENERATED_SIGMFCORE_CORE_H_

#include "flatbuffers/flatbuffers.h"

namespace core {

struct Global;
struct GlobalT;

struct Capture;
struct CaptureT;

struct Annotation;
struct AnnotationT;

struct Descr;
struct DescrT;

inline const flatbuffers::TypeTable *GlobalTypeTable();

inline const flatbuffers::TypeTable *CaptureTypeTable();

inline const flatbuffers::TypeTable *AnnotationTypeTable();

inline const flatbuffers::TypeTable *DescrTypeTable();

struct GlobalT : public flatbuffers::NativeTable {
  typedef Global TableType;
  std::string datatype;
  double sample_rate;
  std::string version;
  std::string sha512;
  uint32_t offset;
  std::string description;
  std::string author;
  std::string meta_doi;
  std::string data_doi;
  std::string recorder;
  std::string license;
  std::string hw;
  GlobalT()
      : sample_rate(0.0),
        offset(0) {
  }
};

struct Global FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
  typedef GlobalT NativeTableType;
  static const flatbuffers::TypeTable *MiniReflectTypeTable() {
    return GlobalTypeTable();
  }
  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
    VT_DATATYPE = 4,
    VT_SAMPLE_RATE = 6,
    VT_VERSION = 8,
    VT_SHA512 = 10,
    VT_OFFSET = 12,
    VT_DESCRIPTION = 14,
    VT_AUTHOR = 16,
    VT_META_DOI = 18,
    VT_DATA_DOI = 20,
    VT_RECORDER = 22,
    VT_LICENSE = 24,
    VT_HW = 26
  };
  const flatbuffers::String *datatype() const {
    return GetPointer<const flatbuffers::String *>(VT_DATATYPE);
  }
  double sample_rate() const {
    return GetField<double>(VT_SAMPLE_RATE, 0.0);
  }
  const flatbuffers::String *version() const {
    return GetPointer<const flatbuffers::String *>(VT_VERSION);
  }
  const flatbuffers::String *sha512() const {
    return GetPointer<const flatbuffers::String *>(VT_SHA512);
  }
  uint32_t offset() const {
    return GetField<uint32_t>(VT_OFFSET, 0);
  }
  const flatbuffers::String *description() const {
    return GetPointer<const flatbuffers::String *>(VT_DESCRIPTION);
  }
  const flatbuffers::String *author() const {
    return GetPointer<const flatbuffers::String *>(VT_AUTHOR);
  }
  const flatbuffers::String *meta_doi() const {
    return GetPointer<const flatbuffers::String *>(VT_META_DOI);
  }
  const flatbuffers::String *data_doi() const {
    return GetPointer<const flatbuffers::String *>(VT_DATA_DOI);
  }
  const flatbuffers::String *recorder() const {
    return GetPointer<const flatbuffers::String *>(VT_RECORDER);
  }
  const flatbuffers::String *license() const {
    return GetPointer<const flatbuffers::String *>(VT_LICENSE);
  }
  const flatbuffers::String *hw() const {
    return GetPointer<const flatbuffers::String *>(VT_HW);
  }
  bool Verify(flatbuffers::Verifier &verifier) const {
    return VerifyTableStart(verifier) &&
           VerifyOffset(verifier, VT_DATATYPE) &&
           verifier.VerifyString(datatype()) &&
           VerifyField<double>(verifier, VT_SAMPLE_RATE) &&
           VerifyOffset(verifier, VT_VERSION) &&
           verifier.VerifyString(version()) &&
           VerifyOffset(verifier, VT_SHA512) &&
           verifier.VerifyString(sha512()) &&
           VerifyField<uint32_t>(verifier, VT_OFFSET) &&
           VerifyOffset(verifier, VT_DESCRIPTION) &&
           verifier.VerifyString(description()) &&
           VerifyOffset(verifier, VT_AUTHOR) &&
           verifier.VerifyString(author()) &&
           VerifyOffset(verifier, VT_META_DOI) &&
           verifier.VerifyString(meta_doi()) &&
           VerifyOffset(verifier, VT_DATA_DOI) &&
           verifier.VerifyString(data_doi()) &&
           VerifyOffset(verifier, VT_RECORDER) &&
           verifier.VerifyString(recorder()) &&
           VerifyOffset(verifier, VT_LICENSE) &&
           verifier.VerifyString(license()) &&
           VerifyOffset(verifier, VT_HW) &&
           verifier.VerifyString(hw()) &&
           verifier.EndTable();
  }
  GlobalT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
  void UnPackTo(GlobalT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
  static flatbuffers::Offset<Global> Pack(flatbuffers::FlatBufferBuilder &_fbb, const GlobalT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
};

struct GlobalBuilder {
  flatbuffers::FlatBufferBuilder &fbb_;
  flatbuffers::uoffset_t start_;
  void add_datatype(flatbuffers::Offset<flatbuffers::String> datatype) {
    fbb_.AddOffset(Global::VT_DATATYPE, datatype);
  }
  void add_sample_rate(double sample_rate) {
    fbb_.AddElement<double>(Global::VT_SAMPLE_RATE, sample_rate, 0.0);
  }
  void add_version(flatbuffers::Offset<flatbuffers::String> version) {
    fbb_.AddOffset(Global::VT_VERSION, version);
  }
  void add_sha512(flatbuffers::Offset<flatbuffers::String> sha512) {
    fbb_.AddOffset(Global::VT_SHA512, sha512);
  }
  void add_offset(uint32_t offset) {
    fbb_.AddElement<uint32_t>(Global::VT_OFFSET, offset, 0);
  }
  void add_description(flatbuffers::Offset<flatbuffers::String> description) {
    fbb_.AddOffset(Global::VT_DESCRIPTION, description);
  }
  void add_author(flatbuffers::Offset<flatbuffers::String> author) {
    fbb_.AddOffset(Global::VT_AUTHOR, author);
  }
  void add_meta_doi(flatbuffers::Offset<flatbuffers::String> meta_doi) {
    fbb_.AddOffset(Global::VT_META_DOI, meta_doi);
  }
  void add_data_doi(flatbuffers::Offset<flatbuffers::String> data_doi) {
    fbb_.AddOffset(Global::VT_DATA_DOI, data_doi);
  }
  void add_recorder(flatbuffers::Offset<flatbuffers::String> recorder) {
    fbb_.AddOffset(Global::VT_RECORDER, recorder);
  }
  void add_license(flatbuffers::Offset<flatbuffers::String> license) {
    fbb_.AddOffset(Global::VT_LICENSE, license);
  }
  void add_hw(flatbuffers::Offset<flatbuffers::String> hw) {
    fbb_.AddOffset(Global::VT_HW, hw);
  }
  explicit GlobalBuilder(flatbuffers::FlatBufferBuilder &_fbb)
        : fbb_(_fbb) {
    start_ = fbb_.StartTable();
  }
  GlobalBuilder &operator=(const GlobalBuilder &);
  flatbuffers::Offset<Global> Finish() {
    const auto end = fbb_.EndTable(start_);
    auto o = flatbuffers::Offset<Global>(end);
    return o;
  }
};

inline flatbuffers::Offset<Global> CreateGlobal(
    flatbuffers::FlatBufferBuilder &_fbb,
    flatbuffers::Offset<flatbuffers::String> datatype = 0,
    double sample_rate = 0.0,
    flatbuffers::Offset<flatbuffers::String> version = 0,
    flatbuffers::Offset<flatbuffers::String> sha512 = 0,
    uint32_t offset = 0,
    flatbuffers::Offset<flatbuffers::String> description = 0,
    flatbuffers::Offset<flatbuffers::String> author = 0,
    flatbuffers::Offset<flatbuffers::String> meta_doi = 0,
    flatbuffers::Offset<flatbuffers::String> data_doi = 0,
    flatbuffers::Offset<flatbuffers::String> recorder = 0,
    flatbuffers::Offset<flatbuffers::String> license = 0,
    flatbuffers::Offset<flatbuffers::String> hw = 0) {
  GlobalBuilder builder_(_fbb);
  builder_.add_sample_rate(sample_rate);
  builder_.add_hw(hw);
  builder_.add_license(license);
  builder_.add_recorder(recorder);
  builder_.add_data_doi(data_doi);
  builder_.add_meta_doi(meta_doi);
  builder_.add_author(author);
  builder_.add_description(description);
  builder_.add_offset(offset);
  builder_.add_sha512(sha512);
  builder_.add_version(version);
  builder_.add_datatype(datatype);
  return builder_.Finish();
}

inline flatbuffers::Offset<Global> CreateGlobalDirect(
    flatbuffers::FlatBufferBuilder &_fbb,
    const char *datatype = nullptr,
    double sample_rate = 0.0,
    const char *version = nullptr,
    const char *sha512 = nullptr,
    uint32_t offset = 0,
    const char *description = nullptr,
    const char *author = nullptr,
    const char *meta_doi = nullptr,
    const char *data_doi = nullptr,
    const char *recorder = nullptr,
    const char *license = nullptr,
    const char *hw = nullptr) {
  auto datatype__ = datatype ? _fbb.CreateString(datatype) : 0;
  auto version__ = version ? _fbb.CreateString(version) : 0;
  auto sha512__ = sha512 ? _fbb.CreateString(sha512) : 0;
  auto description__ = description ? _fbb.CreateString(description) : 0;
  auto author__ = author ? _fbb.CreateString(author) : 0;
  auto meta_doi__ = meta_doi ? _fbb.CreateString(meta_doi) : 0;
  auto data_doi__ = data_doi ? _fbb.CreateString(data_doi) : 0;
  auto recorder__ = recorder ? _fbb.CreateString(recorder) : 0;
  auto license__ = license ? _fbb.CreateString(license) : 0;
  auto hw__ = hw ? _fbb.CreateString(hw) : 0;
  return core::CreateGlobal(
      _fbb,
      datatype__,
      sample_rate,
      version__,
      sha512__,
      offset,
      description__,
      author__,
      meta_doi__,
      data_doi__,
      recorder__,
      license__,
      hw__);
}

flatbuffers::Offset<Global> CreateGlobal(flatbuffers::FlatBufferBuilder &_fbb, const GlobalT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);

struct CaptureT : public flatbuffers::NativeTable {
  typedef Capture TableType;
  uint64_t sample_start;
  uint64_t global_index;
  uint64_t length;
  double frequency;
  std::string datetime;
  CaptureT()
      : sample_start(0),
        global_index(0),
        length(0),
        frequency(0.0) {
  }
};

struct Capture FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
  typedef CaptureT NativeTableType;
  static const flatbuffers::TypeTable *MiniReflectTypeTable() {
    return CaptureTypeTable();
  }
  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
    VT_SAMPLE_START = 4,
    VT_GLOBAL_INDEX = 6,
    VT_LENGTH = 8,
    VT_FREQUENCY = 10,
    VT_DATETIME = 12
  };
  uint64_t sample_start() const {
    return GetField<uint64_t>(VT_SAMPLE_START, 0);
  }
  uint64_t global_index() const {
    return GetField<uint64_t>(VT_GLOBAL_INDEX, 0);
  }
  uint64_t length() const {
    return GetField<uint64_t>(VT_LENGTH, 0);
  }
  double frequency() const {
    return GetField<double>(VT_FREQUENCY, 0.0);
  }
  const flatbuffers::String *datetime() const {
    return GetPointer<const flatbuffers::String *>(VT_DATETIME);
  }
  bool Verify(flatbuffers::Verifier &verifier) const {
    return VerifyTableStart(verifier) &&
           VerifyField<uint64_t>(verifier, VT_SAMPLE_START) &&
           VerifyField<uint64_t>(verifier, VT_GLOBAL_INDEX) &&
           VerifyField<uint64_t>(verifier, VT_LENGTH) &&
           VerifyField<double>(verifier, VT_FREQUENCY) &&
           VerifyOffset(verifier, VT_DATETIME) &&
           verifier.VerifyString(datetime()) &&
           verifier.EndTable();
  }
  CaptureT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
  void UnPackTo(CaptureT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
  static flatbuffers::Offset<Capture> Pack(flatbuffers::FlatBufferBuilder &_fbb, const CaptureT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
};

struct CaptureBuilder {
  flatbuffers::FlatBufferBuilder &fbb_;
  flatbuffers::uoffset_t start_;
  void add_sample_start(uint64_t sample_start) {
    fbb_.AddElement<uint64_t>(Capture::VT_SAMPLE_START, sample_start, 0);
  }
  void add_global_index(uint64_t global_index) {
    fbb_.AddElement<uint64_t>(Capture::VT_GLOBAL_INDEX, global_index, 0);
  }
  void add_length(uint64_t length) {
    fbb_.AddElement<uint64_t>(Capture::VT_LENGTH, length, 0);
  }
  void add_frequency(double frequency) {
    fbb_.AddElement<double>(Capture::VT_FREQUENCY, frequency, 0.0);
  }
  void add_datetime(flatbuffers::Offset<flatbuffers::String> datetime) {
    fbb_.AddOffset(Capture::VT_DATETIME, datetime);
  }
  explicit CaptureBuilder(flatbuffers::FlatBufferBuilder &_fbb)
        : fbb_(_fbb) {
    start_ = fbb_.StartTable();
  }
  CaptureBuilder &operator=(const CaptureBuilder &);
  flatbuffers::Offset<Capture> Finish() {
    const auto end = fbb_.EndTable(start_);
    auto o = flatbuffers::Offset<Capture>(end);
    return o;
  }
};

inline flatbuffers::Offset<Capture> CreateCapture(
    flatbuffers::FlatBufferBuilder &_fbb,
    uint64_t sample_start = 0,
    uint64_t global_index = 0,
    uint64_t length = 0,
    double frequency = 0.0,
    flatbuffers::Offset<flatbuffers::String> datetime = 0) {
  CaptureBuilder builder_(_fbb);
  builder_.add_frequency(frequency);
  builder_.add_length(length);
  builder_.add_global_index(global_index);
  builder_.add_sample_start(sample_start);
  builder_.add_datetime(datetime);
  return builder_.Finish();
}

inline flatbuffers::Offset<Capture> CreateCaptureDirect(
    flatbuffers::FlatBufferBuilder &_fbb,
    uint64_t sample_start = 0,
    uint64_t global_index = 0,
    uint64_t length = 0,
    double frequency = 0.0,
    const char *datetime = nullptr) {
  auto datetime__ = datetime ? _fbb.CreateString(datetime) : 0;
  return core::CreateCapture(
      _fbb,
      sample_start,
      global_index,
      length,
      frequency,
      datetime__);
}

flatbuffers::Offset<Capture> CreateCapture(flatbuffers::FlatBufferBuilder &_fbb, const CaptureT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);

struct AnnotationT : public flatbuffers::NativeTable {
  typedef Annotation TableType;
  double freq_lower_edge;
  double freq_upper_edge;
  uint64_t sample_start;
  uint64_t sample_count;
  std::string description;
  std::string generator;
  std::string comment;
  AnnotationT()
      : freq_lower_edge(0.0),
        freq_upper_edge(0.0),
        sample_start(0),
        sample_count(0) {
  }
};

struct Annotation FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
  typedef AnnotationT NativeTableType;
  static const flatbuffers::TypeTable *MiniReflectTypeTable() {
    return AnnotationTypeTable();
  }
  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
    VT_FREQ_LOWER_EDGE = 4,
    VT_FREQ_UPPER_EDGE = 6,
    VT_SAMPLE_START = 8,
    VT_SAMPLE_COUNT = 10,
    VT_DESCRIPTION = 12,
    VT_GENERATOR = 14,
    VT_COMMENT = 16
  };
  double freq_lower_edge() const {
    return GetField<double>(VT_FREQ_LOWER_EDGE, 0.0);
  }
  double freq_upper_edge() const {
    return GetField<double>(VT_FREQ_UPPER_EDGE, 0.0);
  }
  uint64_t sample_start() const {
    return GetField<uint64_t>(VT_SAMPLE_START, 0);
  }
  uint64_t sample_count() const {
    return GetField<uint64_t>(VT_SAMPLE_COUNT, 0);
  }
  const flatbuffers::String *description() const {
    return GetPointer<const flatbuffers::String *>(VT_DESCRIPTION);
  }
  const flatbuffers::String *generator() const {
    return GetPointer<const flatbuffers::String *>(VT_GENERATOR);
  }
  const flatbuffers::String *comment() const {
    return GetPointer<const flatbuffers::String *>(VT_COMMENT);
  }
  bool Verify(flatbuffers::Verifier &verifier) const {
    return VerifyTableStart(verifier) &&
           VerifyField<double>(verifier, VT_FREQ_LOWER_EDGE) &&
           VerifyField<double>(verifier, VT_FREQ_UPPER_EDGE) &&
           VerifyField<uint64_t>(verifier, VT_SAMPLE_START) &&
           VerifyField<uint64_t>(verifier, VT_SAMPLE_COUNT) &&
           VerifyOffset(verifier, VT_DESCRIPTION) &&
           verifier.VerifyString(description()) &&
           VerifyOffset(verifier, VT_GENERATOR) &&
           verifier.VerifyString(generator()) &&
           VerifyOffset(verifier, VT_COMMENT) &&
           verifier.VerifyString(comment()) &&
           verifier.EndTable();
  }
  AnnotationT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
  void UnPackTo(AnnotationT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
  static flatbuffers::Offset<Annotation> Pack(flatbuffers::FlatBufferBuilder &_fbb, const AnnotationT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
};

struct AnnotationBuilder {
  flatbuffers::FlatBufferBuilder &fbb_;
  flatbuffers::uoffset_t start_;
  void add_freq_lower_edge(double freq_lower_edge) {
    fbb_.AddElement<double>(Annotation::VT_FREQ_LOWER_EDGE, freq_lower_edge, 0.0);
  }
  void add_freq_upper_edge(double freq_upper_edge) {
    fbb_.AddElement<double>(Annotation::VT_FREQ_UPPER_EDGE, freq_upper_edge, 0.0);
  }
  void add_sample_start(uint64_t sample_start) {
    fbb_.AddElement<uint64_t>(Annotation::VT_SAMPLE_START, sample_start, 0);
  }
  void add_sample_count(uint64_t sample_count) {
    fbb_.AddElement<uint64_t>(Annotation::VT_SAMPLE_COUNT, sample_count, 0);
  }
  void add_description(flatbuffers::Offset<flatbuffers::String> description) {
    fbb_.AddOffset(Annotation::VT_DESCRIPTION, description);
  }
  void add_generator(flatbuffers::Offset<flatbuffers::String> generator) {
    fbb_.AddOffset(Annotation::VT_GENERATOR, generator);
  }
  void add_comment(flatbuffers::Offset<flatbuffers::String> comment) {
    fbb_.AddOffset(Annotation::VT_COMMENT, comment);
  }
  explicit AnnotationBuilder(flatbuffers::FlatBufferBuilder &_fbb)
        : fbb_(_fbb) {
    start_ = fbb_.StartTable();
  }
  AnnotationBuilder &operator=(const AnnotationBuilder &);
  flatbuffers::Offset<Annotation> Finish() {
    const auto end = fbb_.EndTable(start_);
    auto o = flatbuffers::Offset<Annotation>(end);
    return o;
  }
};

inline flatbuffers::Offset<Annotation> CreateAnnotation(
    flatbuffers::FlatBufferBuilder &_fbb,
    double freq_lower_edge = 0.0,
    double freq_upper_edge = 0.0,
    uint64_t sample_start = 0,
    uint64_t sample_count = 0,
    flatbuffers::Offset<flatbuffers::String> description = 0,
    flatbuffers::Offset<flatbuffers::String> generator = 0,
    flatbuffers::Offset<flatbuffers::String> comment = 0) {
  AnnotationBuilder builder_(_fbb);
  builder_.add_sample_count(sample_count);
  builder_.add_sample_start(sample_start);
  builder_.add_freq_upper_edge(freq_upper_edge);
  builder_.add_freq_lower_edge(freq_lower_edge);
  builder_.add_comment(comment);
  builder_.add_generator(generator);
  builder_.add_description(description);
  return builder_.Finish();
}

inline flatbuffers::Offset<Annotation> CreateAnnotationDirect(
    flatbuffers::FlatBufferBuilder &_fbb,
    double freq_lower_edge = 0.0,
    double freq_upper_edge = 0.0,
    uint64_t sample_start = 0,
    uint64_t sample_count = 0,
    const char *description = nullptr,
    const char *generator = nullptr,
    const char *comment = nullptr) {
  auto description__ = description ? _fbb.CreateString(description) : 0;
  auto generator__ = generator ? _fbb.CreateString(generator) : 0;
  auto comment__ = comment ? _fbb.CreateString(comment) : 0;
  return core::CreateAnnotation(
      _fbb,
      freq_lower_edge,
      freq_upper_edge,
      sample_start,
      sample_count,
      description__,
      generator__,
      comment__);
}

flatbuffers::Offset<Annotation> CreateAnnotation(flatbuffers::FlatBufferBuilder &_fbb, const AnnotationT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);

struct DescrT : public flatbuffers::NativeTable {
  typedef Descr TableType;
  std::unique_ptr<GlobalT> global;
  std::unique_ptr<AnnotationT> annotation;
  std::unique_ptr<CaptureT> capture;
  DescrT() {
  }
};

struct Descr FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
  typedef DescrT NativeTableType;
  static const flatbuffers::TypeTable *MiniReflectTypeTable() {
    return DescrTypeTable();
  }
  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
    VT_GLOBAL = 4,
    VT_ANNOTATION = 6,
    VT_CAPTURE = 8
  };
  const Global *global() const {
    return GetPointer<const Global *>(VT_GLOBAL);
  }
  const Annotation *annotation() const {
    return GetPointer<const Annotation *>(VT_ANNOTATION);
  }
  const Capture *capture() const {
    return GetPointer<const Capture *>(VT_CAPTURE);
  }
  bool Verify(flatbuffers::Verifier &verifier) const {
    return VerifyTableStart(verifier) &&
           VerifyOffset(verifier, VT_GLOBAL) &&
           verifier.VerifyTable(global()) &&
           VerifyOffset(verifier, VT_ANNOTATION) &&
           verifier.VerifyTable(annotation()) &&
           VerifyOffset(verifier, VT_CAPTURE) &&
           verifier.VerifyTable(capture()) &&
           verifier.EndTable();
  }
  DescrT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
  void UnPackTo(DescrT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
  static flatbuffers::Offset<Descr> Pack(flatbuffers::FlatBufferBuilder &_fbb, const DescrT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
};

struct DescrBuilder {
  flatbuffers::FlatBufferBuilder &fbb_;
  flatbuffers::uoffset_t start_;
  void add_global(flatbuffers::Offset<Global> global) {
    fbb_.AddOffset(Descr::VT_GLOBAL, global);
  }
  void add_annotation(flatbuffers::Offset<Annotation> annotation) {
    fbb_.AddOffset(Descr::VT_ANNOTATION, annotation);
  }
  void add_capture(flatbuffers::Offset<Capture> capture) {
    fbb_.AddOffset(Descr::VT_CAPTURE, capture);
  }
  explicit DescrBuilder(flatbuffers::FlatBufferBuilder &_fbb)
        : fbb_(_fbb) {
    start_ = fbb_.StartTable();
  }
  DescrBuilder &operator=(const DescrBuilder &);
  flatbuffers::Offset<Descr> Finish() {
    const auto end = fbb_.EndTable(start_);
    auto o = flatbuffers::Offset<Descr>(end);
    return o;
  }
};

inline flatbuffers::Offset<Descr> CreateDescr(
    flatbuffers::FlatBufferBuilder &_fbb,
    flatbuffers::Offset<Global> global = 0,
    flatbuffers::Offset<Annotation> annotation = 0,
    flatbuffers::Offset<Capture> capture = 0) {
  DescrBuilder builder_(_fbb);
  builder_.add_capture(capture);
  builder_.add_annotation(annotation);
  builder_.add_global(global);
  return builder_.Finish();
}

flatbuffers::Offset<Descr> CreateDescr(flatbuffers::FlatBufferBuilder &_fbb, const DescrT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);

inline GlobalT *Global::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
  auto _o = new GlobalT();
  UnPackTo(_o, _resolver);
  return _o;
}

inline void Global::UnPackTo(GlobalT *_o, const flatbuffers::resolver_function_t *_resolver) const {
  (void)_o;
  (void)_resolver;
  { auto _e = datatype(); if (_e) _o->datatype = _e->str(); };
  { auto _e = sample_rate(); _o->sample_rate = _e; };
  { auto _e = version(); if (_e) _o->version = _e->str(); };
  { auto _e = sha512(); if (_e) _o->sha512 = _e->str(); };
  { auto _e = offset(); _o->offset = _e; };
  { auto _e = description(); if (_e) _o->description = _e->str(); };
  { auto _e = author(); if (_e) _o->author = _e->str(); };
  { auto _e = meta_doi(); if (_e) _o->meta_doi = _e->str(); };
  { auto _e = data_doi(); if (_e) _o->data_doi = _e->str(); };
  { auto _e = recorder(); if (_e) _o->recorder = _e->str(); };
  { auto _e = license(); if (_e) _o->license = _e->str(); };
  { auto _e = hw(); if (_e) _o->hw = _e->str(); };
}

inline flatbuffers::Offset<Global> Global::Pack(flatbuffers::FlatBufferBuilder &_fbb, const GlobalT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
  return CreateGlobal(_fbb, _o, _rehasher);
}

inline flatbuffers::Offset<Global> CreateGlobal(flatbuffers::FlatBufferBuilder &_fbb, const GlobalT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
  (void)_rehasher;
  (void)_o;
  struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const GlobalT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
  auto _datatype = _o->datatype.empty() ? 0 : _fbb.CreateString(_o->datatype);
  auto _sample_rate = _o->sample_rate;
  auto _version = _o->version.empty() ? 0 : _fbb.CreateString(_o->version);
  auto _sha512 = _o->sha512.empty() ? 0 : _fbb.CreateString(_o->sha512);
  auto _offset = _o->offset;
  auto _description = _o->description.empty() ? 0 : _fbb.CreateString(_o->description);
  auto _author = _o->author.empty() ? 0 : _fbb.CreateString(_o->author);
  auto _meta_doi = _o->meta_doi.empty() ? 0 : _fbb.CreateString(_o->meta_doi);
  auto _data_doi = _o->data_doi.empty() ? 0 : _fbb.CreateString(_o->data_doi);
  auto _recorder = _o->recorder.empty() ? 0 : _fbb.CreateString(_o->recorder);
  auto _license = _o->license.empty() ? 0 : _fbb.CreateString(_o->license);
  auto _hw = _o->hw.empty() ? 0 : _fbb.CreateString(_o->hw);
  return core::CreateGlobal(
      _fbb,
      _datatype,
      _sample_rate,
      _version,
      _sha512,
      _offset,
      _description,
      _author,
      _meta_doi,
      _data_doi,
      _recorder,
      _license,
      _hw);
}

inline CaptureT *Capture::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
  auto _o = new CaptureT();
  UnPackTo(_o, _resolver);
  return _o;
}

inline void Capture::UnPackTo(CaptureT *_o, const flatbuffers::resolver_function_t *_resolver) const {
  (void)_o;
  (void)_resolver;
  { auto _e = sample_start(); _o->sample_start = _e; };
  { auto _e = global_index(); _o->global_index = _e; };
  { auto _e = length(); _o->length = _e; };
  { auto _e = frequency(); _o->frequency = _e; };
  { auto _e = datetime(); if (_e) _o->datetime = _e->str(); };
}

inline flatbuffers::Offset<Capture> Capture::Pack(flatbuffers::FlatBufferBuilder &_fbb, const CaptureT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
  return CreateCapture(_fbb, _o, _rehasher);
}

inline flatbuffers::Offset<Capture> CreateCapture(flatbuffers::FlatBufferBuilder &_fbb, const CaptureT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
  (void)_rehasher;
  (void)_o;
  struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const CaptureT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
  auto _sample_start = _o->sample_start;
  auto _global_index = _o->global_index;
  auto _length = _o->length;
  auto _frequency = _o->frequency;
  auto _datetime = _o->datetime.empty() ? 0 : _fbb.CreateString(_o->datetime);
  return core::CreateCapture(
      _fbb,
      _sample_start,
      _global_index,
      _length,
      _frequency,
      _datetime);
}

inline AnnotationT *Annotation::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
  auto _o = new AnnotationT();
  UnPackTo(_o, _resolver);
  return _o;
}

inline void Annotation::UnPackTo(AnnotationT *_o, const flatbuffers::resolver_function_t *_resolver) const {
  (void)_o;
  (void)_resolver;
  { auto _e = freq_lower_edge(); _o->freq_lower_edge = _e; };
  { auto _e = freq_upper_edge(); _o->freq_upper_edge = _e; };
  { auto _e = sample_start(); _o->sample_start = _e; };
  { auto _e = sample_count(); _o->sample_count = _e; };
  { auto _e = description(); if (_e) _o->description = _e->str(); };
  { auto _e = generator(); if (_e) _o->generator = _e->str(); };
  { auto _e = comment(); if (_e) _o->comment = _e->str(); };
}

inline flatbuffers::Offset<Annotation> Annotation::Pack(flatbuffers::FlatBufferBuilder &_fbb, const AnnotationT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
  return CreateAnnotation(_fbb, _o, _rehasher);
}

inline flatbuffers::Offset<Annotation> CreateAnnotation(flatbuffers::FlatBufferBuilder &_fbb, const AnnotationT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
  (void)_rehasher;
  (void)_o;
  struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const AnnotationT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
  auto _freq_lower_edge = _o->freq_lower_edge;
  auto _freq_upper_edge = _o->freq_upper_edge;
  auto _sample_start = _o->sample_start;
  auto _sample_count = _o->sample_count;
  auto _description = _o->description.empty() ? 0 : _fbb.CreateString(_o->description);
  auto _generator = _o->generator.empty() ? 0 : _fbb.CreateString(_o->generator);
  auto _comment = _o->comment.empty() ? 0 : _fbb.CreateString(_o->comment);
  return core::CreateAnnotation(
      _fbb,
      _freq_lower_edge,
      _freq_upper_edge,
      _sample_start,
      _sample_count,
      _description,
      _generator,
      _comment);
}

inline DescrT *Descr::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
  auto _o = new DescrT();
  UnPackTo(_o, _resolver);
  return _o;
}

inline void Descr::UnPackTo(DescrT *_o, const flatbuffers::resolver_function_t *_resolver) const {
  (void)_o;
  (void)_resolver;
  { auto _e = global(); if (_e) _o->global = std::unique_ptr<GlobalT>(_e->UnPack(_resolver)); };
  { auto _e = annotation(); if (_e) _o->annotation = std::unique_ptr<AnnotationT>(_e->UnPack(_resolver)); };
  { auto _e = capture(); if (_e) _o->capture = std::unique_ptr<CaptureT>(_e->UnPack(_resolver)); };
}

inline flatbuffers::Offset<Descr> Descr::Pack(flatbuffers::FlatBufferBuilder &_fbb, const DescrT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
  return CreateDescr(_fbb, _o, _rehasher);
}

inline flatbuffers::Offset<Descr> CreateDescr(flatbuffers::FlatBufferBuilder &_fbb, const DescrT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
  (void)_rehasher;
  (void)_o;
  struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const DescrT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
  auto _global = _o->global ? CreateGlobal(_fbb, _o->global.get(), _rehasher) : 0;
  auto _annotation = _o->annotation ? CreateAnnotation(_fbb, _o->annotation.get(), _rehasher) : 0;
  auto _capture = _o->capture ? CreateCapture(_fbb, _o->capture.get(), _rehasher) : 0;
  return core::CreateDescr(
      _fbb,
      _global,
      _annotation,
      _capture);
}

inline const flatbuffers::TypeTable *GlobalTypeTable() {
  static const flatbuffers::TypeCode type_codes[] = {
    { flatbuffers::ET_STRING, 0, -1 },
    { flatbuffers::ET_DOUBLE, 0, -1 },
    { flatbuffers::ET_STRING, 0, -1 },
    { flatbuffers::ET_STRING, 0, -1 },
    { flatbuffers::ET_UINT, 0, -1 },
    { flatbuffers::ET_STRING, 0, -1 },
    { flatbuffers::ET_STRING, 0, -1 },
    { flatbuffers::ET_STRING, 0, -1 },
    { flatbuffers::ET_STRING, 0, -1 },
    { flatbuffers::ET_STRING, 0, -1 },
    { flatbuffers::ET_STRING, 0, -1 },
    { flatbuffers::ET_STRING, 0, -1 }
  };
  static const char * const names[] = {
    "datatype",
    "sample_rate",
    "version",
    "sha512",
    "offset",
    "description",
    "author",
    "meta_doi",
    "data_doi",
    "recorder",
    "license",
    "hw"
  };
  static const flatbuffers::TypeTable tt = {
    flatbuffers::ST_TABLE, 12, type_codes, nullptr, nullptr, names
  };
  return &tt;
}

inline const flatbuffers::TypeTable *CaptureTypeTable() {
  static const flatbuffers::TypeCode type_codes[] = {
    { flatbuffers::ET_ULONG, 0, -1 },
    { flatbuffers::ET_ULONG, 0, -1 },
    { flatbuffers::ET_ULONG, 0, -1 },
    { flatbuffers::ET_DOUBLE, 0, -1 },
    { flatbuffers::ET_STRING, 0, -1 }
  };
  static const char * const names[] = {
    "sample_start",
    "global_index",
    "length",
    "frequency",
    "datetime"
  };
  static const flatbuffers::TypeTable tt = {
    flatbuffers::ST_TABLE, 5, type_codes, nullptr, nullptr, names
  };
  return &tt;
}

inline const flatbuffers::TypeTable *AnnotationTypeTable() {
  static const flatbuffers::TypeCode type_codes[] = {
    { flatbuffers::ET_DOUBLE, 0, -1 },
    { flatbuffers::ET_DOUBLE, 0, -1 },
    { flatbuffers::ET_ULONG, 0, -1 },
    { flatbuffers::ET_ULONG, 0, -1 },
    { flatbuffers::ET_STRING, 0, -1 },
    { flatbuffers::ET_STRING, 0, -1 },
    { flatbuffers::ET_STRING, 0, -1 }
  };
  static const char * const names[] = {
    "freq_lower_edge",
    "freq_upper_edge",
    "sample_start",
    "sample_count",
    "description",
    "generator",
    "comment"
  };
  static const flatbuffers::TypeTable tt = {
    flatbuffers::ST_TABLE, 7, type_codes, nullptr, nullptr, names
  };
  return &tt;
}

inline const flatbuffers::TypeTable *DescrTypeTable() {
  static const flatbuffers::TypeCode type_codes[] = {
    { flatbuffers::ET_SEQUENCE, 0, 0 },
    { flatbuffers::ET_SEQUENCE, 0, 1 },
    { flatbuffers::ET_SEQUENCE, 0, 2 }
  };
  static const flatbuffers::TypeFunction type_refs[] = {
    GlobalTypeTable,
    AnnotationTypeTable,
    CaptureTypeTable
  };
  static const char * const names[] = {
    "global",
    "annotation",
    "capture"
  };
  static const flatbuffers::TypeTable tt = {
    flatbuffers::ST_TABLE, 3, type_codes, type_refs, nullptr, names
  };
  return &tt;
}

}  // namespace core

#endif  // FLATBUFFERS_GENERATED_SIGMFCORE_CORE_H_
