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
42c08cbc
Commit
42c08cbc
authored
Nov 11, 2019
by
Derek Bailey
Committed by
Wouter van Oortmerssen
Nov 11, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Ran src/clang-format-all.sh (#5617)
parent
33d5dd9b
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
110 additions
and
94 deletions
+110
-94
schema_interface.h
grpc/src/compiler/schema_interface.h
+2
-2
grpctest.cpp
grpc/tests/grpctest.cpp
+6
-10
message_builder_test.cpp
grpc/tests/message_builder_test.cpp
+94
-73
reflection.h
include/flatbuffers/reflection.h
+1
-1
sample_bfbs.cpp
samples/sample_bfbs.cpp
+3
-3
sample_binary.cpp
samples/sample_binary.cpp
+1
-1
sample_text.cpp
samples/sample_text.cpp
+1
-2
idl_gen_js_ts.cpp
src/idl_gen_js_ts.cpp
+2
-1
test.cpp
tests/test.cpp
+0
-1
No files found.
grpc/src/compiler/schema_interface.h
View file @
42c08cbc
...
@@ -34,11 +34,11 @@
...
@@ -34,11 +34,11 @@
#ifndef GRPC_INTERNAL_COMPILER_SCHEMA_INTERFACE_H
#ifndef GRPC_INTERNAL_COMPILER_SCHEMA_INTERFACE_H
#define GRPC_INTERNAL_COMPILER_SCHEMA_INTERFACE_H
#define GRPC_INTERNAL_COMPILER_SCHEMA_INTERFACE_H
#include "src/compiler/config.h"
#include <memory>
#include <memory>
#include <vector>
#include <vector>
#include "src/compiler/config.h"
#ifndef GRPC_CUSTOM_STRING
#ifndef GRPC_CUSTOM_STRING
# include <string>
# include <string>
# define GRPC_CUSTOM_STRING std::string
# define GRPC_CUSTOM_STRING std::string
...
...
grpc/tests/grpctest.cpp
View file @
42c08cbc
...
@@ -14,17 +14,17 @@
...
@@ -14,17 +14,17 @@
* limitations under the License.
* limitations under the License.
*/
*/
#include <thread>
#include <grpc++/grpc++.h>
#include <grpc++/grpc++.h>
#include <thread>
#include "monster_test.grpc.fb.h"
#include "monster_test.grpc.fb.h"
#include "monster_test_generated.h"
#include "monster_test_generated.h"
#include "test_assert.h"
#include "test_assert.h"
using
namespace
MyGame
::
Example
;
using
namespace
MyGame
::
Example
;
using
flatbuffers
::
grpc
::
MessageBuilder
;
using
flatbuffers
::
FlatBufferBuilder
;
using
flatbuffers
::
FlatBufferBuilder
;
using
flatbuffers
::
grpc
::
MessageBuilder
;
void
message_builder_tests
();
void
message_builder_tests
();
...
@@ -97,8 +97,7 @@ void RunServer() {
...
@@ -97,8 +97,7 @@ void RunServer() {
server_instance
->
Wait
();
server_instance
->
Wait
();
}
}
template
<
class
Builder
>
template
<
class
Builder
>
void
StoreRPC
(
MonsterStorage
::
Stub
*
stub
)
{
void
StoreRPC
(
MonsterStorage
::
Stub
*
stub
)
{
Builder
fbb
;
Builder
fbb
;
grpc
::
ClientContext
context
;
grpc
::
ClientContext
context
;
// Build a request with the name set.
// Build a request with the name set.
...
@@ -119,8 +118,7 @@ void StoreRPC(MonsterStorage::Stub *stub) {
...
@@ -119,8 +118,7 @@ void StoreRPC(MonsterStorage::Stub *stub) {
}
}
}
}
template
<
class
Builder
>
template
<
class
Builder
>
void
RetrieveRPC
(
MonsterStorage
::
Stub
*
stub
)
{
void
RetrieveRPC
(
MonsterStorage
::
Stub
*
stub
)
{
Builder
fbb
;
Builder
fbb
;
grpc
::
ClientContext
context
;
grpc
::
ClientContext
context
;
fbb
.
Clear
();
fbb
.
Clear
();
...
@@ -155,7 +153,6 @@ int grpc_server_test() {
...
@@ -155,7 +153,6 @@ int grpc_server_test() {
RetrieveRPC
<
MessageBuilder
>
(
stub
.
get
());
RetrieveRPC
<
MessageBuilder
>
(
stub
.
get
());
RetrieveRPC
<
FlatBufferBuilder
>
(
stub
.
get
());
RetrieveRPC
<
FlatBufferBuilder
>
(
stub
.
get
());
#if !FLATBUFFERS_GRPC_DISABLE_AUTO_VERIFICATION
#if !FLATBUFFERS_GRPC_DISABLE_AUTO_VERIFICATION
{
{
// Test that an invalid request errors out correctly
// Test that an invalid request errors out correctly
...
@@ -181,7 +178,7 @@ int grpc_server_test() {
...
@@ -181,7 +178,7 @@ int grpc_server_test() {
return
0
;
return
0
;
}
}
int
main
(
int
/*argc*/
,
const
char
*
/*argv*/
[])
{
int
main
(
int
/*argc*/
,
const
char
*
/*argv*/
[])
{
message_builder_tests
();
message_builder_tests
();
grpc_server_test
();
grpc_server_test
();
...
@@ -193,4 +190,3 @@ int main(int /*argc*/, const char * /*argv*/ []) {
...
@@ -193,4 +190,3 @@ int main(int /*argc*/, const char * /*argv*/ []) {
return
1
;
return
1
;
}
}
}
}
grpc/tests/message_builder_test.cpp
View file @
42c08cbc
...
@@ -3,22 +3,27 @@
...
@@ -3,22 +3,27 @@
#include "test_assert.h"
#include "test_assert.h"
#include "test_builder.h"
#include "test_builder.h"
using
MyGame
::
Example
::
Vec3
;
using
MyGame
::
Example
::
CreateStat
;
using
MyGame
::
Example
::
Any_NONE
;
using
MyGame
::
Example
::
Any_NONE
;
using
MyGame
::
Example
::
CreateStat
;
using
MyGame
::
Example
::
Vec3
;
bool
verify
(
flatbuffers
::
grpc
::
Message
<
Monster
>
&
msg
,
const
std
::
string
&
expected_name
,
Color
color
)
{
bool
verify
(
flatbuffers
::
grpc
::
Message
<
Monster
>
&
msg
,
const
std
::
string
&
expected_name
,
Color
color
)
{
const
Monster
*
monster
=
msg
.
GetRoot
();
const
Monster
*
monster
=
msg
.
GetRoot
();
return
(
monster
->
name
()
->
str
()
==
expected_name
)
&&
(
monster
->
color
()
==
color
);
return
(
monster
->
name
()
->
str
()
==
expected_name
)
&&
(
monster
->
color
()
==
color
);
}
}
bool
release_n_verify
(
flatbuffers
::
grpc
::
MessageBuilder
&
mbb
,
const
std
::
string
&
expected_name
,
Color
color
)
{
bool
release_n_verify
(
flatbuffers
::
grpc
::
MessageBuilder
&
mbb
,
const
std
::
string
&
expected_name
,
Color
color
)
{
flatbuffers
::
grpc
::
Message
<
Monster
>
msg
=
mbb
.
ReleaseMessage
<
Monster
>
();
flatbuffers
::
grpc
::
Message
<
Monster
>
msg
=
mbb
.
ReleaseMessage
<
Monster
>
();
const
Monster
*
monster
=
msg
.
GetRoot
();
const
Monster
*
monster
=
msg
.
GetRoot
();
return
(
monster
->
name
()
->
str
()
==
expected_name
)
&&
(
monster
->
color
()
==
color
);
return
(
monster
->
name
()
->
str
()
==
expected_name
)
&&
(
monster
->
color
()
==
color
);
}
}
void
builder_move_assign_after_releaseraw_test
(
flatbuffers
::
grpc
::
MessageBuilder
dst
)
{
void
builder_move_assign_after_releaseraw_test
(
flatbuffers
::
grpc
::
MessageBuilder
dst
)
{
auto
root_offset1
=
populate1
(
dst
);
auto
root_offset1
=
populate1
(
dst
);
dst
.
Finish
(
root_offset1
);
dst
.
Finish
(
root_offset1
);
size_t
size
,
offset
;
size_t
size
,
offset
;
...
@@ -36,12 +41,11 @@ void builder_move_assign_after_releaseraw_test(flatbuffers::grpc::MessageBuilder
...
@@ -36,12 +41,11 @@ void builder_move_assign_after_releaseraw_test(flatbuffers::grpc::MessageBuilder
grpc_slice_unref
(
slice
);
grpc_slice_unref
(
slice
);
}
}
template
<
class
SrcBuilder
>
template
<
class
SrcBuilder
>
struct
BuilderReuseTests
<
flatbuffers
::
grpc
::
MessageBuilder
,
SrcBuilder
>
{
struct
BuilderReuseTests
<
flatbuffers
::
grpc
::
MessageBuilder
,
SrcBuilder
>
{
static
void
builder_reusable_after_release_message_test
(
TestSelector
selector
)
{
static
void
builder_reusable_after_release_message_test
(
if
(
!
selector
.
count
(
REUSABLE_AFTER_RELEASE_MESSAGE
))
{
TestSelector
selector
)
{
return
;
if
(
!
selector
.
count
(
REUSABLE_AFTER_RELEASE_MESSAGE
))
{
return
;
}
}
flatbuffers
::
grpc
::
MessageBuilder
mb
;
flatbuffers
::
grpc
::
MessageBuilder
mb
;
std
::
vector
<
flatbuffers
::
grpc
::
Message
<
Monster
>>
buffers
;
std
::
vector
<
flatbuffers
::
grpc
::
Message
<
Monster
>>
buffers
;
...
@@ -54,12 +58,10 @@ struct BuilderReuseTests<flatbuffers::grpc::MessageBuilder, SrcBuilder> {
...
@@ -54,12 +58,10 @@ struct BuilderReuseTests<flatbuffers::grpc::MessageBuilder, SrcBuilder> {
}
}
static
void
builder_reusable_after_release_test
(
TestSelector
selector
)
{
static
void
builder_reusable_after_release_test
(
TestSelector
selector
)
{
if
(
!
selector
.
count
(
REUSABLE_AFTER_RELEASE
))
{
if
(
!
selector
.
count
(
REUSABLE_AFTER_RELEASE
))
{
return
;
}
return
;
}
// FIXME: Populate-Release loop fails assert(GRPC_SLICE_IS_EMPTY(slice_)) in
SliceAllocator::allocate
// FIXME: Populate-Release loop fails assert(GRPC_SLICE_IS_EMPTY(slice_)) in
// in the second iteration.
//
SliceAllocator::allocate
in the second iteration.
flatbuffers
::
grpc
::
MessageBuilder
mb
;
flatbuffers
::
grpc
::
MessageBuilder
mb
;
std
::
vector
<
flatbuffers
::
DetachedBuffer
>
buffers
;
std
::
vector
<
flatbuffers
::
DetachedBuffer
>
buffers
;
...
@@ -72,9 +74,7 @@ struct BuilderReuseTests<flatbuffers::grpc::MessageBuilder, SrcBuilder> {
...
@@ -72,9 +74,7 @@ struct BuilderReuseTests<flatbuffers::grpc::MessageBuilder, SrcBuilder> {
}
}
static
void
builder_reusable_after_releaseraw_test
(
TestSelector
selector
)
{
static
void
builder_reusable_after_releaseraw_test
(
TestSelector
selector
)
{
if
(
!
selector
.
count
(
REUSABLE_AFTER_RELEASE_RAW
))
{
if
(
!
selector
.
count
(
REUSABLE_AFTER_RELEASE_RAW
))
{
return
;
}
return
;
}
flatbuffers
::
grpc
::
MessageBuilder
mb
;
flatbuffers
::
grpc
::
MessageBuilder
mb
;
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
...
@@ -88,13 +88,13 @@ struct BuilderReuseTests<flatbuffers::grpc::MessageBuilder, SrcBuilder> {
...
@@ -88,13 +88,13 @@ struct BuilderReuseTests<flatbuffers::grpc::MessageBuilder, SrcBuilder> {
}
}
}
}
static
void
builder_reusable_after_release_and_move_assign_test
(
TestSelector
selector
)
{
static
void
builder_reusable_after_release_and_move_assign_test
(
if
(
!
selector
.
count
(
REUSABLE_AFTER_RELEASE_AND_MOVE_ASSIGN
))
{
TestSelector
selector
)
{
return
;
if
(
!
selector
.
count
(
REUSABLE_AFTER_RELEASE_AND_MOVE_ASSIGN
))
{
return
;
}
}
// FIXME: Release-move_assign loop fails assert(p == GRPC_SLICE_START_PTR(slice_))
// FIXME: Release-move_assign loop fails assert(p ==
// in DetachedBuffer destructor after all the iterations
// GRPC_SLICE_START_PTR(slice_)) in DetachedBuffer destructor after all the
// iterations
flatbuffers
::
grpc
::
MessageBuilder
dst
;
flatbuffers
::
grpc
::
MessageBuilder
dst
;
std
::
vector
<
flatbuffers
::
DetachedBuffer
>
buffers
;
std
::
vector
<
flatbuffers
::
DetachedBuffer
>
buffers
;
...
@@ -113,7 +113,8 @@ struct BuilderReuseTests<flatbuffers::grpc::MessageBuilder, SrcBuilder> {
...
@@ -113,7 +113,8 @@ struct BuilderReuseTests<flatbuffers::grpc::MessageBuilder, SrcBuilder> {
}
}
}
}
static
void
builder_reusable_after_release_message_and_move_assign_test
(
TestSelector
selector
)
{
static
void
builder_reusable_after_release_message_and_move_assign_test
(
TestSelector
selector
)
{
if
(
!
selector
.
count
(
REUSABLE_AFTER_RELEASE_MESSAGE_AND_MOVE_ASSIGN
))
{
if
(
!
selector
.
count
(
REUSABLE_AFTER_RELEASE_MESSAGE_AND_MOVE_ASSIGN
))
{
return
;
return
;
}
}
...
@@ -135,10 +136,9 @@ struct BuilderReuseTests<flatbuffers::grpc::MessageBuilder, SrcBuilder> {
...
@@ -135,10 +136,9 @@ struct BuilderReuseTests<flatbuffers::grpc::MessageBuilder, SrcBuilder> {
}
}
}
}
static
void
builder_reusable_after_releaseraw_and_move_assign_test
(
TestSelector
selector
)
{
static
void
builder_reusable_after_releaseraw_and_move_assign_test
(
if
(
!
selector
.
count
(
REUSABLE_AFTER_RELEASE_RAW_AND_MOVE_ASSIGN
))
{
TestSelector
selector
)
{
return
;
if
(
!
selector
.
count
(
REUSABLE_AFTER_RELEASE_RAW_AND_MOVE_ASSIGN
))
{
return
;
}
}
flatbuffers
::
grpc
::
MessageBuilder
dst
;
flatbuffers
::
grpc
::
MessageBuilder
dst
;
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
...
@@ -175,11 +175,11 @@ void slice_allocator_tests() {
...
@@ -175,11 +175,11 @@ void slice_allocator_tests() {
uint8_t
*
buf
=
sa1
.
allocate
(
size
);
uint8_t
*
buf
=
sa1
.
allocate
(
size
);
TEST_ASSERT_FUNC
(
buf
!=
0
);
TEST_ASSERT_FUNC
(
buf
!=
0
);
buf
[
0
]
=
100
;
buf
[
0
]
=
100
;
buf
[
size
-
1
]
=
200
;
buf
[
size
-
1
]
=
200
;
flatbuffers
::
grpc
::
SliceAllocator
sa2
(
std
::
move
(
sa1
));
flatbuffers
::
grpc
::
SliceAllocator
sa2
(
std
::
move
(
sa1
));
// buf should not be deleted after move-construct
// buf should not be deleted after move-construct
TEST_EQ_FUNC
(
buf
[
0
],
100
);
TEST_EQ_FUNC
(
buf
[
0
],
100
);
TEST_EQ_FUNC
(
buf
[
size
-
1
],
200
);
TEST_EQ_FUNC
(
buf
[
size
-
1
],
200
);
// buf is freed here
// buf is freed here
}
}
...
@@ -194,13 +194,16 @@ void slice_allocator_tests() {
...
@@ -194,13 +194,16 @@ void slice_allocator_tests() {
}
}
}
}
/// This function does not populate exactly the first half of the table. But it could.
/// This function does not populate exactly the first half of the table. But it
void
populate_first_half
(
MyGame
::
Example
::
MonsterBuilder
&
wrapper
,
flatbuffers
::
Offset
<
flatbuffers
::
String
>
name_offset
)
{
/// could.
void
populate_first_half
(
MyGame
::
Example
::
MonsterBuilder
&
wrapper
,
flatbuffers
::
Offset
<
flatbuffers
::
String
>
name_offset
)
{
wrapper
.
add_name
(
name_offset
);
wrapper
.
add_name
(
name_offset
);
wrapper
.
add_color
(
m1_color
);
wrapper
.
add_color
(
m1_color
);
}
}
/// This function does not populate exactly the second half of the table. But it could.
/// This function does not populate exactly the second half of the table. But it
/// could.
void
populate_second_half
(
MyGame
::
Example
::
MonsterBuilder
&
wrapper
)
{
void
populate_second_half
(
MyGame
::
Example
::
MonsterBuilder
&
wrapper
)
{
wrapper
.
add_hp
(
77
);
wrapper
.
add_hp
(
77
);
wrapper
.
add_mana
(
88
);
wrapper
.
add_mana
(
88
);
...
@@ -208,83 +211,97 @@ void populate_second_half(MyGame::Example::MonsterBuilder &wrapper) {
...
@@ -208,83 +211,97 @@ void populate_second_half(MyGame::Example::MonsterBuilder &wrapper) {
wrapper
.
add_pos
(
&
vec3
);
wrapper
.
add_pos
(
&
vec3
);
}
}
/// This function is a hack to update the FlatBufferBuilder reference (fbb_) in the MonsterBuilder object.
/// This function is a hack to update the FlatBufferBuilder reference (fbb_) in
/// This function will break if fbb_ is not the first member in MonsterBuilder. In that case, some offset must be added.
/// the MonsterBuilder object. This function will break if fbb_ is not the first
/// This function is used exclusively for testing correctness of move operations between FlatBufferBuilders.
/// member in MonsterBuilder. In that case, some offset must be added. This
/// If MonsterBuilder had a fbb_ pointer, this hack would be unnecessary. That involves a code-generator change though.
/// function is used exclusively for testing correctness of move operations
void
test_only_hack_update_fbb_reference
(
MyGame
::
Example
::
MonsterBuilder
&
monsterBuilder
,
/// between FlatBufferBuilders. If MonsterBuilder had a fbb_ pointer, this hack
flatbuffers
::
grpc
::
MessageBuilder
&
mb
)
{
/// would be unnecessary. That involves a code-generator change though.
void
test_only_hack_update_fbb_reference
(
MyGame
::
Example
::
MonsterBuilder
&
monsterBuilder
,
flatbuffers
::
grpc
::
MessageBuilder
&
mb
)
{
*
reinterpret_cast
<
flatbuffers
::
FlatBufferBuilder
**>
(
&
monsterBuilder
)
=
&
mb
;
*
reinterpret_cast
<
flatbuffers
::
FlatBufferBuilder
**>
(
&
monsterBuilder
)
=
&
mb
;
}
}
/// This test validates correctness of move conversion of FlatBufferBuilder to a MessageBuilder DURING
/// This test validates correctness of move conversion of FlatBufferBuilder to a
/// a table construction. Half of the table is constructed using FlatBufferBuilder and the other half
/// MessageBuilder DURING a table construction. Half of the table is constructed
/// of the table is constructed using a MessageBuilder.
/// using FlatBufferBuilder and the other half of the table is constructed using
/// a MessageBuilder.
void
builder_move_ctor_conversion_before_finish_half_n_half_table_test
()
{
void
builder_move_ctor_conversion_before_finish_half_n_half_table_test
()
{
for
(
size_t
initial_size
=
4
;
initial_size
<=
2048
;
initial_size
*=
2
)
{
for
(
size_t
initial_size
=
4
;
initial_size
<=
2048
;
initial_size
*=
2
)
{
flatbuffers
::
FlatBufferBuilder
fbb
(
initial_size
);
flatbuffers
::
FlatBufferBuilder
fbb
(
initial_size
);
auto
name_offset
=
fbb
.
CreateString
(
m1_name
);
auto
name_offset
=
fbb
.
CreateString
(
m1_name
);
MyGame
::
Example
::
MonsterBuilder
monsterBuilder
(
fbb
);
// starts a table in FlatBufferBuilder
MyGame
::
Example
::
MonsterBuilder
monsterBuilder
(
fbb
);
// starts a table in FlatBufferBuilder
populate_first_half
(
monsterBuilder
,
name_offset
);
populate_first_half
(
monsterBuilder
,
name_offset
);
flatbuffers
::
grpc
::
MessageBuilder
mb
(
std
::
move
(
fbb
));
flatbuffers
::
grpc
::
MessageBuilder
mb
(
std
::
move
(
fbb
));
test_only_hack_update_fbb_reference
(
monsterBuilder
,
mb
);
// hack
test_only_hack_update_fbb_reference
(
monsterBuilder
,
mb
);
// hack
populate_second_half
(
monsterBuilder
);
populate_second_half
(
monsterBuilder
);
mb
.
Finish
(
monsterBuilder
.
Finish
());
// ends the table in MessageBuilder
mb
.
Finish
(
monsterBuilder
.
Finish
());
// ends the table in MessageBuilder
TEST_ASSERT_FUNC
(
release_n_verify
(
mb
,
m1_name
,
m1_color
));
TEST_ASSERT_FUNC
(
release_n_verify
(
mb
,
m1_name
,
m1_color
));
TEST_EQ_FUNC
(
fbb
.
GetSize
(),
0
);
TEST_EQ_FUNC
(
fbb
.
GetSize
(),
0
);
}
}
}
}
/// This test populates a COMPLETE inner table before move conversion and later populates more members in the outer table.
/// This test populates a COMPLETE inner table before move conversion and later
/// populates more members in the outer table.
void
builder_move_ctor_conversion_before_finish_test
()
{
void
builder_move_ctor_conversion_before_finish_test
()
{
for
(
size_t
initial_size
=
4
;
initial_size
<=
2048
;
initial_size
*=
2
)
{
for
(
size_t
initial_size
=
4
;
initial_size
<=
2048
;
initial_size
*=
2
)
{
flatbuffers
::
FlatBufferBuilder
fbb
(
initial_size
);
flatbuffers
::
FlatBufferBuilder
fbb
(
initial_size
);
auto
stat_offset
=
CreateStat
(
fbb
,
fbb
.
CreateString
(
"SomeId"
),
0
,
0
);
auto
stat_offset
=
CreateStat
(
fbb
,
fbb
.
CreateString
(
"SomeId"
),
0
,
0
);
flatbuffers
::
grpc
::
MessageBuilder
mb
(
std
::
move
(
fbb
));
flatbuffers
::
grpc
::
MessageBuilder
mb
(
std
::
move
(
fbb
));
auto
monster_offset
=
CreateMonster
(
mb
,
0
,
150
,
100
,
mb
.
CreateString
(
m1_name
),
0
,
m1_color
,
Any_NONE
,
0
,
0
,
0
,
0
,
0
,
0
,
stat_offset
);
auto
monster_offset
=
CreateMonster
(
mb
,
0
,
150
,
100
,
mb
.
CreateString
(
m1_name
),
0
,
m1_color
,
Any_NONE
,
0
,
0
,
0
,
0
,
0
,
0
,
stat_offset
);
mb
.
Finish
(
monster_offset
);
mb
.
Finish
(
monster_offset
);
TEST_ASSERT_FUNC
(
release_n_verify
(
mb
,
m1_name
,
m1_color
));
TEST_ASSERT_FUNC
(
release_n_verify
(
mb
,
m1_name
,
m1_color
));
TEST_EQ_FUNC
(
fbb
.
GetSize
(),
0
);
TEST_EQ_FUNC
(
fbb
.
GetSize
(),
0
);
}
}
}
}
/// This test validates correctness of move conversion of FlatBufferBuilder to a MessageBuilder DURING
/// This test validates correctness of move conversion of FlatBufferBuilder to a
/// a table construction. Half of the table is constructed using FlatBufferBuilder and the other half
/// MessageBuilder DURING a table construction. Half of the table is constructed
/// of the table is constructed using a MessageBuilder.
/// using FlatBufferBuilder and the other half of the table is constructed using
/// a MessageBuilder.
void
builder_move_assign_conversion_before_finish_half_n_half_table_test
()
{
void
builder_move_assign_conversion_before_finish_half_n_half_table_test
()
{
flatbuffers
::
FlatBufferBuilder
fbb
;
flatbuffers
::
FlatBufferBuilder
fbb
;
flatbuffers
::
grpc
::
MessageBuilder
mb
;
flatbuffers
::
grpc
::
MessageBuilder
mb
;
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
flatbuffers
::
FlatBufferBuilder
fbb
;
flatbuffers
::
FlatBufferBuilder
fbb
;
auto
name_offset
=
fbb
.
CreateString
(
m1_name
);
auto
name_offset
=
fbb
.
CreateString
(
m1_name
);
MyGame
::
Example
::
MonsterBuilder
monsterBuilder
(
fbb
);
// starts a table in FlatBufferBuilder
MyGame
::
Example
::
MonsterBuilder
monsterBuilder
(
fbb
);
// starts a table in FlatBufferBuilder
populate_first_half
(
monsterBuilder
,
name_offset
);
populate_first_half
(
monsterBuilder
,
name_offset
);
mb
=
std
::
move
(
fbb
);
mb
=
std
::
move
(
fbb
);
test_only_hack_update_fbb_reference
(
monsterBuilder
,
mb
);
// hack
test_only_hack_update_fbb_reference
(
monsterBuilder
,
mb
);
// hack
populate_second_half
(
monsterBuilder
);
populate_second_half
(
monsterBuilder
);
mb
.
Finish
(
monsterBuilder
.
Finish
());
// ends the table in MessageBuilder
mb
.
Finish
(
monsterBuilder
.
Finish
());
// ends the table in MessageBuilder
TEST_ASSERT_FUNC
(
release_n_verify
(
mb
,
m1_name
,
m1_color
));
TEST_ASSERT_FUNC
(
release_n_verify
(
mb
,
m1_name
,
m1_color
));
TEST_EQ_FUNC
(
fbb
.
GetSize
(),
0
);
TEST_EQ_FUNC
(
fbb
.
GetSize
(),
0
);
}
}
}
}
/// This test populates a COMPLETE inner table before move conversion and later populates more members in the outer table.
/// This test populates a COMPLETE inner table before move conversion and later
/// populates more members in the outer table.
void
builder_move_assign_conversion_before_finish_test
()
{
void
builder_move_assign_conversion_before_finish_test
()
{
flatbuffers
::
FlatBufferBuilder
fbb
;
flatbuffers
::
FlatBufferBuilder
fbb
;
flatbuffers
::
grpc
::
MessageBuilder
mb
;
flatbuffers
::
grpc
::
MessageBuilder
mb
;
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
auto
stat_offset
=
CreateStat
(
fbb
,
fbb
.
CreateString
(
"SomeId"
),
0
,
0
);
auto
stat_offset
=
CreateStat
(
fbb
,
fbb
.
CreateString
(
"SomeId"
),
0
,
0
);
mb
=
std
::
move
(
fbb
);
mb
=
std
::
move
(
fbb
);
auto
monster_offset
=
CreateMonster
(
mb
,
0
,
150
,
100
,
mb
.
CreateString
(
m1_name
),
0
,
m1_color
,
Any_NONE
,
0
,
0
,
0
,
0
,
0
,
0
,
stat_offset
);
auto
monster_offset
=
CreateMonster
(
mb
,
0
,
150
,
100
,
mb
.
CreateString
(
m1_name
),
0
,
m1_color
,
Any_NONE
,
0
,
0
,
0
,
0
,
0
,
0
,
stat_offset
);
mb
.
Finish
(
monster_offset
);
mb
.
Finish
(
monster_offset
);
TEST_ASSERT_FUNC
(
release_n_verify
(
mb
,
m1_name
,
m1_color
));
TEST_ASSERT_FUNC
(
release_n_verify
(
mb
,
m1_name
,
m1_color
));
TEST_EQ_FUNC
(
fbb
.
GetSize
(),
0
);
TEST_EQ_FUNC
(
fbb
.
GetSize
(),
0
);
}
}
}
}
/// This test populates data, finishes the buffer, and does move conversion after.
/// This test populates data, finishes the buffer, and does move conversion
/// after.
void
builder_move_ctor_conversion_after_finish_test
()
{
void
builder_move_ctor_conversion_after_finish_test
()
{
flatbuffers
::
FlatBufferBuilder
fbb
;
flatbuffers
::
FlatBufferBuilder
fbb
;
fbb
.
Finish
(
populate1
(
fbb
));
fbb
.
Finish
(
populate1
(
fbb
));
...
@@ -293,12 +310,13 @@ void builder_move_ctor_conversion_after_finish_test() {
...
@@ -293,12 +310,13 @@ void builder_move_ctor_conversion_after_finish_test() {
TEST_EQ_FUNC
(
fbb
.
GetSize
(),
0
);
TEST_EQ_FUNC
(
fbb
.
GetSize
(),
0
);
}
}
/// This test populates data, finishes the buffer, and does move conversion after.
/// This test populates data, finishes the buffer, and does move conversion
/// after.
void
builder_move_assign_conversion_after_finish_test
()
{
void
builder_move_assign_conversion_after_finish_test
()
{
flatbuffers
::
FlatBufferBuilder
fbb
;
flatbuffers
::
FlatBufferBuilder
fbb
;
flatbuffers
::
grpc
::
MessageBuilder
mb
;
flatbuffers
::
grpc
::
MessageBuilder
mb
;
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
fbb
.
Finish
(
populate1
(
fbb
));
fbb
.
Finish
(
populate1
(
fbb
));
mb
=
std
::
move
(
fbb
);
mb
=
std
::
move
(
fbb
);
TEST_ASSERT_FUNC
(
release_n_verify
(
mb
,
m1_name
,
m1_color
));
TEST_ASSERT_FUNC
(
release_n_verify
(
mb
,
m1_name
,
m1_color
));
...
@@ -307,15 +325,15 @@ void builder_move_assign_conversion_after_finish_test() {
...
@@ -307,15 +325,15 @@ void builder_move_assign_conversion_after_finish_test() {
}
}
void
message_builder_tests
()
{
void
message_builder_tests
()
{
using
flatbuffers
::
grpc
::
MessageBuilder
;
using
flatbuffers
::
FlatBufferBuilder
;
using
flatbuffers
::
FlatBufferBuilder
;
using
flatbuffers
::
grpc
::
MessageBuilder
;
slice_allocator_tests
();
slice_allocator_tests
();
#ifndef __APPLE__
#ifndef __APPLE__
builder_move_ctor_conversion_before_finish_half_n_half_table_test
();
builder_move_ctor_conversion_before_finish_half_n_half_table_test
();
builder_move_assign_conversion_before_finish_half_n_half_table_test
();
builder_move_assign_conversion_before_finish_half_n_half_table_test
();
#endif // __APPLE__
#endif
// __APPLE__
builder_move_ctor_conversion_before_finish_test
();
builder_move_ctor_conversion_before_finish_test
();
builder_move_assign_conversion_before_finish_test
();
builder_move_assign_conversion_before_finish_test
();
...
@@ -326,15 +344,18 @@ void message_builder_tests() {
...
@@ -326,15 +344,18 @@ void message_builder_tests() {
BuilderTests
<
MessageBuilder
,
FlatBufferBuilder
>::
all_tests
();
BuilderTests
<
MessageBuilder
,
FlatBufferBuilder
>::
all_tests
();
BuilderReuseTestSelector
tests
[
6
]
=
{
BuilderReuseTestSelector
tests
[
6
]
=
{
//REUSABLE_AFTER_RELEASE, // Assertion failed: (GRPC_SLICE_IS_EMPTY(slice_))
// REUSABLE_AFTER_RELEASE, // Assertion failed:
//REUSABLE_AFTER_RELEASE_AND_MOVE_ASSIGN, // Assertion failed: (p == GRPC_SLICE_START_PTR(slice_)
// (GRPC_SLICE_IS_EMPTY(slice_))
// REUSABLE_AFTER_RELEASE_AND_MOVE_ASSIGN, // Assertion failed: (p ==
// GRPC_SLICE_START_PTR(slice_)
REUSABLE_AFTER_RELEASE_RAW
,
REUSABLE_AFTER_RELEASE_RAW
,
REUSABLE_AFTER_RELEASE_MESSAGE
,
REUSABLE_AFTER_RELEASE_MESSAGE
,
REUSABLE_AFTER_RELEASE_MESSAGE_AND_MOVE_ASSIGN
,
REUSABLE_AFTER_RELEASE_MESSAGE_AND_MOVE_ASSIGN
,
REUSABLE_AFTER_RELEASE_RAW_AND_MOVE_ASSIGN
REUSABLE_AFTER_RELEASE_RAW_AND_MOVE_ASSIGN
};
};
BuilderReuseTests
<
MessageBuilder
,
MessageBuilder
>::
run_tests
(
TestSelector
(
tests
,
tests
+
6
));
BuilderReuseTests
<
MessageBuilder
,
MessageBuilder
>::
run_tests
(
BuilderReuseTests
<
MessageBuilder
,
FlatBufferBuilder
>::
run_tests
(
TestSelector
(
tests
,
tests
+
6
));
TestSelector
(
tests
,
tests
+
6
));
BuilderReuseTests
<
MessageBuilder
,
FlatBufferBuilder
>::
run_tests
(
TestSelector
(
tests
,
tests
+
6
));
}
}
include/flatbuffers/reflection.h
View file @
42c08cbc
...
@@ -228,7 +228,7 @@ inline std::string GetAnyVectorElemS(const VectorOfAny *vec,
...
@@ -228,7 +228,7 @@ inline std::string GetAnyVectorElemS(const VectorOfAny *vec,
template
<
typename
T
>
template
<
typename
T
>
T
*
GetAnyVectorElemPointer
(
const
VectorOfAny
*
vec
,
size_t
i
)
{
T
*
GetAnyVectorElemPointer
(
const
VectorOfAny
*
vec
,
size_t
i
)
{
auto
elem_ptr
=
vec
->
Data
()
+
sizeof
(
uoffset_t
)
*
i
;
auto
elem_ptr
=
vec
->
Data
()
+
sizeof
(
uoffset_t
)
*
i
;
return
reinterpret_cast
<
T
*>
(
elem_ptr
+
ReadScalar
<
uoffset_t
>
(
elem_ptr
));
return
reinterpret_cast
<
T
*>
(
elem_ptr
+
ReadScalar
<
uoffset_t
>
(
elem_ptr
));
}
}
// Get the inline-address of a vector element. Useful for Structs (pass Struct
// Get the inline-address of a vector element. Useful for Structs (pass Struct
...
...
samples/sample_bfbs.cpp
View file @
42c08cbc
...
@@ -16,8 +16,7 @@
...
@@ -16,8 +16,7 @@
#include "flatbuffers/idl.h"
#include "flatbuffers/idl.h"
#include "flatbuffers/util.h"
#include "flatbuffers/util.h"
#include "monster_generated.h" // Already includes "flatbuffers/flatbuffers.h".
#include "monster_generated.h" // Already includes "flatbuffers/flatbuffers.h".
using
namespace
MyGame
::
Sample
;
using
namespace
MyGame
::
Sample
;
...
@@ -30,7 +29,8 @@ int main(int /*argc*/, const char * /*argv*/[]) {
...
@@ -30,7 +29,8 @@ int main(int /*argc*/, const char * /*argv*/[]) {
std
::
string
bfbs_file
;
std
::
string
bfbs_file
;
bool
ok
=
bool
ok
=
flatbuffers
::
LoadFile
(
"tests/monster_test.fbs"
,
false
,
&
schema_file
)
&&
flatbuffers
::
LoadFile
(
"tests/monster_test.fbs"
,
false
,
&
schema_file
)
&&
flatbuffers
::
LoadFile
(
"tests/monsterdata_test.golden"
,
false
,
&
json_file
)
&&
flatbuffers
::
LoadFile
(
"tests/monsterdata_test.golden"
,
false
,
&
json_file
)
&&
flatbuffers
::
LoadFile
(
"tests/monster_test.bfbs"
,
true
,
&
bfbs_file
);
flatbuffers
::
LoadFile
(
"tests/monster_test.bfbs"
,
true
,
&
bfbs_file
);
if
(
!
ok
)
{
if
(
!
ok
)
{
printf
(
"couldn't load files!
\n
"
);
printf
(
"couldn't load files!
\n
"
);
...
...
samples/sample_binary.cpp
View file @
42c08cbc
...
@@ -20,7 +20,7 @@ using namespace MyGame::Sample;
...
@@ -20,7 +20,7 @@ using namespace MyGame::Sample;
// Example how to use FlatBuffers to create and read binary buffers.
// Example how to use FlatBuffers to create and read binary buffers.
int
main
(
int
/*argc*/
,
const
char
*
/*argv*/
[])
{
int
main
(
int
/*argc*/
,
const
char
*
/*argv*/
[])
{
// Build up a serialized buffer algorithmically:
// Build up a serialized buffer algorithmically:
flatbuffers
::
FlatBufferBuilder
builder
;
flatbuffers
::
FlatBufferBuilder
builder
;
...
...
samples/sample_text.cpp
View file @
42c08cbc
...
@@ -16,14 +16,13 @@
...
@@ -16,14 +16,13 @@
#include "flatbuffers/idl.h"
#include "flatbuffers/idl.h"
#include "flatbuffers/util.h"
#include "flatbuffers/util.h"
#include "monster_generated.h" // Already includes "flatbuffers/flatbuffers.h".
#include "monster_generated.h" // Already includes "flatbuffers/flatbuffers.h".
using
namespace
MyGame
::
Sample
;
using
namespace
MyGame
::
Sample
;
// This is an example of parsing text straight into a buffer and then
// This is an example of parsing text straight into a buffer and then
// generating flatbuffer (JSON) text from the buffer.
// generating flatbuffer (JSON) text from the buffer.
int
main
(
int
/*argc*/
,
const
char
*
/*argv*/
[])
{
int
main
(
int
/*argc*/
,
const
char
*
/*argv*/
[])
{
// load FlatBuffer schema (.fbs) and JSON from disk
// load FlatBuffer schema (.fbs) and JSON from disk
std
::
string
schemafile
;
std
::
string
schemafile
;
std
::
string
jsonfile
;
std
::
string
jsonfile
;
...
...
src/idl_gen_js_ts.cpp
View file @
42c08cbc
...
@@ -1014,7 +1014,8 @@ class JsTsGenerator : public BaseGenerator {
...
@@ -1014,7 +1014,8 @@ class JsTsGenerator : public BaseGenerator {
}
}
// Adds the mutable scalar value to the output
// Adds the mutable scalar value to the output
if
(
IsScalar
(
field
.
value
.
type
.
base_type
)
&&
parser
.
opts
.
mutable_buffer
&&
!
IsUnion
(
field
.
value
.
type
))
{
if
(
IsScalar
(
field
.
value
.
type
.
base_type
)
&&
parser
.
opts
.
mutable_buffer
&&
!
IsUnion
(
field
.
value
.
type
))
{
std
::
string
annotations
=
GenTypeAnnotation
(
std
::
string
annotations
=
GenTypeAnnotation
(
kParam
,
GenTypeName
(
field
.
value
.
type
,
true
),
"value"
);
kParam
,
GenTypeName
(
field
.
value
.
type
,
true
),
"value"
);
GenDocComment
(
GenDocComment
(
...
...
tests/test.cpp
View file @
42c08cbc
...
@@ -2308,7 +2308,6 @@ void InvalidNestedFlatbufferTest() {
...
@@ -2308,7 +2308,6 @@ void InvalidNestedFlatbufferTest() {
TEST_EQ
(
parser1
.
Parse
(
"{ name:
\"
Bender
\"
, testnestedflatbuffer: { name: "
TEST_EQ
(
parser1
.
Parse
(
"{ name:
\"
Bender
\"
, testnestedflatbuffer: { name: "
"
\"
Leela
\"
, color:
\"
nonexistent
\"
}}"
),
"
\"
Leela
\"
, color:
\"
nonexistent
\"
}}"
),
false
);
false
);
// Check that Parser is destroyed correctly after parsing invalid json
}
}
void
UnionVectorTest
()
{
void
UnionVectorTest
()
{
...
...
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