FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
flatbuffers/samples/sample_binary.cpp at master · google/flatbuffers · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
google
/
flatbuffers
Public
Notifications
You must be signed in to change notification settings
Fork
3.6k
Star
26.4k
Code
Issues
106
Pull requests
165
Discussions
Actions
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Discussions
Actions
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
flatbuffers
/
samples
/
sample_binary.cpp
Copy path
More file actions
More file actions
Latest commit
History
History
History
104 lines (81 loc) · 3.77 KB
Breadcrumbs
flatbuffers
/
samples
/
sample_binary.cpp
Copy path
File metadata and controls
104 lines (81 loc) · 3.77 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
* Copyright 2015 Google Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#
include
"
monster_generated.h
"
//
Already includes "flatbuffers/flatbuffers.h".
using
namespace
MyGame
::Sample
;
//
Example how to use FlatBuffers to create and read binary buffers.
int
main
(
int
/*
argc
*/
,
const
char
*
/*
argv
*/
[]) {
//
Build up a serialized buffer algorithmically:
flatbuffers::FlatBufferBuilder builder;
//
First, lets serialize some weapons for the Monster: A 'sword' and an 'axe'.
auto
weapon_one_name = builder.
CreateString
(
"
Sword
"
);
short
weapon_one_damage =
3
;
auto
weapon_two_name = builder.
CreateString
(
"
Axe
"
);
short
weapon_two_damage =
5
;
//
Use the `CreateWeapon` shortcut to create Weapons with all fields set.
auto
sword =
CreateWeapon
(builder, weapon_one_name, weapon_one_damage);
auto
axe =
CreateWeapon
(builder, weapon_two_name, weapon_two_damage);
//
Create a FlatBuffer's `vector` from the `std::vector`.
std::vector<flatbuffers::Offset<Weapon>> weapons_vector;
weapons_vector.
push_back
(sword);
weapons_vector.
push_back
(axe);
auto
weapons = builder.
CreateVector
(weapons_vector);
//
Second, serialize the rest of the objects needed by the Monster.
auto
position =
Vec3
(
1
.
0f
,
2
.
0f
,
3
.
0f
);
auto
name = builder.
CreateString
(
"
MyMonster
"
);
unsigned
char
inv_data[] = {
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
};
auto
inventory = builder.
CreateVector
(inv_data,
10
);
//
Shortcut for creating monster with all fields set:
auto
orc =
CreateMonster
(builder, &position,
150
,
80
, name, inventory,
Color_Red, weapons, Equipment_Weapon, axe.
Union
());
builder.
Finish
(orc);
//
Serialize the root of the object.
//
We now have a FlatBuffer we can store on disk or send over a network.
//
** file/network code goes here :) **
//
access builder.GetBufferPointer() for builder.GetSize() bytes
//
Instead, we're going to access it right away (as if we just received it).
//
Get access to the root:
auto
monster =
GetMonster
(builder.
GetBufferPointer
());
//
Get and test some scalar types from the FlatBuffer.
assert
(monster->
hp
() ==
80
);
assert
(monster->
mana
() ==
150
);
//
default
assert
(monster->
name
()->
str
() ==
"
MyMonster
"
);
//
Get and test a field of the FlatBuffer's `struct`.
auto
pos = monster->
pos
();
assert
(pos);
assert
(pos->
z
() ==
3
.
0f
);
(
void
)pos;
//
Get a test an element from the `inventory` FlatBuffer's `vector`.
auto
inv = monster->
inventory
();
assert
(inv);
assert
(inv->
Get
(
9
) ==
9
);
(
void
)inv;
//
Get and test the `weapons` FlatBuffers's `vector`.
std::string expected_weapon_names[] = {
"
Sword
"
,
"
Axe
"
};
short
expected_weapon_damages[] = {
3
,
5
};
auto
weps = monster->
weapons
();
for
(
unsigned
int
i =
0
; i < weps->
size
(); i++) {
assert
(weps->
Get
(i)->
name
()->
str
() == expected_weapon_names[i]);
assert
(weps->
Get
(i)->
damage
() == expected_weapon_damages[i]);
}
(
void
)expected_weapon_names;
(
void
)expected_weapon_damages;
//
Get and test the `Equipment` union (`equipped` field).
assert
(monster->
equipped_type
() == Equipment_Weapon);
auto
equipped =
static_cast
<
const
Weapon*>(monster->
equipped
());
assert
(equipped->
name
()->
str
() ==
"
Axe
"
);
assert
(equipped->
damage
() ==
5
);
(
void
)equipped;
printf
(
"
The FlatBuffer was successfully created and verified!
\n
"
);
}
Back
|
FazBrowse Home
|
New Git URL