mirror of
https://github.com/google/flatbuffers.git
synced 2026-07-03 23:24:12 +00:00
Merge branch 'master' of https://github.com/google/flatbuffers
This commit is contained in:
@@ -82,8 +82,15 @@ if(APPLE)
|
|||||||
set(CMAKE_CXX_FLAGS
|
set(CMAKE_CXX_FLAGS
|
||||||
"${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++ -Wall -pedantic -Werror -Wextra")
|
"${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++ -Wall -pedantic -Werror -Wextra")
|
||||||
elseif(CMAKE_COMPILER_IS_GNUCXX)
|
elseif(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
if(CYGWIN)
|
||||||
|
set(CMAKE_CXX_FLAGS
|
||||||
|
"${CMAKE_CXX_FLAGS} -std=gnu++11")
|
||||||
|
else(CYGWIN)
|
||||||
|
set(CMAKE_CXX_FLAGS
|
||||||
|
"${CMAKE_CXX_FLAGS} -std=c++0x")
|
||||||
|
endif(CYGWIN)
|
||||||
set(CMAKE_CXX_FLAGS
|
set(CMAKE_CXX_FLAGS
|
||||||
"${CMAKE_CXX_FLAGS} -std=c++0x -Wall -pedantic -Werror -Wextra -Werror=shadow")
|
"${CMAKE_CXX_FLAGS} -Wall -pedantic -Werror -Wextra -Werror=shadow")
|
||||||
if (GCC_VERSION VERSION_GREATER 4.4)
|
if (GCC_VERSION VERSION_GREATER 4.4)
|
||||||
set(CMAKE_CXX_FLAGS
|
set(CMAKE_CXX_FLAGS
|
||||||
"${CMAKE_CXX_FLAGS} -Wunused-result -Werror=unused-result")
|
"${CMAKE_CXX_FLAGS} -Wunused-result -Werror=unused-result")
|
||||||
|
|||||||
@@ -432,10 +432,10 @@ our `orc` Monster, lets create some `Weapon`s: a `Sword` and an `Axe`.
|
|||||||
</div>
|
</div>
|
||||||
<div class="language-java">
|
<div class="language-java">
|
||||||
~~~{.java}
|
~~~{.java}
|
||||||
String weaponOneName = builder.createString("Sword")
|
int weaponOneName = builder.createString("Sword")
|
||||||
short weaponOneDamage = 3;
|
short weaponOneDamage = 3;
|
||||||
|
|
||||||
String weaponTwoName = builder.createString("Axe");
|
int weaponTwoName = builder.createString("Axe");
|
||||||
short weaponTwoDamage = 5;
|
short weaponTwoDamage = 5;
|
||||||
|
|
||||||
// Use the `createWeapon()` helper function to create the weapons, since we set every field.
|
// Use the `createWeapon()` helper function to create the weapons, since we set every field.
|
||||||
|
|||||||
@@ -91,6 +91,14 @@
|
|||||||
#else
|
#else
|
||||||
#define FLATBUFFERS_FINAL_CLASS
|
#define FLATBUFFERS_FINAL_CLASS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (!defined(_MSC_VER) || _MSC_VER >= 1900) && \
|
||||||
|
(!defined(__GNUC__) || (__GNUC__ * 100 + __GNUC_MINOR__ >= 406))
|
||||||
|
#define FLATBUFFERS_CONSTEXPR constexpr
|
||||||
|
#else
|
||||||
|
#define FLATBUFFERS_CONSTEXPR
|
||||||
|
#endif
|
||||||
|
|
||||||
/// @endcond
|
/// @endcond
|
||||||
|
|
||||||
/// @file
|
/// @file
|
||||||
@@ -1112,14 +1120,14 @@ FLATBUFFERS_FINAL_CLASS
|
|||||||
bool force_defaults_; // Serialize values equal to their defaults anyway.
|
bool force_defaults_; // Serialize values equal to their defaults anyway.
|
||||||
|
|
||||||
struct StringOffsetCompare {
|
struct StringOffsetCompare {
|
||||||
StringOffsetCompare(const vector_downward &buf) : buf_(buf) {}
|
StringOffsetCompare(const vector_downward &buf) : buf_(&buf) {}
|
||||||
bool operator() (const Offset<String> &a, const Offset<String> &b) const {
|
bool operator() (const Offset<String> &a, const Offset<String> &b) const {
|
||||||
auto stra = reinterpret_cast<const String *>(buf_.data_at(a.o));
|
auto stra = reinterpret_cast<const String *>(buf_->data_at(a.o));
|
||||||
auto strb = reinterpret_cast<const String *>(buf_.data_at(b.o));
|
auto strb = reinterpret_cast<const String *>(buf_->data_at(b.o));
|
||||||
return strncmp(stra->c_str(), strb->c_str(),
|
return strncmp(stra->c_str(), strb->c_str(),
|
||||||
std::min(stra->size(), strb->size()) + 1) < 0;
|
std::min(stra->size(), strb->size()) + 1) < 0;
|
||||||
}
|
}
|
||||||
const vector_downward &buf_;
|
const vector_downward *buf_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// For use with CreateSharedString. Instantiated on first use only.
|
// For use with CreateSharedString. Instantiated on first use only.
|
||||||
|
|||||||
@@ -331,6 +331,7 @@ struct IDLOptions {
|
|||||||
bool proto_mode;
|
bool proto_mode;
|
||||||
bool generate_all;
|
bool generate_all;
|
||||||
bool skip_unexpected_fields_in_json;
|
bool skip_unexpected_fields_in_json;
|
||||||
|
bool generate_name_strings;
|
||||||
|
|
||||||
// Possible options for the more general generator below.
|
// Possible options for the more general generator below.
|
||||||
enum Language { kJava, kCSharp, kGo, kMAX };
|
enum Language { kJava, kCSharp, kGo, kMAX };
|
||||||
@@ -349,6 +350,7 @@ struct IDLOptions {
|
|||||||
proto_mode(false),
|
proto_mode(false),
|
||||||
generate_all(false),
|
generate_all(false),
|
||||||
skip_unexpected_fields_in_json(false),
|
skip_unexpected_fields_in_json(false),
|
||||||
|
generate_name_strings(false),
|
||||||
lang(IDLOptions::kJava) {}
|
lang(IDLOptions::kJava) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -89,9 +89,15 @@ abstract class Table
|
|||||||
return $offset + $this->bb->getInt($offset) + Constants::SIZEOF_INT;
|
return $offset + $this->bb->getInt($offset) + Constants::SIZEOF_INT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// protected function __vector_as_bytebuffer($vector_offset, $elem_size)
|
protected function __vector_as_bytes($vector_offset, $elem_size=1)
|
||||||
// {
|
{
|
||||||
// }
|
$o = $this->__offset($vector_offset);
|
||||||
|
if ($o == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return substr($this->bb->_buffer, $this->__vector($o), $this->__vector_len($o) * $elem_size);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Table $table
|
* @param Table $table
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ you would leave it in.
|
|||||||
|
|
||||||
[CONTRIBUTING]: http://github.com/google/flatbuffers/blob/master/CONTRIBUTING
|
[CONTRIBUTING]: http://github.com/google/flatbuffers/blob/master/CONTRIBUTING
|
||||||
[`flatbuffers` tag]: https://stackoverflow.com/questions/tagged/flatbuffers
|
[`flatbuffers` tag]: https://stackoverflow.com/questions/tagged/flatbuffers
|
||||||
[FlatBuffers Google Group]: http://group.google.com/group/flatbuffers
|
[FlatBuffers Google Group]: https://groups.google.com/forum/#!forum/flatbuffers
|
||||||
[FlatBuffers Issues Tracker]: http://github.com/google/flatbuffers/issues
|
[FlatBuffers Issues Tracker]: http://github.com/google/flatbuffers/issues
|
||||||
[stackoverflow.com]: http://www.stackoverflow.com
|
[stackoverflow.com]: http://www.stackoverflow.com
|
||||||
[landing page]: http://google.github.io/flatbuffers
|
[landing page]: http://google.github.io/flatbuffers
|
||||||
|
|||||||
@@ -96,31 +96,32 @@ static void Error(const std::string &err, bool usage, bool show_exe_name) {
|
|||||||
: " ",
|
: " ",
|
||||||
generators[i].generator_help);
|
generators[i].generator_help);
|
||||||
printf(
|
printf(
|
||||||
" -o PATH Prefix PATH to all generated files.\n"
|
" -o PATH Prefix PATH to all generated files.\n"
|
||||||
" -I PATH Search for includes in the specified path.\n"
|
" -I PATH Search for includes in the specified path.\n"
|
||||||
" -M Print make rules for generated files.\n"
|
" -M Print make rules for generated files.\n"
|
||||||
" --version Print the version number of flatc and exit.\n"
|
" --version Print the version number of flatc and exit.\n"
|
||||||
" --strict-json Strict JSON: field names must be / will be quoted,\n"
|
" --strict-json Strict JSON: field names must be / will be quoted,\n"
|
||||||
" no trailing commas in tables/vectors.\n"
|
" no trailing commas in tables/vectors.\n"
|
||||||
" --defaults-json Output fields whose value is the default when\n"
|
" --defaults-json Output fields whose value is the default when\n"
|
||||||
" writing JSON\n"
|
" writing JSON\n"
|
||||||
" --unknown-json Allow fields in JSON that are not defined in the\n"
|
" --unknown-json Allow fields in JSON that are not defined in the\n"
|
||||||
" schema. These fields will be discared when generating\n"
|
" schema. These fields will be discared when generating\n"
|
||||||
" binaries.\n"
|
" binaries.\n"
|
||||||
" --no-prefix Don\'t prefix enum values with the enum type in C++.\n"
|
" --no-prefix Don\'t prefix enum values with the enum type in C++.\n"
|
||||||
" --scoped-enums Use C++11 style scoped and strongly typed enums.\n"
|
" --scoped-enums Use C++11 style scoped and strongly typed enums.\n"
|
||||||
" also implies --no-prefix.\n"
|
" also implies --no-prefix.\n"
|
||||||
" --gen-includes (deprecated), this is the default behavior.\n"
|
" --gen-includes (deprecated), this is the default behavior.\n"
|
||||||
" If the original behavior is required (no include\n"
|
" If the original behavior is required (no include\n"
|
||||||
" statements) use --no-includes.\n"
|
" statements) use --no-includes.\n"
|
||||||
" --no-includes Don\'t generate include statements for included\n"
|
" --no-includes Don\'t generate include statements for included\n"
|
||||||
" schemas the generated file depends on (C++).\n"
|
" schemas the generated file depends on (C++).\n"
|
||||||
" --gen-mutable Generate accessors that can mutate buffers in-place.\n"
|
" --gen-mutable Generate accessors that can mutate buffers in-place.\n"
|
||||||
" --gen-onefile Generate single output file for C#\n"
|
" --gen-onefile Generate single output file for C#\n"
|
||||||
" --raw-binary Allow binaries without file_indentifier to be read.\n"
|
" --gen-name-strings Generate type name functions for C++.\n"
|
||||||
" This may crash flatc given a mismatched schema.\n"
|
" --raw-binary Allow binaries without file_indentifier to be read.\n"
|
||||||
" --proto Input is a .proto, translate to .fbs.\n"
|
" This may crash flatc given a mismatched schema.\n"
|
||||||
" --schema Serialize schemas instead of JSON (use with -b)\n"
|
" --proto Input is a .proto, translate to .fbs.\n"
|
||||||
|
" --schema Serialize schemas instead of JSON (use with -b)\n"
|
||||||
"FILEs may be schemas, or JSON files (conforming to preceding schema)\n"
|
"FILEs may be schemas, or JSON files (conforming to preceding schema)\n"
|
||||||
"FILEs after the -- must be binary flatbuffer format files.\n"
|
"FILEs after the -- must be binary flatbuffer format files.\n"
|
||||||
"Output files are named using the base file name of the input,\n"
|
"Output files are named using the base file name of the input,\n"
|
||||||
@@ -171,6 +172,8 @@ int main(int argc, const char *argv[]) {
|
|||||||
opts.scoped_enums = true;
|
opts.scoped_enums = true;
|
||||||
} else if(arg == "--gen-mutable") {
|
} else if(arg == "--gen-mutable") {
|
||||||
opts.mutable_buffer = true;
|
opts.mutable_buffer = true;
|
||||||
|
} else if(arg == "--gen-name-strings") {
|
||||||
|
opts.generate_name_strings = true;
|
||||||
} else if(arg == "--gen-all") {
|
} else if(arg == "--gen-all") {
|
||||||
opts.generate_all = true;
|
opts.generate_all = true;
|
||||||
opts.include_dependence_headers = false;
|
opts.include_dependence_headers = false;
|
||||||
|
|||||||
@@ -267,6 +267,14 @@ std::string GenFieldOffsetName(const FieldDef &field) {
|
|||||||
return "VT_" + uname;
|
return "VT_" + uname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void GenFullyQualifiedNameGetter(const Parser &parser, const std::string& name, std::string &code) {
|
||||||
|
if (parser.opts.generate_name_strings) {
|
||||||
|
code += " static FLATBUFFERS_CONSTEXPR const char *GetFullyQualifiedName() {\n";
|
||||||
|
code += " return \"" + parser.namespaces_.back()->GetFullyQualifiedName(name) + "\";\n";
|
||||||
|
code += " }\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Generate an accessor struct, builder structs & function for a table.
|
// Generate an accessor struct, builder structs & function for a table.
|
||||||
static void GenTable(const Parser &parser, StructDef &struct_def,
|
static void GenTable(const Parser &parser, StructDef &struct_def,
|
||||||
std::string *code_ptr) {
|
std::string *code_ptr) {
|
||||||
@@ -277,6 +285,8 @@ static void GenTable(const Parser &parser, StructDef &struct_def,
|
|||||||
code += "struct " + struct_def.name;
|
code += "struct " + struct_def.name;
|
||||||
code += " FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table";
|
code += " FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table";
|
||||||
code += " {\n";
|
code += " {\n";
|
||||||
|
// Generate GetFullyQualifiedName
|
||||||
|
GenFullyQualifiedNameGetter(parser, struct_def.name, code);
|
||||||
// Generate field id constants.
|
// Generate field id constants.
|
||||||
if (struct_def.fields.vec.size() > 0) {
|
if (struct_def.fields.vec.size() > 0) {
|
||||||
code += " enum {\n";
|
code += " enum {\n";
|
||||||
@@ -583,8 +593,12 @@ static void GenStruct(const Parser &parser, StructDef &struct_def,
|
|||||||
GenPadding(field, code, padding_id, PaddingDefinition);
|
GenPadding(field, code, padding_id, PaddingDefinition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Generate GetFullyQualifiedName
|
||||||
|
code += "\n public:\n";
|
||||||
|
GenFullyQualifiedNameGetter(parser, struct_def.name, code);
|
||||||
|
|
||||||
// Generate a constructor that takes all fields as arguments.
|
// Generate a constructor that takes all fields as arguments.
|
||||||
code += "\n public:\n " + struct_def.name + "(";
|
code += " " + struct_def.name + "(";
|
||||||
for (auto it = struct_def.fields.vec.begin();
|
for (auto it = struct_def.fields.vec.begin();
|
||||||
it != struct_def.fields.vec.end();
|
it != struct_def.fields.vec.end();
|
||||||
++it) {
|
++it) {
|
||||||
|
|||||||
@@ -165,6 +165,22 @@ namespace php {
|
|||||||
code += Indent + "}\n\n";
|
code += Indent + "}\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get a [ubyte] vector as a byte array.
|
||||||
|
static void GetUByte(const FieldDef &field,
|
||||||
|
std::string *code_ptr) {
|
||||||
|
std::string &code = *code_ptr;
|
||||||
|
|
||||||
|
code += Indent + "/**\n";
|
||||||
|
code += Indent + " * @return string\n";
|
||||||
|
code += Indent + " */\n";
|
||||||
|
code += Indent + "public function get";
|
||||||
|
code += MakeCamel(field.name) + "Bytes()\n";
|
||||||
|
code += Indent + "{\n";
|
||||||
|
code += Indent + Indent + "return $this->__vector_as_bytes(";
|
||||||
|
code += NumToString(field.value.offset) + ");\n";
|
||||||
|
code += Indent + "}\n\n";
|
||||||
|
}
|
||||||
|
|
||||||
// Get the value of a struct's scalar.
|
// Get the value of a struct's scalar.
|
||||||
static void GetScalarFieldOfStruct(const FieldDef &field,
|
static void GetScalarFieldOfStruct(const FieldDef &field,
|
||||||
std::string *code_ptr) {
|
std::string *code_ptr) {
|
||||||
@@ -250,7 +266,7 @@ namespace php {
|
|||||||
");\n";
|
");\n";
|
||||||
code += Indent + Indent;
|
code += Indent + Indent;
|
||||||
code += "return $o != 0 ? $obj->init(";
|
code += "return $o != 0 ? $obj->init(";
|
||||||
if (field.value.type.struct_def->fixed)
|
if (field.value.type.struct_def->fixed)
|
||||||
{
|
{
|
||||||
code += "$o + $this->bb_pos, $this->bb) : ";
|
code += "$o + $this->bb_pos, $this->bb) : ";
|
||||||
} else {
|
} else {
|
||||||
@@ -690,6 +706,9 @@ namespace php {
|
|||||||
}
|
}
|
||||||
if (field.value.type.base_type == BASE_TYPE_VECTOR) {
|
if (field.value.type.base_type == BASE_TYPE_VECTOR) {
|
||||||
GetVectorLen(field, code_ptr);
|
GetVectorLen(field, code_ptr);
|
||||||
|
if (field.value.type.element == BASE_TYPE_UCHAR) {
|
||||||
|
GetUByte(field, code_ptr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -98,6 +98,14 @@ class Monster extends Table
|
|||||||
return $o != 0 ? $this->__vector_len($o) : 0;
|
return $o != 0 ? $this->__vector_len($o) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getInventoryBytes()
|
||||||
|
{
|
||||||
|
return $this->__vector_as_bytes(14);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return sbyte
|
* @return sbyte
|
||||||
*/
|
*/
|
||||||
@@ -210,6 +218,14 @@ class Monster extends Table
|
|||||||
return $o != 0 ? $this->__vector_len($o) : 0;
|
return $o != 0 ? $this->__vector_len($o) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getTestnestedflatbufferBytes()
|
||||||
|
{
|
||||||
|
return $this->__vector_as_bytes(30);
|
||||||
|
}
|
||||||
|
|
||||||
public function getTestempty()
|
public function getTestempty()
|
||||||
{
|
{
|
||||||
$obj = new Stat();
|
$obj = new Stat();
|
||||||
|
|||||||
@@ -128,6 +128,7 @@ function test_buffer(Assert $assert, Google\FlatBuffers\ByteBuffer $bb) {
|
|||||||
}
|
}
|
||||||
$assert->strictEqual($invsum, 10);
|
$assert->strictEqual($invsum, 10);
|
||||||
|
|
||||||
|
$assert->strictEqual(bin2hex($monster->GetInventoryBytes()), "0001020304");
|
||||||
|
|
||||||
$test_0 = $monster->GetTest4(0);
|
$test_0 = $monster->GetTest4(0);
|
||||||
$test_1 = $monster->GetTest4(1);
|
$test_1 = $monster->GetTest4(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user