17#ifndef FLATBUFFERS_TABLE_H_
18#define FLATBUFFERS_TABLE_H_
30 return data_ - ReadScalar<soffset_t>(data_);
39 auto vtsize = ReadScalar<voffset_t>(vtable);
42 return field < vtsize ? ReadScalar<voffset_t>(vtable + field) : 0;
45 template<
typename T> T
GetField(voffset_t field, T defaultval)
const {
47 return field_offset ? ReadScalar<T>(data_ + field_offset) : defaultval;
50 template<
typename P,
typename OffsetSize = uoffset_t>
53 auto p = data_ + field_offset;
54 return field_offset ?
reinterpret_cast<P
>(
p + ReadScalar<OffsetSize>(
p))
57 template<
typename P,
typename OffsetSize = uoffset_t>
59 return const_cast<Table *
>(
this)->GetPointer<P, OffsetSize>(field);
63 return GetPointer<P, uoffset64_t>(field);
67 return GetPointer<P, uoffset64_t>(field);
70 template<
typename P> P
GetStruct(voffset_t field)
const {
72 auto p =
const_cast<uint8_t *
>(data_ + field_offset);
73 return field_offset ?
reinterpret_cast<P
>(
p) :
nullptr;
76 template<
typename Raw,
typename Face>
77 flatbuffers::Optional<Face>
GetOptional(voffset_t field)
const {
79 auto p = data_ + field_offset;
80 return field_offset ? Optional<Face>(
static_cast<Face
>(ReadScalar<Raw>(
p)))
84 template<
typename T>
bool SetField(voffset_t field, T val, T def) {
86 if (!field_offset)
return IsTheSameAs(val, def);
87 WriteScalar(data_ + field_offset, val);
90 template<
typename T>
bool SetField(voffset_t field, T val) {
92 if (!field_offset)
return false;
93 WriteScalar(data_ + field_offset, val);
99 if (!field_offset)
return false;
100 WriteScalar(data_ + field_offset,
101 static_cast<uoffset_t
>(val - (data_ + field_offset)));
107 return field_offset ? data_ + field_offset :
nullptr;
120 return verifier.VerifyTableStart(data_);
126 size_t align)
const {
131 return !field_offset || verifier.VerifyField<T>(data_, field_offset, align);
137 size_t align)
const {
139 return verifier.Check(field_offset != 0) &&
140 verifier.VerifyField<T>(data_, field_offset, align);
144 template<
typename OffsetT = uoffset_t>
147 return !field_offset || verifier.VerifyOffset<OffsetT>(data_, field_offset);
150 template<
typename OffsetT = uoffset_t>
153 return verifier.Check(field_offset != 0) &&
154 verifier.VerifyOffset<OffsetT>(data_, field_offset);
158 return VerifyOffset<uoffset64_t>(verifier, field);
162 return VerifyOffsetRequired<uoffset64_t>(verifier, field);
178inline flatbuffers::Optional<bool> Table::GetOptional<uint8_t, bool>(
179 voffset_t field)
const {
181 auto p = data_ + field_offset;
182 return field_offset ? Optional<bool>(ReadScalar<uint8_t>(
p) != 0)
P GetPointer64(voffset_t field)
bool SetField(voffset_t field, T val)
bool VerifyOffsetRequired(const Verifier &verifier, voffset_t field) const
const uint8_t * GetVTable() const
P GetPointer64(voffset_t field) const
bool VerifyField(const Verifier &verifier, voffset_t field, size_t align) const
bool VerifyOffset64(const Verifier &verifier, voffset_t field) const
P GetStruct(voffset_t field) const
bool VerifyOffset(const Verifier &verifier, voffset_t field) const
const uint8_t * GetAddressOf(voffset_t field) const
uint8_t * GetAddressOf(voffset_t field)
bool VerifyTableStart(Verifier &verifier) const
T GetField(voffset_t field, T defaultval) const
bool SetPointer(voffset_t field, const uint8_t *val)
bool SetField(voffset_t field, T val, T def)
P GetPointer(voffset_t field)
bool VerifyFieldRequired(const Verifier &verifier, voffset_t field, size_t align) const
P GetPointer(voffset_t field) const
voffset_t GetOptionalFieldOffset(voffset_t field) const
flatbuffers::Optional< Face > GetOptional(voffset_t field) const
bool CheckField(voffset_t field) const
bool VerifyOffset64Required(const Verifier &verifier, voffset_t field) const