Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
flatbuffers
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
flatbuffers
Commits
9031597f
Commit
9031597f
authored
Aug 13, 2016
by
TGIshib
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'refs/remotes/google/master' into key
parents
dc7f5bc0
a0b8f669
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
290 additions
and
150 deletions
+290
-150
Tutorial.md
docs/source/Tutorial.md
+15
-1
flatbuffers.h
include/flatbuffers/flatbuffers.h
+16
-14
reflection_generated.h
include/flatbuffers/reflection_generated.h
+12
-12
flatbuffers.js
js/flatbuffers.js
+2
-3
FlatBufferBuilder.cs
net/FlatBuffers/FlatBufferBuilder.cs
+2
-0
monster_generated.h
samples/monster_generated.h
+4
-4
idl_gen_cpp.cpp
src/idl_gen_cpp.cpp
+8
-7
idl_gen_go.cpp
src/idl_gen_go.cpp
+29
-25
GoTest.sh
tests/GoTest.sh
+16
-4
Monster.go
tests/MyGame/Example/Monster.go
+0
-0
Stat.go
tests/MyGame/Example/Stat.go
+17
-6
Test.go
tests/MyGame/Example/Test.go
+18
-10
TestSimpleTableWithEnum.go
tests/MyGame/Example/TestSimpleTableWithEnum.go
+11
-4
Vec3.go
tests/MyGame/Example/Vec3.go
+46
-25
Monster.go
tests/MyGame/Example2/Monster.go
+8
-3
monster_test_generated.h
tests/monster_test_generated.h
+4
-4
EnumInNestedNS.go
tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.go
+7
-0
StructInNestedNS.go
.../namespace_test/NamespaceA/NamespaceB/StructInNestedNS.go
+17
-9
TableInNestedNS.go
...s/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.go
+11
-4
SecondTableInA.go
tests/namespace_test/NamespaceA/SecondTableInA.go
+11
-4
TableInFirstNS.go
tests/namespace_test/NamespaceA/TableInFirstNS.go
+17
-6
TableInC.go
tests/namespace_test/NamespaceC/TableInC.go
+14
-5
test.cpp
tests/test.cpp
+5
-0
No files found.
docs/source/Tutorial.md
View file @
9031597f
...
...
@@ -1161,12 +1161,23 @@ like so:
~~~{.java}
// This must be called after `
finish()
`.
java.nio.ByteBuffer buf = builder.dataBuffer();
// The data in this ByteBuffer does NOT start at 0, but at buf.position().
// The number of bytes is buf.remaining().
// Alternatively this copies the above data out of the ByteBuffer for you:
bytes[] buf = builder.sizedByteArray();
~~~
</div>
<div class="language-csharp">
~~~{.cs}
// This must be called after `
Finish()
`.
var buf = builder.DataBuffer; // Of type `
FlatBuffers.ByteBuffer
`.
// The data in this ByteBuffer does NOT start at 0, but at buf.Position.
// The end of the data is marked by buf.Length, so the size is
// buf.Length - buf.Position.
// Alternatively this copies the above data out of the ByteBuffer for you:
bytes[] buf = builder.SizedByteArray();
~~~
</div>
<div class="language-go">
...
...
@@ -1184,13 +1195,16 @@ like so:
<div class="language-javascript">
~~~{.js}
// This must be called after `
finish()
`.
var buf = builder.
dataBuffer(); // Of type `
flatbuffers.ByteBuffer
`.
var buf = builder.
asUint8Array(); // Of type `
Uint8Array
`.
~~~
</div>
<div class="language-php">
~~~{.php}
// This must be called after `
finish()
`.
$buf = $builder->dataBuffer(); // Of type `
Google
\F
latBuffers
\B
yteBuffer
`
// The data in this ByteBuffer does NOT start at 0, but at buf->getPosition().
// The end of the data is marked by buf->capacity(), so the size is
// buf->capacity() - buf->getPosition().
~~~
</div>
<div class="language-c">
...
...
include/flatbuffers/flatbuffers.h
View file @
9031597f
...
...
@@ -153,32 +153,34 @@ inline void EndianCheck() {
template
<
typename
T
>
T
EndianSwap
(
T
t
)
{
#if defined(_MSC_VER)
#pragma push_macro("__builtin_bswap16")
#pragma push_macro("__builtin_bswap32")
#pragma push_macro("__builtin_bswap64")
#define __builtin_bswap16 _byteswap_ushort
#define __builtin_bswap32 _byteswap_ulong
#define __builtin_bswap64 _byteswap_uint64
#define FLATBUFFERS_BYTESWAP16 _byteswap_ushort
#define FLATBUFFERS_BYTESWAP32 _byteswap_ulong
#define FLATBUFFERS_BYTESWAP64 _byteswap_uint64
#else
#if defined(__GNUC__) && __GNUC__ * 100 + __GNUC_MINOR__ < 408
// __builtin_bswap16 was missing prior to GCC 4.8.
#define FLATBUFFERS_BYTESWAP16(x) \
static_cast<uint16_t>(__builtin_bswap32(static_cast<uint32_t>(x) << 16))
#else
#define FLATBUFFERS_BYTESWAP16 __builtin_bswap16
#endif
#define FLATBUFFERS_BYTESWAP32 __builtin_bswap32
#define FLATBUFFERS_BYTESWAP64 __builtin_bswap64
#endif
if
(
sizeof
(
T
)
==
1
)
{
// Compile-time if-then's.
return
t
;
}
else
if
(
sizeof
(
T
)
==
2
)
{
auto
r
=
__builtin_bswap
16
(
*
reinterpret_cast
<
uint16_t
*>
(
&
t
));
auto
r
=
FLATBUFFERS_BYTESWAP
16
(
*
reinterpret_cast
<
uint16_t
*>
(
&
t
));
return
*
reinterpret_cast
<
T
*>
(
&
r
);
}
else
if
(
sizeof
(
T
)
==
4
)
{
auto
r
=
__builtin_bswap
32
(
*
reinterpret_cast
<
uint32_t
*>
(
&
t
));
auto
r
=
FLATBUFFERS_BYTESWAP
32
(
*
reinterpret_cast
<
uint32_t
*>
(
&
t
));
return
*
reinterpret_cast
<
T
*>
(
&
r
);
}
else
if
(
sizeof
(
T
)
==
8
)
{
auto
r
=
__builtin_bswap
64
(
*
reinterpret_cast
<
uint64_t
*>
(
&
t
));
auto
r
=
FLATBUFFERS_BYTESWAP
64
(
*
reinterpret_cast
<
uint64_t
*>
(
&
t
));
return
*
reinterpret_cast
<
T
*>
(
&
r
);
}
else
{
assert
(
0
);
}
#if defined(_MSC_VER)
#pragma pop_macro("__builtin_bswap16")
#pragma pop_macro("__builtin_bswap32")
#pragma pop_macro("__builtin_bswap64")
#endif
}
template
<
typename
T
>
T
EndianScalar
(
T
t
)
{
...
...
include/flatbuffers/reflection_generated.h
View file @
9031597f
...
...
@@ -133,10 +133,10 @@ inline flatbuffers::Offset<KeyValue> CreateKeyValue(flatbuffers::FlatBufferBuild
return
builder_
.
Finish
();
}
inline
flatbuffers
::
Offset
<
KeyValue
>
CreateKeyValue
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
inline
flatbuffers
::
Offset
<
KeyValue
>
CreateKeyValue
Direct
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
char
*
key
=
nullptr
,
const
char
*
value
=
nullptr
)
{
return
CreateKeyValue
(
_fbb
,
key
?
0
:
_fbb
.
CreateString
(
key
),
value
?
0
:
_fbb
.
CreateString
(
value
)
);
return
CreateKeyValue
(
_fbb
,
key
?
_fbb
.
CreateString
(
key
)
:
0
,
value
?
_fbb
.
CreateString
(
value
)
:
0
);
}
struct
EnumVal
FLATBUFFERS_FINAL_CLASS
:
private
flatbuffers
::
Table
{
...
...
@@ -187,11 +187,11 @@ inline flatbuffers::Offset<EnumVal> CreateEnumVal(flatbuffers::FlatBufferBuilder
return
builder_
.
Finish
();
}
inline
flatbuffers
::
Offset
<
EnumVal
>
CreateEnumVal
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
inline
flatbuffers
::
Offset
<
EnumVal
>
CreateEnumVal
Direct
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
char
*
name
=
nullptr
,
int64_t
value
=
0
,
flatbuffers
::
Offset
<
Object
>
object
=
0
)
{
return
CreateEnumVal
(
_fbb
,
name
?
0
:
_fbb
.
CreateString
(
name
)
,
value
,
object
);
return
CreateEnumVal
(
_fbb
,
name
?
_fbb
.
CreateString
(
name
)
:
0
,
value
,
object
);
}
struct
Enum
FLATBUFFERS_FINAL_CLASS
:
private
flatbuffers
::
Table
{
...
...
@@ -260,13 +260,13 @@ inline flatbuffers::Offset<Enum> CreateEnum(flatbuffers::FlatBufferBuilder &_fbb
return
builder_
.
Finish
();
}
inline
flatbuffers
::
Offset
<
Enum
>
CreateEnum
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
inline
flatbuffers
::
Offset
<
Enum
>
CreateEnum
Direct
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
char
*
name
=
nullptr
,
const
std
::
vector
<
flatbuffers
::
Offset
<
EnumVal
>>
*
values
=
nullptr
,
bool
is_union
=
false
,
flatbuffers
::
Offset
<
Type
>
underlying_type
=
0
,
const
std
::
vector
<
flatbuffers
::
Offset
<
KeyValue
>>
*
attributes
=
nullptr
)
{
return
CreateEnum
(
_fbb
,
name
?
0
:
_fbb
.
CreateString
(
name
),
values
?
0
:
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
EnumVal
>>
(
*
values
),
is_union
,
underlying_type
,
attributes
?
0
:
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
KeyValue
>>
(
*
attributes
)
);
return
CreateEnum
(
_fbb
,
name
?
_fbb
.
CreateString
(
name
)
:
0
,
values
?
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
EnumVal
>>
(
*
values
)
:
0
,
is_union
,
underlying_type
,
attributes
?
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
KeyValue
>>
(
*
attributes
)
:
0
);
}
struct
Field
FLATBUFFERS_FINAL_CLASS
:
private
flatbuffers
::
Table
{
...
...
@@ -362,7 +362,7 @@ inline flatbuffers::Offset<Field> CreateField(flatbuffers::FlatBufferBuilder &_f
return
builder_
.
Finish
();
}
inline
flatbuffers
::
Offset
<
Field
>
CreateField
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
inline
flatbuffers
::
Offset
<
Field
>
CreateField
Direct
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
char
*
name
=
nullptr
,
flatbuffers
::
Offset
<
Type
>
type
=
0
,
uint16_t
id
=
0
,
...
...
@@ -373,7 +373,7 @@ inline flatbuffers::Offset<Field> CreateField(flatbuffers::FlatBufferBuilder &_f
bool
required
=
false
,
bool
key
=
false
,
const
std
::
vector
<
flatbuffers
::
Offset
<
KeyValue
>>
*
attributes
=
nullptr
)
{
return
CreateField
(
_fbb
,
name
?
0
:
_fbb
.
CreateString
(
name
),
type
,
id
,
offset
,
default_integer
,
default_real
,
deprecated
,
required
,
key
,
attributes
?
0
:
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
KeyValue
>>
(
*
attributes
)
);
return
CreateField
(
_fbb
,
name
?
_fbb
.
CreateString
(
name
)
:
0
,
type
,
id
,
offset
,
default_integer
,
default_real
,
deprecated
,
required
,
key
,
attributes
?
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
KeyValue
>>
(
*
attributes
)
:
0
);
}
struct
Object
FLATBUFFERS_FINAL_CLASS
:
private
flatbuffers
::
Table
{
...
...
@@ -446,14 +446,14 @@ inline flatbuffers::Offset<Object> CreateObject(flatbuffers::FlatBufferBuilder &
return
builder_
.
Finish
();
}
inline
flatbuffers
::
Offset
<
Object
>
CreateObject
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
inline
flatbuffers
::
Offset
<
Object
>
CreateObject
Direct
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
char
*
name
=
nullptr
,
const
std
::
vector
<
flatbuffers
::
Offset
<
Field
>>
*
fields
=
nullptr
,
bool
is_struct
=
false
,
int32_t
minalign
=
0
,
int32_t
bytesize
=
0
,
const
std
::
vector
<
flatbuffers
::
Offset
<
KeyValue
>>
*
attributes
=
nullptr
)
{
return
CreateObject
(
_fbb
,
name
?
0
:
_fbb
.
CreateString
(
name
),
fields
?
0
:
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
Field
>>
(
*
fields
),
is_struct
,
minalign
,
bytesize
,
attributes
?
0
:
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
KeyValue
>>
(
*
attributes
)
);
return
CreateObject
(
_fbb
,
name
?
_fbb
.
CreateString
(
name
)
:
0
,
fields
?
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
Field
>>
(
*
fields
)
:
0
,
is_struct
,
minalign
,
bytesize
,
attributes
?
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
KeyValue
>>
(
*
attributes
)
:
0
);
}
struct
Schema
FLATBUFFERS_FINAL_CLASS
:
private
flatbuffers
::
Table
{
...
...
@@ -520,13 +520,13 @@ inline flatbuffers::Offset<Schema> CreateSchema(flatbuffers::FlatBufferBuilder &
return
builder_
.
Finish
();
}
inline
flatbuffers
::
Offset
<
Schema
>
CreateSchema
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
inline
flatbuffers
::
Offset
<
Schema
>
CreateSchema
Direct
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
std
::
vector
<
flatbuffers
::
Offset
<
Object
>>
*
objects
=
nullptr
,
const
std
::
vector
<
flatbuffers
::
Offset
<
Enum
>>
*
enums
=
nullptr
,
const
char
*
file_ident
=
nullptr
,
const
char
*
file_ext
=
nullptr
,
flatbuffers
::
Offset
<
Object
>
root_table
=
0
)
{
return
CreateSchema
(
_fbb
,
objects
?
0
:
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
Object
>>
(
*
objects
),
enums
?
0
:
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
Enum
>>
(
*
enums
),
file_ident
?
0
:
_fbb
.
CreateString
(
file_ident
),
file_ext
?
0
:
_fbb
.
CreateString
(
file_ext
)
,
root_table
);
return
CreateSchema
(
_fbb
,
objects
?
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
Object
>>
(
*
objects
)
:
0
,
enums
?
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
Enum
>>
(
*
enums
)
:
0
,
file_ident
?
_fbb
.
CreateString
(
file_ident
)
:
0
,
file_ext
?
_fbb
.
CreateString
(
file_ext
)
:
0
,
root_table
);
}
inline
const
reflection
::
Schema
*
GetSchema
(
const
void
*
buf
)
{
return
flatbuffers
::
GetRoot
<
reflection
::
Schema
>
(
buf
);
}
...
...
js/flatbuffers.js
View file @
9031597f
...
...
@@ -238,9 +238,8 @@ flatbuffers.Builder.prototype.dataBuffer = function() {
};
/**
* Get the ByteBuffer representing the FlatBuffer. Only call this after you've
* called finish(). The actual data starts at the ByteBuffer's current position,
* not necessarily at 0.
* Get the bytes representing the FlatBuffer. Only call this after you've
* called finish().
*
* @returns {Uint8Array}
*/
...
...
net/FlatBuffers/FlatBufferBuilder.cs
View file @
9031597f
...
...
@@ -594,6 +594,8 @@ namespace FlatBuffers
/// </summary>
/// <remarks>
/// This is typically only called after you call `Finish()`.
/// The actual data starts at the ByteBuffer's current position,
/// not necessarily at `0`.
/// </remarks>
/// <returns>
/// Returns the ByteBuffer for this FlatBuffer.
...
...
samples/monster_generated.h
View file @
9031597f
...
...
@@ -188,7 +188,7 @@ inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder
return
builder_
.
Finish
();
}
inline
flatbuffers
::
Offset
<
Monster
>
CreateMonster
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
inline
flatbuffers
::
Offset
<
Monster
>
CreateMonster
Direct
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
Vec3
*
pos
=
0
,
int16_t
mana
=
150
,
int16_t
hp
=
100
,
...
...
@@ -198,7 +198,7 @@ inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder
const
std
::
vector
<
flatbuffers
::
Offset
<
Weapon
>>
*
weapons
=
nullptr
,
Equipment
equipped_type
=
Equipment_NONE
,
flatbuffers
::
Offset
<
void
>
equipped
=
0
)
{
return
CreateMonster
(
_fbb
,
pos
,
mana
,
hp
,
name
?
0
:
_fbb
.
CreateString
(
name
),
inventory
?
0
:
_fbb
.
CreateVector
<
uint8_t
>
(
*
inventory
),
color
,
weapons
?
0
:
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
Weapon
>>
(
*
weapons
)
,
equipped_type
,
equipped
);
return
CreateMonster
(
_fbb
,
pos
,
mana
,
hp
,
name
?
_fbb
.
CreateString
(
name
)
:
0
,
inventory
?
_fbb
.
CreateVector
<
uint8_t
>
(
*
inventory
)
:
0
,
color
,
weapons
?
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
Weapon
>>
(
*
weapons
)
:
0
,
equipped_type
,
equipped
);
}
inline
flatbuffers
::
Offset
<
Monster
>
CreateMonster
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
MonsterT
*
_o
);
...
...
@@ -249,10 +249,10 @@ inline flatbuffers::Offset<Weapon> CreateWeapon(flatbuffers::FlatBufferBuilder &
return
builder_
.
Finish
();
}
inline
flatbuffers
::
Offset
<
Weapon
>
CreateWeapon
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
inline
flatbuffers
::
Offset
<
Weapon
>
CreateWeapon
Direct
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
char
*
name
=
nullptr
,
int16_t
damage
=
0
)
{
return
CreateWeapon
(
_fbb
,
name
?
0
:
_fbb
.
CreateString
(
name
)
,
damage
);
return
CreateWeapon
(
_fbb
,
name
?
_fbb
.
CreateString
(
name
)
:
0
,
damage
);
}
inline
flatbuffers
::
Offset
<
Weapon
>
CreateWeapon
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
WeaponT
*
_o
);
...
...
src/idl_gen_cpp.cpp
View file @
9031597f
...
...
@@ -897,11 +897,11 @@ class CppGenerator : public BaseGenerator {
}
code
+=
" return builder_.Finish();
\n
}
\n\n
"
;
// Generate a CreateX function with vector types as parameters
// Generate a CreateX
Direct
function with vector types as parameters
if
(
gen_vector_pars
)
{
code
+=
"inline flatbuffers::Offset<"
+
struct_def
.
name
+
"> Create"
;
code
+=
struct_def
.
name
;
code
+=
"(flatbuffers::FlatBufferBuilder &_fbb"
;
code
+=
"
Direct
(flatbuffers::FlatBufferBuilder &_fbb"
;
for
(
auto
it
=
struct_def
.
fields
.
vec
.
begin
();
it
!=
struct_def
.
fields
.
vec
.
end
();
++
it
)
{
auto
&
field
=
**
it
;
...
...
@@ -927,15 +927,16 @@ class CppGenerator : public BaseGenerator {
auto
&
field
=
**
it
;
if
(
!
field
.
deprecated
)
{
if
(
field
.
value
.
type
.
base_type
==
BASE_TYPE_STRING
)
{
code
+=
", "
+
field
.
name
+
" ?
0 :
"
;
code
+=
"_fbb.CreateString("
+
field
.
name
+
")"
;
code
+=
", "
+
field
.
name
+
" ? "
;
code
+=
"_fbb.CreateString("
+
field
.
name
+
")
: 0
"
;
}
else
if
(
field
.
value
.
type
.
base_type
==
BASE_TYPE_VECTOR
)
{
code
+=
", "
+
field
.
name
+
" ?
0 :
"
;
code
+=
", "
+
field
.
name
+
" ? "
;
code
+=
"_fbb.CreateVector<"
;
code
+=
GenTypeWire
(
field
.
value
.
type
.
VectorType
(),
""
,
false
);
code
+=
">(*"
+
field
.
name
+
")"
;
}
else
code
+=
">(*"
+
field
.
name
+
")
: 0
"
;
}
else
{
code
+=
", "
+
field
.
name
;
}
}
}
code
+=
");
\n
}
\n\n
"
;
...
...
src/idl_gen_go.cpp
View file @
9031597f
...
...
@@ -126,7 +126,7 @@ static void NewRootTypeFromBuffer(const StructDef &struct_def,
code
+=
" {
\n
"
;
code
+=
"
\t
n := flatbuffers.GetUOffsetT(buf[offset:])
\n
"
;
code
+=
"
\t
x := &"
+
struct_def
.
name
+
"{}
\n
"
;
code
+=
"
\t
x.Init(buf, n
+
offset)
\n
"
;
code
+=
"
\t
x.Init(buf, n
+
offset)
\n
"
;
code
+=
"
\t
return x
\n
"
;
code
+=
"}
\n\n
"
;
}
...
...
@@ -178,9 +178,10 @@ static void GetScalarFieldOfStruct(const StructDef &struct_def,
std
::
string
getter
=
GenGetter
(
field
.
value
.
type
);
GenReceiver
(
struct_def
,
code_ptr
);
code
+=
" "
+
MakeCamel
(
field
.
name
);
code
+=
"() "
+
TypeName
(
field
)
+
" { return "
+
getter
;
code
+=
"() "
+
TypeName
(
field
)
+
" {
\n
"
;
code
+=
"
\t
return "
+
getter
;
code
+=
"(rcv._tab.Pos + flatbuffers.UOffsetT("
;
code
+=
NumToString
(
field
.
value
.
offset
)
+
"))
}
\n
"
;
code
+=
NumToString
(
field
.
value
.
offset
)
+
"))
\n
}
\n
"
;
}
// Get the value of a table's scalar.
...
...
@@ -212,7 +213,7 @@ static void GetStructFieldOfStruct(const StructDef &struct_def,
code
+=
"
\t
if obj == nil {
\n
"
;
code
+=
"
\t\t
obj = new("
+
TypeName
(
field
)
+
")
\n
"
;
code
+=
"
\t
}
\n
"
;
code
+=
"
\t
obj.Init(rcv._tab.Bytes, rcv._tab.Pos
+
"
;
code
+=
"
\t
obj.Init(rcv._tab.Bytes, rcv._tab.Pos
+
"
;
code
+=
NumToString
(
field
.
value
.
offset
)
+
")"
;
code
+=
"
\n\t
return obj
\n
"
;
code
+=
"}
\n
"
;
...
...
@@ -287,9 +288,9 @@ static void GetMemberOfVectorOfStruct(const StructDef &struct_def,
if
(
!
(
vectortype
.
struct_def
->
fixed
))
{
code
+=
"
\t\t
x = rcv._tab.Indirect(x)
\n
"
;
}
code
+=
"
\t
if obj == nil {
\n
"
;
code
+=
"
\t\t
obj = new("
+
TypeName
(
field
)
+
")
\n
"
;
code
+=
"
\t
}
\n
"
;
code
+=
"
\t
\t
if obj == nil {
\n
"
;
code
+=
"
\t\t
\t
obj = new("
+
TypeName
(
field
)
+
")
\n
"
;
code
+=
"
\t
\t
}
\n
"
;
code
+=
"
\t\t
obj.Init(rcv._tab.Bytes, x)
\n
"
;
code
+=
"
\t\t
return true
\n\t
}
\n
"
;
code
+=
"
\t
return false
\n
"
;
...
...
@@ -310,7 +311,7 @@ static void GetMemberOfVectorOfNonStruct(const StructDef &struct_def,
code
+=
OffsetPrefix
(
field
);
code
+=
"
\t\t
a := rcv._tab.Vector(o)
\n
"
;
code
+=
"
\t\t
return "
+
GenGetter
(
field
.
value
.
type
)
+
"("
;
code
+=
"a + flatbuffers.UOffsetT(j
*
"
;
code
+=
"a + flatbuffers.UOffsetT(j
*
"
;
code
+=
NumToString
(
InlineSize
(
vectortype
))
+
"))
\n
"
;
code
+=
"
\t
}
\n
"
;
if
(
vectortype
.
base_type
==
BASE_TYPE_STRING
)
{
...
...
@@ -326,7 +327,10 @@ static void BeginBuilderArgs(const StructDef &struct_def,
std
::
string
*
code_ptr
)
{
std
::
string
&
code
=
*
code_ptr
;
code
+=
"
\n
"
;
if
(
code
.
substr
(
code
.
length
()
-
2
)
!=
"
\n\n
"
)
{
// a previous mutate has not put an extra new line
code
+=
"
\n
"
;
}
code
+=
"func Create"
+
struct_def
.
name
;
code
+=
"(builder *flatbuffers.Builder"
;
}
...
...
@@ -368,20 +372,20 @@ static void StructBuilderBody(const StructDef &struct_def,
const
char
*
nameprefix
,
std
::
string
*
code_ptr
)
{
std
::
string
&
code
=
*
code_ptr
;
code
+=
"
builder.Prep("
+
NumToString
(
struct_def
.
minalign
)
+
", "
;
code
+=
"
\t
builder.Prep("
+
NumToString
(
struct_def
.
minalign
)
+
", "
;
code
+=
NumToString
(
struct_def
.
bytesize
)
+
")
\n
"
;
for
(
auto
it
=
struct_def
.
fields
.
vec
.
rbegin
();
it
!=
struct_def
.
fields
.
vec
.
rend
();
++
it
)
{
auto
&
field
=
**
it
;
if
(
field
.
padding
)
code
+=
"
builder.Pad("
+
NumToString
(
field
.
padding
)
+
")
\n
"
;
code
+=
"
\t
builder.Pad("
+
NumToString
(
field
.
padding
)
+
")
\n
"
;
if
(
IsStruct
(
field
.
value
.
type
))
{
StructBuilderBody
(
*
field
.
value
.
type
.
struct_def
,
(
nameprefix
+
(
field
.
name
+
"_"
)).
c_str
(),
code_ptr
);
}
else
{
code
+=
"
builder.Prepend"
+
GenMethod
(
field
)
+
"("
;
code
+=
"
\t
builder.Prepend"
+
GenMethod
(
field
)
+
"("
;
code
+=
nameprefix
+
MakeCamel
(
field
.
name
,
false
)
+
")
\n
"
;
}
}
...
...
@@ -389,7 +393,7 @@ static void StructBuilderBody(const StructDef &struct_def,
static
void
EndBuilderBody
(
std
::
string
*
code_ptr
)
{
std
::
string
&
code
=
*
code_ptr
;
code
+=
"
return builder.Offset()
\n
"
;
code
+=
"
\t
return builder.Offset()
\n
"
;
code
+=
"}
\n
"
;
}
...
...
@@ -398,10 +402,10 @@ static void GetStartOfTable(const StructDef &struct_def,
std
::
string
*
code_ptr
)
{
std
::
string
&
code
=
*
code_ptr
;
code
+=
"func "
+
struct_def
.
name
+
"Start"
;
code
+=
"(builder *flatbuffers.Builder) {
"
;
code
+=
"builder.StartObject("
;
code
+=
"(builder *flatbuffers.Builder) {
\n
"
;
code
+=
"
\t
builder.StartObject("
;
code
+=
NumToString
(
struct_def
.
fields
.
vec
.
size
());
code
+=
")
}
\n
"
;
code
+=
")
\n
}
\n
"
;
}
// Set the value of a table's field.
...
...
@@ -418,8 +422,8 @@ static void BuildFieldOfTable(const StructDef &struct_def,
}
else
{
code
+=
GenTypeBasic
(
field
.
value
.
type
);
}
code
+=
") "
;
code
+=
"
{
builder.Prepend"
;
code
+=
")
{
\n
"
;
code
+=
"
\t
builder.Prepend"
;
code
+=
GenMethod
(
field
)
+
"Slot("
;
code
+=
NumToString
(
offset
)
+
", "
;
if
(
!
IsScalar
(
field
.
value
.
type
.
base_type
)
&&
(
!
struct_def
.
fixed
))
{
...
...
@@ -430,7 +434,7 @@ static void BuildFieldOfTable(const StructDef &struct_def,
code
+=
MakeCamel
(
field
.
name
,
false
);
}
code
+=
", "
+
field
.
value
.
constant
;
code
+=
")
}
\n
"
;
code
+=
")
\n
}
\n
"
;
}
// Set the value of one of the members of a table's vector.
...
...
@@ -441,7 +445,7 @@ static void BuildVectorOfTable(const StructDef &struct_def,
code
+=
"func "
+
struct_def
.
name
+
"Start"
;
code
+=
MakeCamel
(
field
.
name
);
code
+=
"Vector(builder *flatbuffers.Builder, numElems int) "
;
code
+=
"flatbuffers.UOffsetT {
return builder.StartVector("
;
code
+=
"flatbuffers.UOffsetT {
\n\t
return builder.StartVector("
;
auto
vector_type
=
field
.
value
.
type
.
VectorType
();
auto
alignment
=
InlineAlignment
(
vector_type
);
auto
elem_size
=
InlineSize
(
vector_type
);
...
...
@@ -456,7 +460,7 @@ static void GetEndOffsetOnTable(const StructDef &struct_def,
std
::
string
&
code
=
*
code_ptr
;
code
+=
"func "
+
struct_def
.
name
+
"End"
;
code
+=
"(builder *flatbuffers.Builder) flatbuffers.UOffsetT "
;
code
+=
"{
return builder.EndObject()
}
\n
"
;
code
+=
"{
\n\t
return builder.EndObject()
\n
}
\n
"
;
}
// Generate the receiver for function signatures.
...
...
@@ -521,9 +525,9 @@ static void MutateScalarFieldOfStruct(const StructDef &struct_def,
std
::
string
setter
=
"rcv._tab.Mutate"
+
type
;
GenReceiver
(
struct_def
,
code_ptr
);
code
+=
" Mutate"
+
MakeCamel
(
field
.
name
);
code
+=
"(n "
+
TypeName
(
field
)
+
") bool {
return "
+
setter
;
code
+=
"(rcv._tab.Pos
+
flatbuffers.UOffsetT("
;
code
+=
NumToString
(
field
.
value
.
offset
)
+
"), n)
}
\n\n
"
;
code
+=
"(n "
+
TypeName
(
field
)
+
") bool {
\n\t
return "
+
setter
;
code
+=
"(rcv._tab.Pos
+
flatbuffers.UOffsetT("
;
code
+=
NumToString
(
field
.
value
.
offset
)
+
"), n)
\n
}
\n\n
"
;
}
// Mutate the value of a table's scalar.
...
...
@@ -732,7 +736,7 @@ class GoGenerator : public BaseGenerator {
if
(
needs_imports
)
{
code
+=
"import (
\n
"
;
code
+=
"
\t
flatbuffers
\"
github.com/google/flatbuffers/go
\"\n
"
;
code
+=
")
\n
"
;
code
+=
")
\n
\n
"
;
}
}
...
...
tests/GoTest.sh
View file @
9031597f
...
...
@@ -29,9 +29,9 @@ mkdir -p ${go_src}/MyGame/Example
mkdir
-p
${
go_src
}
/github.com/google/flatbuffers/go
mkdir
-p
${
go_src
}
/flatbuffers_test
cp
-
u
MyGame/Example/
*
.go ./go_gen/src/MyGame/Example/
cp
-
u
../go/
*
./go_gen/src/github.com/google/flatbuffers/go
cp
-
u
./go_test.go ./go_gen/src/flatbuffers_test/
cp
-
a
MyGame/Example/
*
.go ./go_gen/src/MyGame/Example/
cp
-
a
../go/
*
./go_gen/src/github.com/google/flatbuffers/go
cp
-
a
./go_test.go ./go_gen/src/flatbuffers_test/
# Run tests with necessary flags.
# Developers may wish to see more detail by appending the verbosity flag
...
...
@@ -50,6 +50,18 @@ GOPATH=${go_path} go test flatbuffers_test \
--fuzz_fields
=
4
\
--fuzz_objects
=
10000
GO_TEST_RESULT
=
$?
rm
-rf
${
go_path
}
/
{
pkg,src
}
if
[[
$GO_TEST_RESULT
==
0
]]
;
then
echo
"OK: Go tests passed."
else
echo
"KO: Go tests failed."
exit
1
fi
echo
"OK: Go tests passed."
NOT_FMT_FILES
=
$(
gofmt
-l
MyGame
)
if
[[
${
NOT_FMT_FILES
}
!=
""
]]
;
then
echo
"These files are not well gofmt'ed:
\n\n
${
NOT_FMT_FILES
}
"
# enable this when enums are properly formated
# exit 1
fi
tests/MyGame/Example/Monster.go
View file @
9031597f
This diff is collapsed.
Click to expand it.
tests/MyGame/Example/Stat.go
View file @
9031597f
...
...
@@ -5,6 +5,7 @@ package Example
import
(
flatbuffers
"github.com/google/flatbuffers/go"
)
type
Stat
struct
{
_tab
flatbuffers
.
Table
}
...
...
@@ -12,7 +13,7 @@ type Stat struct {
func
GetRootAsStat
(
buf
[]
byte
,
offset
flatbuffers
.
UOffsetT
)
*
Stat
{
n
:=
flatbuffers
.
GetUOffsetT
(
buf
[
offset
:
])
x
:=
&
Stat
{}
x
.
Init
(
buf
,
n
+
offset
)
x
.
Init
(
buf
,
n
+
offset
)
return
x
}
...
...
@@ -53,8 +54,18 @@ func (rcv *Stat) MutateCount(n uint16) bool {
return
rcv
.
_tab
.
MutateUint16Slot
(
8
,
n
)
}
func
StatStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
3
)
}
func
StatAddId
(
builder
*
flatbuffers
.
Builder
,
id
flatbuffers
.
UOffsetT
)
{
builder
.
PrependUOffsetTSlot
(
0
,
flatbuffers
.
UOffsetT
(
id
),
0
)
}
func
StatAddVal
(
builder
*
flatbuffers
.
Builder
,
val
int64
)
{
builder
.
PrependInt64Slot
(
1
,
val
,
0
)
}
func
StatAddCount
(
builder
*
flatbuffers
.
Builder
,
count
uint16
)
{
builder
.
PrependUint16Slot
(
2
,
count
,
0
)
}
func
StatEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
func
StatStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
3
)
}
func
StatAddId
(
builder
*
flatbuffers
.
Builder
,
id
flatbuffers
.
UOffsetT
)
{
builder
.
PrependUOffsetTSlot
(
0
,
flatbuffers
.
UOffsetT
(
id
),
0
)
}
func
StatAddVal
(
builder
*
flatbuffers
.
Builder
,
val
int64
)
{
builder
.
PrependInt64Slot
(
1
,
val
,
0
)
}
func
StatAddCount
(
builder
*
flatbuffers
.
Builder
,
count
uint16
)
{
builder
.
PrependUint16Slot
(
2
,
count
,
0
)
}
func
StatEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
tests/MyGame/Example/Test.go
View file @
9031597f
...
...
@@ -5,6 +5,7 @@ package Example
import
(
flatbuffers
"github.com/google/flatbuffers/go"
)
type
Test
struct
{
_tab
flatbuffers
.
Struct
}
...
...
@@ -14,17 +15,24 @@ func (rcv *Test) Init(buf []byte, i flatbuffers.UOffsetT) {
rcv
.
_tab
.
Pos
=
i
}
func
(
rcv
*
Test
)
A
()
int16
{
return
rcv
.
_tab
.
GetInt16
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
0
))
}
func
(
rcv
*
Test
)
MutateA
(
n
int16
)
bool
{
return
rcv
.
_tab
.
MutateInt16
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
0
),
n
)
}
func
(
rcv
*
Test
)
B
()
int8
{
return
rcv
.
_tab
.
GetInt8
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
2
))
}
func
(
rcv
*
Test
)
MutateB
(
n
int8
)
bool
{
return
rcv
.
_tab
.
MutateInt8
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
2
),
n
)
}
func
(
rcv
*
Test
)
A
()
int16
{
return
rcv
.
_tab
.
GetInt16
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
0
))
}
func
(
rcv
*
Test
)
MutateA
(
n
int16
)
bool
{
return
rcv
.
_tab
.
MutateInt16
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
0
),
n
)
}
func
(
rcv
*
Test
)
B
()
int8
{
return
rcv
.
_tab
.
GetInt8
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
2
))
}
func
(
rcv
*
Test
)
MutateB
(
n
int8
)
bool
{
return
rcv
.
_tab
.
MutateInt8
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
2
),
n
)
}
func
CreateTest
(
builder
*
flatbuffers
.
Builder
,
a
int16
,
b
int8
)
flatbuffers
.
UOffsetT
{
builder
.
Prep
(
2
,
4
)
builder
.
Pad
(
1
)
builder
.
PrependInt8
(
b
)
builder
.
PrependInt16
(
a
)
return
builder
.
Offset
()
builder
.
Prep
(
2
,
4
)
builder
.
Pad
(
1
)
builder
.
PrependInt8
(
b
)
builder
.
PrependInt16
(
a
)
return
builder
.
Offset
()
}
tests/MyGame/Example/TestSimpleTableWithEnum.go
View file @
9031597f
...
...
@@ -5,6 +5,7 @@ package Example
import
(
flatbuffers
"github.com/google/flatbuffers/go"
)
type
TestSimpleTableWithEnum
struct
{
_tab
flatbuffers
.
Table
}
...
...
@@ -12,7 +13,7 @@ type TestSimpleTableWithEnum struct {
func
GetRootAsTestSimpleTableWithEnum
(
buf
[]
byte
,
offset
flatbuffers
.
UOffsetT
)
*
TestSimpleTableWithEnum
{
n
:=
flatbuffers
.
GetUOffsetT
(
buf
[
offset
:
])
x
:=
&
TestSimpleTableWithEnum
{}
x
.
Init
(
buf
,
n
+
offset
)
x
.
Init
(
buf
,
n
+
offset
)
return
x
}
...
...
@@ -33,6 +34,12 @@ func (rcv *TestSimpleTableWithEnum) MutateColor(n int8) bool {
return
rcv
.
_tab
.
MutateInt8Slot
(
4
,
n
)
}
func
TestSimpleTableWithEnumStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
1
)
}
func
TestSimpleTableWithEnumAddColor
(
builder
*
flatbuffers
.
Builder
,
color
int8
)
{
builder
.
PrependInt8Slot
(
0
,
color
,
2
)
}
func
TestSimpleTableWithEnumEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
func
TestSimpleTableWithEnumStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
1
)
}
func
TestSimpleTableWithEnumAddColor
(
builder
*
flatbuffers
.
Builder
,
color
int8
)
{
builder
.
PrependInt8Slot
(
0
,
color
,
2
)
}
func
TestSimpleTableWithEnumEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
tests/MyGame/Example/Vec3.go
View file @
9031597f
...
...
@@ -5,6 +5,7 @@ package Example
import
(
flatbuffers
"github.com/google/flatbuffers/go"
)
type
Vec3
struct
{
_tab
flatbuffers
.
Struct
}
...
...
@@ -14,42 +15,62 @@ func (rcv *Vec3) Init(buf []byte, i flatbuffers.UOffsetT) {
rcv
.
_tab
.
Pos
=
i
}
func
(
rcv
*
Vec3
)
X
()
float32
{
return
rcv
.
_tab
.
GetFloat32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
0
))
}
func
(
rcv
*
Vec3
)
MutateX
(
n
float32
)
bool
{
return
rcv
.
_tab
.
MutateFloat32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
0
),
n
)
}
func
(
rcv
*
Vec3
)
X
()
float32
{
return
rcv
.
_tab
.
GetFloat32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
0
))
}
func
(
rcv
*
Vec3
)
MutateX
(
n
float32
)
bool
{
return
rcv
.
_tab
.
MutateFloat32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
0
),
n
)
}
func
(
rcv
*
Vec3
)
Y
()
float32
{
return
rcv
.
_tab
.
GetFloat32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
4
))
}
func
(
rcv
*
Vec3
)
MutateY
(
n
float32
)
bool
{
return
rcv
.
_tab
.
MutateFloat32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
4
),
n
)
}
func
(
rcv
*
Vec3
)
Y
()
float32
{
return
rcv
.
_tab
.
GetFloat32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
4
))
}
func
(
rcv
*
Vec3
)
MutateY
(
n
float32
)
bool
{
return
rcv
.
_tab
.
MutateFloat32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
4
),
n
)
}
func
(
rcv
*
Vec3
)
Z
()
float32
{
return
rcv
.
_tab
.
GetFloat32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
8
))
}
func
(
rcv
*
Vec3
)
MutateZ
(
n
float32
)
bool
{
return
rcv
.
_tab
.
MutateFloat32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
8
),
n
)
}
func
(
rcv
*
Vec3
)
Z
()
float32
{
return
rcv
.
_tab
.
GetFloat32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
8
))
}
func
(
rcv
*
Vec3
)
MutateZ
(
n
float32
)
bool
{
return
rcv
.
_tab
.
MutateFloat32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
8
),
n
)
}
func
(
rcv
*
Vec3
)
Test1
()
float64
{
return
rcv
.
_tab
.
GetFloat64
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
16
))
}
func
(
rcv
*
Vec3
)
MutateTest1
(
n
float64
)
bool
{
return
rcv
.
_tab
.
MutateFloat64
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
16
),
n
)
}
func
(
rcv
*
Vec3
)
Test1
()
float64
{
return
rcv
.
_tab
.
GetFloat64
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
16
))
}
func
(
rcv
*
Vec3
)
MutateTest1
(
n
float64
)
bool
{
return
rcv
.
_tab
.
MutateFloat64
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
16
),
n
)
}
func
(
rcv
*
Vec3
)
Test2
()
int8
{
return
rcv
.
_tab
.
GetInt8
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
24
))
}
func
(
rcv
*
Vec3
)
MutateTest2
(
n
int8
)
bool
{
return
rcv
.
_tab
.
MutateInt8
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
24
),
n
)
}
func
(
rcv
*
Vec3
)
Test2
()
int8
{
return
rcv
.
_tab
.
GetInt8
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
24
))
}
func
(
rcv
*
Vec3
)
MutateTest2
(
n
int8
)
bool
{
return
rcv
.
_tab
.
MutateInt8
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
24
),
n
)
}
func
(
rcv
*
Vec3
)
Test3
(
obj
*
Test
)
*
Test
{
if
obj
==
nil
{
obj
=
new
(
Test
)
}
obj
.
Init
(
rcv
.
_tab
.
Bytes
,
rcv
.
_tab
.
Pos
+
26
)
obj
.
Init
(
rcv
.
_tab
.
Bytes
,
rcv
.
_tab
.
Pos
+
26
)
return
obj
}
func
CreateVec3
(
builder
*
flatbuffers
.
Builder
,
x
float32
,
y
float32
,
z
float32
,
test1
float64
,
test2
int8
,
test3_a
int16
,
test3_b
int8
)
flatbuffers
.
UOffsetT
{
builder
.
Prep
(
16
,
32
)
builder
.
Pad
(
2
)
builder
.
Prep
(
2
,
4
)
builder
.
Pad
(
1
)
builder
.
PrependInt8
(
test3_b
)
builder
.
PrependInt16
(
test3_a
)
builder
.
Pad
(
1
)
builder
.
PrependInt8
(
test2
)
builder
.
PrependFloat64
(
test1
)
builder
.
Pad
(
4
)
builder
.
PrependFloat32
(
z
)
builder
.
PrependFloat32
(
y
)
builder
.
PrependFloat32
(
x
)
return
builder
.
Offset
()
builder
.
Prep
(
16
,
32
)
builder
.
Pad
(
2
)
builder
.
Prep
(
2
,
4
)
builder
.
Pad
(
1
)
builder
.
PrependInt8
(
test3_b
)
builder
.
PrependInt16
(
test3_a
)
builder
.
Pad
(
1
)
builder
.
PrependInt8
(
test2
)
builder
.
PrependFloat64
(
test1
)
builder
.
Pad
(
4
)
builder
.
PrependFloat32
(
z
)
builder
.
PrependFloat32
(
y
)
builder
.
PrependFloat32
(
x
)
return
builder
.
Offset
()
}
tests/MyGame/Example2/Monster.go
View file @
9031597f
...
...
@@ -5,6 +5,7 @@ package Example2
import
(
flatbuffers
"github.com/google/flatbuffers/go"
)
type
Monster
struct
{
_tab
flatbuffers
.
Table
}
...
...
@@ -12,7 +13,7 @@ type Monster struct {
func
GetRootAsMonster
(
buf
[]
byte
,
offset
flatbuffers
.
UOffsetT
)
*
Monster
{
n
:=
flatbuffers
.
GetUOffsetT
(
buf
[
offset
:
])
x
:=
&
Monster
{}
x
.
Init
(
buf
,
n
+
offset
)
x
.
Init
(
buf
,
n
+
offset
)
return
x
}
...
...
@@ -21,5 +22,9 @@ func (rcv *Monster) Init(buf []byte, i flatbuffers.UOffsetT) {
rcv
.
_tab
.
Pos
=
i
}
func
MonsterStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
0
)
}
func
MonsterEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
func
MonsterStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
0
)
}
func
MonsterEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
tests/monster_test_generated.h
View file @
9031597f
...
...
@@ -260,11 +260,11 @@ inline flatbuffers::Offset<Stat> CreateStat(flatbuffers::FlatBufferBuilder &_fbb
return
builder_
.
Finish
();
}
inline
flatbuffers
::
Offset
<
Stat
>
CreateStat
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
inline
flatbuffers
::
Offset
<
Stat
>
CreateStat
Direct
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
char
*
id
=
nullptr
,
int64_t
val
=
0
,
uint16_t
count
=
0
)
{
return
CreateStat
(
_fbb
,
id
?
0
:
_fbb
.
CreateString
(
id
)
,
val
,
count
);
return
CreateStat
(
_fbb
,
id
?
_fbb
.
CreateString
(
id
)
:
0
,
val
,
count
);
}
inline
flatbuffers
::
Offset
<
Stat
>
CreateStat
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
StatT
*
_o
);
...
...
@@ -542,7 +542,7 @@ inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder
return
builder_
.
Finish
();
}
inline
flatbuffers
::
Offset
<
Monster
>
CreateMonster
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
inline
flatbuffers
::
Offset
<
Monster
>
CreateMonster
Direct
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
Vec3
*
pos
=
0
,
int16_t
mana
=
150
,
int16_t
hp
=
100
,
...
...
@@ -571,7 +571,7 @@ inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder
float
testf2
=
3
.
0
f
,
float
testf3
=
0
.
0
f
,
const
std
::
vector
<
flatbuffers
::
Offset
<
flatbuffers
::
String
>>
*
testarrayofstring2
=
nullptr
)
{
return
CreateMonster
(
_fbb
,
pos
,
mana
,
hp
,
name
?
0
:
_fbb
.
CreateString
(
name
),
inventory
?
0
:
_fbb
.
CreateVector
<
uint8_t
>
(
*
inventory
),
color
,
test_type
,
test
,
test4
?
0
:
_fbb
.
CreateVector
<
const
Test
*>
(
*
test4
),
testarrayofstring
?
0
:
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
flatbuffers
::
String
>>
(
*
testarrayofstring
),
testarrayoftables
?
0
:
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
Monster
>>
(
*
testarrayoftables
),
enemy
,
testnestedflatbuffer
?
0
:
_fbb
.
CreateVector
<
uint8_t
>
(
*
testnestedflatbuffer
),
testempty
,
testbool
,
testhashs32_fnv1
,
testhashu32_fnv1
,
testhashs64_fnv1
,
testhashu64_fnv1
,
testhashs32_fnv1a
,
testhashu32_fnv1a
,
testhashs64_fnv1a
,
testhashu64_fnv1a
,
testarrayofbools
?
0
:
_fbb
.
CreateVector
<
uint8_t
>
(
*
testarrayofbools
),
testf
,
testf2
,
testf3
,
testarrayofstring2
?
0
:
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
flatbuffers
::
String
>>
(
*
testarrayofstring2
)
);
return
CreateMonster
(
_fbb
,
pos
,
mana
,
hp
,
name
?
_fbb
.
CreateString
(
name
)
:
0
,
inventory
?
_fbb
.
CreateVector
<
uint8_t
>
(
*
inventory
)
:
0
,
color
,
test_type
,
test
,
test4
?
_fbb
.
CreateVector
<
const
Test
*>
(
*
test4
)
:
0
,
testarrayofstring
?
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
flatbuffers
::
String
>>
(
*
testarrayofstring
)
:
0
,
testarrayoftables
?
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
Monster
>>
(
*
testarrayoftables
)
:
0
,
enemy
,
testnestedflatbuffer
?
_fbb
.
CreateVector
<
uint8_t
>
(
*
testnestedflatbuffer
)
:
0
,
testempty
,
testbool
,
testhashs32_fnv1
,
testhashu32_fnv1
,
testhashs64_fnv1
,
testhashu64_fnv1
,
testhashs32_fnv1a
,
testhashu32_fnv1a
,
testhashs64_fnv1a
,
testhashu64_fnv1a
,
testarrayofbools
?
_fbb
.
CreateVector
<
uint8_t
>
(
*
testarrayofbools
)
:
0
,
testf
,
testf2
,
testf3
,
testarrayofstring2
?
_fbb
.
CreateVector
<
flatbuffers
::
Offset
<
flatbuffers
::
String
>>
(
*
testarrayofstring2
)
:
0
);
}
inline
flatbuffers
::
Offset
<
Monster
>
CreateMonster
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
MonsterT
*
_o
);
...
...
tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.go
View file @
9031597f
...
...
@@ -7,3 +7,10 @@ const (
EnumInNestedNSB
=
1
EnumInNestedNSC
=
2
)
var
EnumNamesEnumInNestedNS
=
map
[
int
]
string
{
EnumInNestedNSA
:
"A"
,
EnumInNestedNSB
:
"B"
,
EnumInNestedNSC
:
"C"
,
}
tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.go
View file @
9031597f
...
...
@@ -5,6 +5,7 @@ package NamespaceB
import
(
flatbuffers
"github.com/google/flatbuffers/go"
)
type
StructInNestedNS
struct
{
_tab
flatbuffers
.
Struct
}
...
...
@@ -14,16 +15,23 @@ func (rcv *StructInNestedNS) Init(buf []byte, i flatbuffers.UOffsetT) {
rcv
.
_tab
.
Pos
=
i
}
func
(
rcv
*
StructInNestedNS
)
A
()
int32
{
return
rcv
.
_tab
.
GetInt32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
0
))
}
func
(
rcv
*
StructInNestedNS
)
MutateA
(
n
int32
)
bool
{
return
rcv
.
_tab
.
MutateInt32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
0
),
n
)
}
func
(
rcv
*
StructInNestedNS
)
B
()
int32
{
return
rcv
.
_tab
.
GetInt32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
4
))
}
func
(
rcv
*
StructInNestedNS
)
MutateB
(
n
int32
)
bool
{
return
rcv
.
_tab
.
MutateInt32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
4
),
n
)
}
func
(
rcv
*
StructInNestedNS
)
A
()
int32
{
return
rcv
.
_tab
.
GetInt32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
0
))
}
func
(
rcv
*
StructInNestedNS
)
MutateA
(
n
int32
)
bool
{
return
rcv
.
_tab
.
MutateInt32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
0
),
n
)
}
func
(
rcv
*
StructInNestedNS
)
B
()
int32
{
return
rcv
.
_tab
.
GetInt32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
4
))
}
func
(
rcv
*
StructInNestedNS
)
MutateB
(
n
int32
)
bool
{
return
rcv
.
_tab
.
MutateInt32
(
rcv
.
_tab
.
Pos
+
flatbuffers
.
UOffsetT
(
4
),
n
)
}
func
CreateStructInNestedNS
(
builder
*
flatbuffers
.
Builder
,
a
int32
,
b
int32
)
flatbuffers
.
UOffsetT
{
builder
.
Prep
(
4
,
8
)
builder
.
PrependInt32
(
b
)
builder
.
PrependInt32
(
a
)
return
builder
.
Offset
()
builder
.
Prep
(
4
,
8
)
builder
.
PrependInt32
(
b
)
builder
.
PrependInt32
(
a
)
return
builder
.
Offset
()
}
tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.go
View file @
9031597f
...
...
@@ -5,6 +5,7 @@ package NamespaceB
import
(
flatbuffers
"github.com/google/flatbuffers/go"
)
type
TableInNestedNS
struct
{
_tab
flatbuffers
.
Table
}
...
...
@@ -12,7 +13,7 @@ type TableInNestedNS struct {
func
GetRootAsTableInNestedNS
(
buf
[]
byte
,
offset
flatbuffers
.
UOffsetT
)
*
TableInNestedNS
{
n
:=
flatbuffers
.
GetUOffsetT
(
buf
[
offset
:
])
x
:=
&
TableInNestedNS
{}
x
.
Init
(
buf
,
n
+
offset
)
x
.
Init
(
buf
,
n
+
offset
)
return
x
}
...
...
@@ -33,6 +34,12 @@ func (rcv *TableInNestedNS) MutateFoo(n int32) bool {
return
rcv
.
_tab
.
MutateInt32Slot
(
4
,
n
)
}
func
TableInNestedNSStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
1
)
}
func
TableInNestedNSAddFoo
(
builder
*
flatbuffers
.
Builder
,
foo
int32
)
{
builder
.
PrependInt32Slot
(
0
,
foo
,
0
)
}
func
TableInNestedNSEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
func
TableInNestedNSStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
1
)
}
func
TableInNestedNSAddFoo
(
builder
*
flatbuffers
.
Builder
,
foo
int32
)
{
builder
.
PrependInt32Slot
(
0
,
foo
,
0
)
}
func
TableInNestedNSEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
tests/namespace_test/NamespaceA/SecondTableInA.go
View file @
9031597f
...
...
@@ -5,6 +5,7 @@ package NamespaceA
import
(
flatbuffers
"github.com/google/flatbuffers/go"
)
type
SecondTableInA
struct
{
_tab
flatbuffers
.
Table
}
...
...
@@ -12,7 +13,7 @@ type SecondTableInA struct {
func
GetRootAsSecondTableInA
(
buf
[]
byte
,
offset
flatbuffers
.
UOffsetT
)
*
SecondTableInA
{
n
:=
flatbuffers
.
GetUOffsetT
(
buf
[
offset
:
])
x
:=
&
SecondTableInA
{}
x
.
Init
(
buf
,
n
+
offset
)
x
.
Init
(
buf
,
n
+
offset
)
return
x
}
...
...
@@ -34,6 +35,12 @@ func (rcv *SecondTableInA) ReferToC(obj *TableInC) *TableInC {
return
nil
}
func
SecondTableInAStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
1
)
}
func
SecondTableInAAddReferToC
(
builder
*
flatbuffers
.
Builder
,
referToC
flatbuffers
.
UOffsetT
)
{
builder
.
PrependUOffsetTSlot
(
0
,
flatbuffers
.
UOffsetT
(
referToC
),
0
)
}
func
SecondTableInAEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
func
SecondTableInAStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
1
)
}
func
SecondTableInAAddReferToC
(
builder
*
flatbuffers
.
Builder
,
referToC
flatbuffers
.
UOffsetT
)
{
builder
.
PrependUOffsetTSlot
(
0
,
flatbuffers
.
UOffsetT
(
referToC
),
0
)
}
func
SecondTableInAEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
tests/namespace_test/NamespaceA/TableInFirstNS.go
View file @
9031597f
...
...
@@ -5,6 +5,7 @@ package NamespaceA
import
(
flatbuffers
"github.com/google/flatbuffers/go"
)
type
TableInFirstNS
struct
{
_tab
flatbuffers
.
Table
}
...
...
@@ -12,7 +13,7 @@ type TableInFirstNS struct {
func
GetRootAsTableInFirstNS
(
buf
[]
byte
,
offset
flatbuffers
.
UOffsetT
)
*
TableInFirstNS
{
n
:=
flatbuffers
.
GetUOffsetT
(
buf
[
offset
:
])
x
:=
&
TableInFirstNS
{}
x
.
Init
(
buf
,
n
+
offset
)
x
.
Init
(
buf
,
n
+
offset
)
return
x
}
...
...
@@ -59,8 +60,18 @@ func (rcv *TableInFirstNS) FooStruct(obj *StructInNestedNS) *StructInNestedNS {
return
nil
}
func
TableInFirstNSStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
3
)
}
func
TableInFirstNSAddFooTable
(
builder
*
flatbuffers
.
Builder
,
fooTable
flatbuffers
.
UOffsetT
)
{
builder
.
PrependUOffsetTSlot
(
0
,
flatbuffers
.
UOffsetT
(
fooTable
),
0
)
}
func
TableInFirstNSAddFooEnum
(
builder
*
flatbuffers
.
Builder
,
fooEnum
int8
)
{
builder
.
PrependInt8Slot
(
1
,
fooEnum
,
0
)
}
func
TableInFirstNSAddFooStruct
(
builder
*
flatbuffers
.
Builder
,
fooStruct
flatbuffers
.
UOffsetT
)
{
builder
.
PrependStructSlot
(
2
,
flatbuffers
.
UOffsetT
(
fooStruct
),
0
)
}
func
TableInFirstNSEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
func
TableInFirstNSStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
3
)
}
func
TableInFirstNSAddFooTable
(
builder
*
flatbuffers
.
Builder
,
fooTable
flatbuffers
.
UOffsetT
)
{
builder
.
PrependUOffsetTSlot
(
0
,
flatbuffers
.
UOffsetT
(
fooTable
),
0
)
}
func
TableInFirstNSAddFooEnum
(
builder
*
flatbuffers
.
Builder
,
fooEnum
int8
)
{
builder
.
PrependInt8Slot
(
1
,
fooEnum
,
0
)
}
func
TableInFirstNSAddFooStruct
(
builder
*
flatbuffers
.
Builder
,
fooStruct
flatbuffers
.
UOffsetT
)
{
builder
.
PrependStructSlot
(
2
,
flatbuffers
.
UOffsetT
(
fooStruct
),
0
)
}
func
TableInFirstNSEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
tests/namespace_test/NamespaceC/TableInC.go
View file @
9031597f
...
...
@@ -5,6 +5,7 @@ package NamespaceC
import
(
flatbuffers
"github.com/google/flatbuffers/go"
)
type
TableInC
struct
{
_tab
flatbuffers
.
Table
}
...
...
@@ -12,7 +13,7 @@ type TableInC struct {
func
GetRootAsTableInC
(
buf
[]
byte
,
offset
flatbuffers
.
UOffsetT
)
*
TableInC
{
n
:=
flatbuffers
.
GetUOffsetT
(
buf
[
offset
:
])
x
:=
&
TableInC
{}
x
.
Init
(
buf
,
n
+
offset
)
x
.
Init
(
buf
,
n
+
offset
)
return
x
}
...
...
@@ -47,7 +48,15 @@ func (rcv *TableInC) ReferToA2(obj *SecondTableInA) *SecondTableInA {
return
nil
}
func
TableInCStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
2
)
}
func
TableInCAddReferToA1
(
builder
*
flatbuffers
.
Builder
,
referToA1
flatbuffers
.
UOffsetT
)
{
builder
.
PrependUOffsetTSlot
(
0
,
flatbuffers
.
UOffsetT
(
referToA1
),
0
)
}
func
TableInCAddReferToA2
(
builder
*
flatbuffers
.
Builder
,
referToA2
flatbuffers
.
UOffsetT
)
{
builder
.
PrependUOffsetTSlot
(
1
,
flatbuffers
.
UOffsetT
(
referToA2
),
0
)
}
func
TableInCEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
func
TableInCStart
(
builder
*
flatbuffers
.
Builder
)
{
builder
.
StartObject
(
2
)
}
func
TableInCAddReferToA1
(
builder
*
flatbuffers
.
Builder
,
referToA1
flatbuffers
.
UOffsetT
)
{
builder
.
PrependUOffsetTSlot
(
0
,
flatbuffers
.
UOffsetT
(
referToA1
),
0
)
}
func
TableInCAddReferToA2
(
builder
*
flatbuffers
.
Builder
,
referToA2
flatbuffers
.
UOffsetT
)
{
builder
.
PrependUOffsetTSlot
(
1
,
flatbuffers
.
UOffsetT
(
referToA2
),
0
)
}
func
TableInCEnd
(
builder
*
flatbuffers
.
Builder
)
flatbuffers
.
UOffsetT
{
return
builder
.
EndObject
()
}
tests/test.cpp
View file @
9031597f
...
...
@@ -1169,6 +1169,11 @@ void ParseUnionTest() {
"table V { X:U; }"
"root_type V;"
"{ X:{ A:1 }, X_type: T }"
),
true
);
// Unions must be parsable with prefixed namespace.
flatbuffers
::
Parser
parser2
;
TEST_EQ
(
parser2
.
Parse
(
"namespace N; table A {} namespace; union U { N.A }"
"table B { e:U; } root_type B;"
"{ e_type: N_A, e: {} }"
),
true
);
}
void
ConformTest
()
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment