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
bb223da2
Commit
bb223da2
authored
Feb 26, 2017
by
Louis-Paul CORDIER
Committed by
Wouter van Oortmerssen
Feb 26, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
C++ generator: Pre-allocating std::vector in UnPack methods. (#4187)
parent
17c5f89d
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
12 additions
and
11 deletions
+12
-11
monster_generated.h
samples/monster_generated.h
+2
-2
idl_gen_cpp.cpp
src/idl_gen_cpp.cpp
+3
-2
monster_test_generated.h
tests/monster_test_generated.h
+7
-7
No files found.
samples/monster_generated.h
View file @
bb223da2
...
@@ -437,9 +437,9 @@ inline void Monster::UnPackTo(MonsterT *_o, const flatbuffers::resolver_function
...
@@ -437,9 +437,9 @@ inline void Monster::UnPackTo(MonsterT *_o, const flatbuffers::resolver_function
{
auto
_e
=
mana
();
_o
->
mana
=
_e
;
};
{
auto
_e
=
mana
();
_o
->
mana
=
_e
;
};
{
auto
_e
=
hp
();
_o
->
hp
=
_e
;
};
{
auto
_e
=
hp
();
_o
->
hp
=
_e
;
};
{
auto
_e
=
name
();
if
(
_e
)
_o
->
name
=
_e
->
str
();
};
{
auto
_e
=
name
();
if
(
_e
)
_o
->
name
=
_e
->
str
();
};
{
auto
_e
=
inventory
();
if
(
_e
)
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
inventory
.
push_back
(
_e
->
Get
(
_i
));
}
};
{
auto
_e
=
inventory
();
if
(
_e
)
{
_o
->
inventory
.
resize
(
_e
->
size
());
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
inventory
[
_i
]
=
_e
->
Get
(
_i
);
}
}
};
{
auto
_e
=
color
();
_o
->
color
=
_e
;
};
{
auto
_e
=
color
();
_o
->
color
=
_e
;
};
{
auto
_e
=
weapons
();
if
(
_e
)
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
weapons
.
push_back
(
std
::
unique_ptr
<
WeaponT
>
(
_e
->
Get
(
_i
)
->
UnPack
(
_resolver
)));
}
};
{
auto
_e
=
weapons
();
if
(
_e
)
{
_o
->
weapons
.
resize
(
_e
->
size
());
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
weapons
[
_i
]
=
std
::
unique_ptr
<
WeaponT
>
(
_e
->
Get
(
_i
)
->
UnPack
(
_resolver
));
}
}
};
{
auto
_e
=
equipped_type
();
_o
->
equipped
.
type
=
_e
;
};
{
auto
_e
=
equipped_type
();
_o
->
equipped
.
type
=
_e
;
};
{
auto
_e
=
equipped
();
if
(
_e
)
_o
->
equipped
.
table
=
EquipmentUnion
::
UnPack
(
_e
,
equipped_type
(),
_resolver
);
};
{
auto
_e
=
equipped
();
if
(
_e
)
_o
->
equipped
.
table
=
EquipmentUnion
::
UnPack
(
_e
,
equipped_type
(),
_resolver
);
};
}
}
...
...
src/idl_gen_cpp.cpp
View file @
bb223da2
...
@@ -1509,12 +1509,13 @@ class CppGenerator : public BaseGenerator {
...
@@ -1509,12 +1509,13 @@ class CppGenerator : public BaseGenerator {
// for (uoffset_t i = 0; i < _e->size(); ++i) {
// for (uoffset_t i = 0; i < _e->size(); ++i) {
// _o->field.push_back(_e->Get(_i));
// _o->field.push_back(_e->Get(_i));
// }
// }
code
+=
"{ _o->"
+
field
.
name
+
".resize(_e->size()); "
;
code
+=
"for (flatbuffers::uoffset_t _i = 0;"
;
code
+=
"for (flatbuffers::uoffset_t _i = 0;"
;
code
+=
" _i < _e->size(); _i++) { "
;
code
+=
" _i < _e->size(); _i++) { "
;
code
+=
"_o->"
+
field
.
name
+
"
.push_back(
"
;
code
+=
"_o->"
+
field
.
name
+
"
[_i] =
"
;
code
+=
GenUnpackVal
(
field
.
value
.
type
.
VectorType
(),
code
+=
GenUnpackVal
(
field
.
value
.
type
.
VectorType
(),
indexing
,
true
,
field
);
indexing
,
true
,
field
);
code
+=
"
);
}"
;
code
+=
"
; }
}"
;
break
;
break
;
}
}
case
BASE_TYPE_UTYPE
:
{
case
BASE_TYPE_UTYPE
:
{
...
...
tests/monster_test_generated.h
View file @
bb223da2
...
@@ -1110,15 +1110,15 @@ inline void Monster::UnPackTo(MonsterT *_o, const flatbuffers::resolver_function
...
@@ -1110,15 +1110,15 @@ inline void Monster::UnPackTo(MonsterT *_o, const flatbuffers::resolver_function
{
auto
_e
=
mana
();
_o
->
mana
=
_e
;
};
{
auto
_e
=
mana
();
_o
->
mana
=
_e
;
};
{
auto
_e
=
hp
();
_o
->
hp
=
_e
;
};
{
auto
_e
=
hp
();
_o
->
hp
=
_e
;
};
{
auto
_e
=
name
();
if
(
_e
)
_o
->
name
=
_e
->
str
();
};
{
auto
_e
=
name
();
if
(
_e
)
_o
->
name
=
_e
->
str
();
};
{
auto
_e
=
inventory
();
if
(
_e
)
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
inventory
.
push_back
(
_e
->
Get
(
_i
));
}
};
{
auto
_e
=
inventory
();
if
(
_e
)
{
_o
->
inventory
.
resize
(
_e
->
size
());
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
inventory
[
_i
]
=
_e
->
Get
(
_i
);
}
}
};
{
auto
_e
=
color
();
_o
->
color
=
_e
;
};
{
auto
_e
=
color
();
_o
->
color
=
_e
;
};
{
auto
_e
=
test_type
();
_o
->
test
.
type
=
_e
;
};
{
auto
_e
=
test_type
();
_o
->
test
.
type
=
_e
;
};
{
auto
_e
=
test
();
if
(
_e
)
_o
->
test
.
table
=
AnyUnion
::
UnPack
(
_e
,
test_type
(),
_resolver
);
};
{
auto
_e
=
test
();
if
(
_e
)
_o
->
test
.
table
=
AnyUnion
::
UnPack
(
_e
,
test_type
(),
_resolver
);
};
{
auto
_e
=
test4
();
if
(
_e
)
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
test4
.
push_back
(
*
_e
->
Get
(
_i
));
}
};
{
auto
_e
=
test4
();
if
(
_e
)
{
_o
->
test4
.
resize
(
_e
->
size
());
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
test4
[
_i
]
=
*
_e
->
Get
(
_i
);
}
}
};
{
auto
_e
=
testarrayofstring
();
if
(
_e
)
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
testarrayofstring
.
push_back
(
_e
->
Get
(
_i
)
->
str
());
}
};
{
auto
_e
=
testarrayofstring
();
if
(
_e
)
{
_o
->
testarrayofstring
.
resize
(
_e
->
size
());
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
testarrayofstring
[
_i
]
=
_e
->
Get
(
_i
)
->
str
();
}
}
};
{
auto
_e
=
testarrayoftables
();
if
(
_e
)
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
testarrayoftables
.
push_back
(
std
::
unique_ptr
<
MonsterT
>
(
_e
->
Get
(
_i
)
->
UnPack
(
_resolver
)));
}
};
{
auto
_e
=
testarrayoftables
();
if
(
_e
)
{
_o
->
testarrayoftables
.
resize
(
_e
->
size
());
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
testarrayoftables
[
_i
]
=
std
::
unique_ptr
<
MonsterT
>
(
_e
->
Get
(
_i
)
->
UnPack
(
_resolver
));
}
}
};
{
auto
_e
=
enemy
();
if
(
_e
)
_o
->
enemy
=
std
::
unique_ptr
<
MonsterT
>
(
_e
->
UnPack
(
_resolver
));
};
{
auto
_e
=
enemy
();
if
(
_e
)
_o
->
enemy
=
std
::
unique_ptr
<
MonsterT
>
(
_e
->
UnPack
(
_resolver
));
};
{
auto
_e
=
testnestedflatbuffer
();
if
(
_e
)
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
testnestedflatbuffer
.
push_back
(
_e
->
Get
(
_i
));
}
};
{
auto
_e
=
testnestedflatbuffer
();
if
(
_e
)
{
_o
->
testnestedflatbuffer
.
resize
(
_e
->
size
());
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
testnestedflatbuffer
[
_i
]
=
_e
->
Get
(
_i
);
}
}
};
{
auto
_e
=
testempty
();
if
(
_e
)
_o
->
testempty
=
std
::
unique_ptr
<
StatT
>
(
_e
->
UnPack
(
_resolver
));
};
{
auto
_e
=
testempty
();
if
(
_e
)
_o
->
testempty
=
std
::
unique_ptr
<
StatT
>
(
_e
->
UnPack
(
_resolver
));
};
{
auto
_e
=
testbool
();
_o
->
testbool
=
_e
;
};
{
auto
_e
=
testbool
();
_o
->
testbool
=
_e
;
};
{
auto
_e
=
testhashs32_fnv1
();
_o
->
testhashs32_fnv1
=
_e
;
};
{
auto
_e
=
testhashs32_fnv1
();
_o
->
testhashs32_fnv1
=
_e
;
};
...
@@ -1129,11 +1129,11 @@ inline void Monster::UnPackTo(MonsterT *_o, const flatbuffers::resolver_function
...
@@ -1129,11 +1129,11 @@ inline void Monster::UnPackTo(MonsterT *_o, const flatbuffers::resolver_function
{
auto
_e
=
testhashu32_fnv1a
();
if
(
_resolver
)
(
*
_resolver
)(
reinterpret_cast
<
void
**>
(
&
_o
->
testhashu32_fnv1a
),
static_cast
<
flatbuffers
::
hash_value_t
>
(
_e
));
else
_o
->
testhashu32_fnv1a
=
nullptr
;
};
{
auto
_e
=
testhashu32_fnv1a
();
if
(
_resolver
)
(
*
_resolver
)(
reinterpret_cast
<
void
**>
(
&
_o
->
testhashu32_fnv1a
),
static_cast
<
flatbuffers
::
hash_value_t
>
(
_e
));
else
_o
->
testhashu32_fnv1a
=
nullptr
;
};
{
auto
_e
=
testhashs64_fnv1a
();
_o
->
testhashs64_fnv1a
=
_e
;
};
{
auto
_e
=
testhashs64_fnv1a
();
_o
->
testhashs64_fnv1a
=
_e
;
};
{
auto
_e
=
testhashu64_fnv1a
();
_o
->
testhashu64_fnv1a
=
_e
;
};
{
auto
_e
=
testhashu64_fnv1a
();
_o
->
testhashu64_fnv1a
=
_e
;
};
{
auto
_e
=
testarrayofbools
();
if
(
_e
)
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
testarrayofbools
.
push_back
(
_e
->
Get
(
_i
)
!=
0
);
}
};
{
auto
_e
=
testarrayofbools
();
if
(
_e
)
{
_o
->
testarrayofbools
.
resize
(
_e
->
size
());
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
testarrayofbools
[
_i
]
=
_e
->
Get
(
_i
)
!=
0
;
}
}
};
{
auto
_e
=
testf
();
_o
->
testf
=
_e
;
};
{
auto
_e
=
testf
();
_o
->
testf
=
_e
;
};
{
auto
_e
=
testf2
();
_o
->
testf2
=
_e
;
};
{
auto
_e
=
testf2
();
_o
->
testf2
=
_e
;
};
{
auto
_e
=
testf3
();
_o
->
testf3
=
_e
;
};
{
auto
_e
=
testf3
();
_o
->
testf3
=
_e
;
};
{
auto
_e
=
testarrayofstring2
();
if
(
_e
)
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
testarrayofstring2
.
push_back
(
_e
->
Get
(
_i
)
->
str
());
}
};
{
auto
_e
=
testarrayofstring2
();
if
(
_e
)
{
_o
->
testarrayofstring2
.
resize
(
_e
->
size
());
for
(
flatbuffers
::
uoffset_t
_i
=
0
;
_i
<
_e
->
size
();
_i
++
)
{
_o
->
testarrayofstring2
[
_i
]
=
_e
->
Get
(
_i
)
->
str
();
}
}
};
}
}
inline
flatbuffers
::
Offset
<
Monster
>
Monster
::
Pack
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
MonsterT
*
_o
,
const
flatbuffers
::
rehasher_function_t
*
_rehasher
)
{
inline
flatbuffers
::
Offset
<
Monster
>
Monster
::
Pack
(
flatbuffers
::
FlatBufferBuilder
&
_fbb
,
const
MonsterT
*
_o
,
const
flatbuffers
::
rehasher_function_t
*
_rehasher
)
{
...
...
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