Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions include/flatbuffers/idl.h
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ struct Definition {

struct FieldDef : public Definition {
FieldDef()
: deprecated(false),
: deprecated(kNotDeprecated),
key(false),
shared(false),
native_inline(false),
Expand All @@ -353,8 +353,24 @@ struct FieldDef : public Definition {
bool IsDefault() const { return presence == kDefault; }

Value value;
bool deprecated; // Field is allowed to be present in old data, but can't be.
// written in new data nor accessed in new code.

enum Deprecated {
kNotDeprecated,
kDeprecated,
kDeprecatedReadOnly,
};
Deprecated static MakeFieldDeprecated(bool deprecated, bool readonly) {
FLATBUFFERS_ASSERT(!(deprecated && readonly));
// clang-format off
return readonly ? FieldDef::kDeprecatedReadOnly
: deprecated ? FieldDef::kDeprecated
: FieldDef::kNotDeprecated;
// clang-format on
}
Deprecated deprecated; // Field is allowed to be present in old data, but
// can't be written in new data, but can optionally
// still be accessed in new code.

bool key; // Field functions as a key for creating sorted vectors.
bool shared; // Field will be using string pooling (i.e. CreateSharedString)
// as default serialization behavior if field is a string.
Expand Down Expand Up @@ -973,6 +989,7 @@ class Parser : public ParserState {
namespaces_.push_back(empty_namespace_);
current_namespace_ = empty_namespace_;
known_attributes_["deprecated"] = true;
known_attributes_["deprecated_readonly"] = true;
known_attributes_["required"] = true;
known_attributes_["key"] = true;
known_attributes_["shared"] = true;
Expand Down
26 changes: 19 additions & 7 deletions include/flatbuffers/reflection_generated.h
Original file line number Diff line number Diff line change
Expand Up @@ -611,13 +611,14 @@ struct Field FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
VT_DEFAULT_INTEGER = 12,
VT_DEFAULT_REAL = 14,
VT_DEPRECATED = 16,
VT_REQUIRED = 18,
VT_KEY = 20,
VT_ATTRIBUTES = 22,
VT_DOCUMENTATION = 24,
VT_OPTIONAL = 26,
VT_PADDING = 28,
VT_OFFSET64 = 30
VT_DEPRECATED_READONLY = 18,
VT_REQUIRED = 20,
VT_KEY = 22,
VT_ATTRIBUTES = 24,
VT_DOCUMENTATION = 26,
VT_OPTIONAL = 28,
VT_PADDING = 30,
VT_OFFSET64 = 32
};
const ::flatbuffers::String *name() const {
return GetPointer<const ::flatbuffers::String *>(VT_NAME);
Expand Down Expand Up @@ -652,6 +653,9 @@ struct Field FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
bool deprecated() const {
return GetField<uint8_t>(VT_DEPRECATED, 0) != 0;
}
bool deprecated_readonly() const {
return GetField<uint8_t>(VT_DEPRECATED_READONLY, 0) != 0;
}
bool required() const {
return GetField<uint8_t>(VT_REQUIRED, 0) != 0;
}
Expand Down Expand Up @@ -686,6 +690,7 @@ struct Field FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
VerifyField<int64_t>(verifier, VT_DEFAULT_INTEGER, 8) &&
VerifyField<double>(verifier, VT_DEFAULT_REAL, 8) &&
VerifyField<uint8_t>(verifier, VT_DEPRECATED, 1) &&
VerifyField<uint8_t>(verifier, VT_DEPRECATED_READONLY, 1) &&
VerifyField<uint8_t>(verifier, VT_REQUIRED, 1) &&
VerifyField<uint8_t>(verifier, VT_KEY, 1) &&
VerifyOffset(verifier, VT_ATTRIBUTES) &&
Expand Down Expand Up @@ -726,6 +731,9 @@ struct FieldBuilder {
void add_deprecated(bool deprecated) {
fbb_.AddElement<uint8_t>(Field::VT_DEPRECATED, static_cast<uint8_t>(deprecated), 0);
}
void add_deprecated_readonly(bool deprecated_readonly) {
fbb_.AddElement<uint8_t>(Field::VT_DEPRECATED_READONLY, static_cast<uint8_t>(deprecated_readonly), 0);
}
void add_required(bool required) {
fbb_.AddElement<uint8_t>(Field::VT_REQUIRED, static_cast<uint8_t>(required), 0);
}
Expand Down Expand Up @@ -769,6 +777,7 @@ inline ::flatbuffers::Offset<Field> CreateField(
int64_t default_integer = 0,
double default_real = 0.0,
bool deprecated = false,
bool deprecated_readonly = false,
bool required = false,
bool key = false,
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes = 0,
Expand All @@ -790,6 +799,7 @@ inline ::flatbuffers::Offset<Field> CreateField(
builder_.add_optional(optional);
builder_.add_key(key);
builder_.add_required(required);
builder_.add_deprecated_readonly(deprecated_readonly);
builder_.add_deprecated(deprecated);
return builder_.Finish();
}
Expand All @@ -803,6 +813,7 @@ inline ::flatbuffers::Offset<Field> CreateFieldDirect(
int64_t default_integer = 0,
double default_real = 0.0,
bool deprecated = false,
bool deprecated_readonly = false,
bool required = false,
bool key = false,
std::vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes = nullptr,
Expand All @@ -822,6 +833,7 @@ inline ::flatbuffers::Offset<Field> CreateFieldDirect(
default_integer,
default_real,
deprecated,
deprecated_readonly,
required,
key,
attributes__,
Expand Down
48 changes: 26 additions & 22 deletions java/src/main/java/com/google/flatbuffers/reflection/Field.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,28 +37,29 @@ public final class Field extends Table {
public long defaultInteger() { int o = __offset(12); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
public double defaultReal() { int o = __offset(14); return o != 0 ? bb.getDouble(o + bb_pos) : 0.0; }
public boolean deprecated() { int o = __offset(16); return o != 0 ? 0!=bb.get(o + bb_pos) : false; }
public boolean required() { int o = __offset(18); return o != 0 ? 0!=bb.get(o + bb_pos) : false; }
public boolean key() { int o = __offset(20); return o != 0 ? 0!=bb.get(o + bb_pos) : false; }
public boolean deprecatedReadonly() { int o = __offset(18); return o != 0 ? 0!=bb.get(o + bb_pos) : false; }
public boolean required() { int o = __offset(20); return o != 0 ? 0!=bb.get(o + bb_pos) : false; }
public boolean key() { int o = __offset(22); return o != 0 ? 0!=bb.get(o + bb_pos) : false; }
public com.google.flatbuffers.reflection.KeyValue attributes(int j) { return attributes(new com.google.flatbuffers.reflection.KeyValue(), j); }
public com.google.flatbuffers.reflection.KeyValue attributes(com.google.flatbuffers.reflection.KeyValue obj, int j) { int o = __offset(22); return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; }
public int attributesLength() { int o = __offset(22); return o != 0 ? __vector_len(o) : 0; }
public com.google.flatbuffers.reflection.KeyValue attributesByKey(String key) { int o = __offset(22); return o != 0 ? com.google.flatbuffers.reflection.KeyValue.__lookup_by_key(null, __vector(o), key, bb) : null; }
public com.google.flatbuffers.reflection.KeyValue attributesByKey(com.google.flatbuffers.reflection.KeyValue obj, String key) { int o = __offset(22); return o != 0 ? com.google.flatbuffers.reflection.KeyValue.__lookup_by_key(obj, __vector(o), key, bb) : null; }
public com.google.flatbuffers.reflection.KeyValue attributes(com.google.flatbuffers.reflection.KeyValue obj, int j) { int o = __offset(24); return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; }
public int attributesLength() { int o = __offset(24); return o != 0 ? __vector_len(o) : 0; }
public com.google.flatbuffers.reflection.KeyValue attributesByKey(String key) { int o = __offset(24); return o != 0 ? com.google.flatbuffers.reflection.KeyValue.__lookup_by_key(null, __vector(o), key, bb) : null; }
public com.google.flatbuffers.reflection.KeyValue attributesByKey(com.google.flatbuffers.reflection.KeyValue obj, String key) { int o = __offset(24); return o != 0 ? com.google.flatbuffers.reflection.KeyValue.__lookup_by_key(obj, __vector(o), key, bb) : null; }
public com.google.flatbuffers.reflection.KeyValue.Vector attributesVector() { return attributesVector(new com.google.flatbuffers.reflection.KeyValue.Vector()); }
public com.google.flatbuffers.reflection.KeyValue.Vector attributesVector(com.google.flatbuffers.reflection.KeyValue.Vector obj) { int o = __offset(22); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }
public String documentation(int j) { int o = __offset(24); return o != 0 ? __string(__vector(o) + j * 4) : null; }
public int documentationLength() { int o = __offset(24); return o != 0 ? __vector_len(o) : 0; }
public com.google.flatbuffers.reflection.KeyValue.Vector attributesVector(com.google.flatbuffers.reflection.KeyValue.Vector obj) { int o = __offset(24); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }
public String documentation(int j) { int o = __offset(26); return o != 0 ? __string(__vector(o) + j * 4) : null; }
public int documentationLength() { int o = __offset(26); return o != 0 ? __vector_len(o) : 0; }
public StringVector documentationVector() { return documentationVector(new StringVector()); }
public StringVector documentationVector(StringVector obj) { int o = __offset(24); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }
public boolean optional() { int o = __offset(26); return o != 0 ? 0!=bb.get(o + bb_pos) : false; }
public StringVector documentationVector(StringVector obj) { int o = __offset(26); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }
public boolean optional() { int o = __offset(28); return o != 0 ? 0!=bb.get(o + bb_pos) : false; }
/**
* Number of padding octets to always add after this field. Structs only.
*/
public int padding() { int o = __offset(28); return o != 0 ? bb.getShort(o + bb_pos) & 0xFFFF : 0; }
public int padding() { int o = __offset(30); return o != 0 ? bb.getShort(o + bb_pos) & 0xFFFF : 0; }
/**
* If the field uses 64-bit offsets.
*/
public boolean offset64() { int o = __offset(30); return o != 0 ? 0!=bb.get(o + bb_pos) : false; }
public boolean offset64() { int o = __offset(32); return o != 0 ? 0!=bb.get(o + bb_pos) : false; }

public static int createField(FlatBufferBuilder builder,
int nameOffset,
Expand All @@ -68,14 +69,15 @@ public static int createField(FlatBufferBuilder builder,
long defaultInteger,
double defaultReal,
boolean deprecated,
boolean deprecatedReadonly,
boolean required,
boolean key,
int attributesOffset,
int documentationOffset,
boolean optional,
int padding,
boolean offset64) {
builder.startTable(14);
builder.startTable(15);
Field.addDefaultReal(builder, defaultReal);
Field.addDefaultInteger(builder, defaultInteger);
Field.addDocumentation(builder, documentationOffset);
Expand All @@ -89,29 +91,31 @@ public static int createField(FlatBufferBuilder builder,
Field.addOptional(builder, optional);
Field.addKey(builder, key);
Field.addRequired(builder, required);
Field.addDeprecatedReadonly(builder, deprecatedReadonly);
Field.addDeprecated(builder, deprecated);
return Field.endField(builder);
}

public static void startField(FlatBufferBuilder builder) { builder.startTable(14); }
public static void startField(FlatBufferBuilder builder) { builder.startTable(15); }
public static void addName(FlatBufferBuilder builder, int nameOffset) { builder.addOffset(nameOffset); builder.slot(0); }
public static void addType(FlatBufferBuilder builder, int typeOffset) { builder.addOffset(1, typeOffset, 0); }
public static void addId(FlatBufferBuilder builder, int id) { builder.addShort(2, (short) id, (short) 0); }
public static void addOffset(FlatBufferBuilder builder, int offset) { builder.addShort(3, (short) offset, (short) 0); }
public static void addDefaultInteger(FlatBufferBuilder builder, long defaultInteger) { builder.addLong(4, defaultInteger, 0L); }
public static void addDefaultReal(FlatBufferBuilder builder, double defaultReal) { builder.addDouble(5, defaultReal, 0.0); }
public static void addDeprecated(FlatBufferBuilder builder, boolean deprecated) { builder.addBoolean(6, deprecated, false); }
public static void addRequired(FlatBufferBuilder builder, boolean required) { builder.addBoolean(7, required, false); }
public static void addKey(FlatBufferBuilder builder, boolean key) { builder.addBoolean(8, key, false); }
public static void addAttributes(FlatBufferBuilder builder, int attributesOffset) { builder.addOffset(9, attributesOffset, 0); }
public static void addDeprecatedReadonly(FlatBufferBuilder builder, boolean deprecatedReadonly) { builder.addBoolean(7, deprecatedReadonly, false); }
public static void addRequired(FlatBufferBuilder builder, boolean required) { builder.addBoolean(8, required, false); }
public static void addKey(FlatBufferBuilder builder, boolean key) { builder.addBoolean(9, key, false); }
public static void addAttributes(FlatBufferBuilder builder, int attributesOffset) { builder.addOffset(10, attributesOffset, 0); }
public static int createAttributesVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
public static void startAttributesVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
public static void addDocumentation(FlatBufferBuilder builder, int documentationOffset) { builder.addOffset(10, documentationOffset, 0); }
public static void addDocumentation(FlatBufferBuilder builder, int documentationOffset) { builder.addOffset(11, documentationOffset, 0); }
public static int createDocumentationVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
public static void startDocumentationVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
public static void addOptional(FlatBufferBuilder builder, boolean optional) { builder.addBoolean(11, optional, false); }
public static void addPadding(FlatBufferBuilder builder, int padding) { builder.addShort(12, (short) padding, (short) 0); }
public static void addOffset64(FlatBufferBuilder builder, boolean offset64) { builder.addBoolean(13, offset64, false); }
public static void addOptional(FlatBufferBuilder builder, boolean optional) { builder.addBoolean(12, optional, false); }
public static void addPadding(FlatBufferBuilder builder, int padding) { builder.addShort(13, (short) padding, (short) 0); }
public static void addOffset64(FlatBufferBuilder builder, boolean offset64) { builder.addBoolean(14, offset64, false); }
public static int endField(FlatBufferBuilder builder) {
int o = builder.endTable();
builder.required(o, 4); // name
Expand Down
Loading
Loading