Skip to content

Commit 03d1125

Browse files
authored
Fix to_string method for structs with enumeration fields (#214)
Signed-off-by: Christian Vetter <christian.vetter@here.com>
1 parent 956d20a commit 03d1125

4 files changed

Lines changed: 19 additions & 10 deletions

File tree

‎flatdata-cpp/test/EnumTest.cpp‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ TEST_CASE( "Struct with enum", "[Enum]" )
4646
REQUIRE( b == Enum1::VALUE_1 );
4747
Enum1 c = reader.c;
4848
REQUIRE( c == Enum1::VALUE_3 );
49+
50+
REQUIRE( reader.to_string( ) == R"(StructWithEnum {
51+
a : 493995,
52+
b : Enum1::VALUE_1,
53+
c : Enum1::VALUE_3,
54+
})" );
4955
}
5056

5157
TEST_CASE( "Struct with signed enum", "[Enum]" )

‎flatdata-generator/flatdata/generator/generators/__init__.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
from flatdata.generator.tree.nodes.archive import Archive
1313
from flatdata.generator.tree.nodes.trivial import Structure, Enumeration, Constant, Namespace
14-
from flatdata.generator.tree.nodes.references import InvalidValueReference
14+
from flatdata.generator.tree.nodes.references import InvalidValueReference, EnumerationReference
1515
from flatdata.generator.tree.nodes.resources import ResourceBase, BoundResource, Archive as \
1616
ArchiveResource, Vector, Multivector, Instance, RawData
1717
from flatdata.generator.tree.syntax_tree import SyntaxTree
@@ -45,6 +45,7 @@ def render(self, tree):
4545
env.filters['is_archive_resource'] = lambda n: isinstance(
4646
n, ArchiveResource)
4747
env.filters['is_structure'] = lambda n: isinstance(n, Structure)
48+
env.filters['is_enumeration_reference'] = lambda n: isinstance(n, EnumerationReference)
4849
env.filters['is_enumeration'] = lambda n: isinstance(n, Enumeration)
4950
env.filters['is_constant'] = lambda n: isinstance(n, Constant)
5051
env.filters['is_namespace'] = lambda n: isinstance(n, Namespace)

‎flatdata-generator/flatdata/generator/templates/cpp/structure.jinja2‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,9 @@ std::string {{ template_spec }}::to_string( ) const
160160
std::ostringstream ss;
161161
ss << "{{ struct.name }} {" << std::endl <<
162162
{% for member in struct.fields %}
163-
{% if member.invalid_value %}
163+
{% if member.type_reference | is_enumeration_reference %}
164+
" {{ member.name }} : " << {{ member.type_reference.node.parent | cpp_base_type }}::to_string( {{ member.name }} ) << "," << std::endl
165+
{% elif member.invalid_value %}
164166
" {{ member.name }} : " << +*{{ member.name }} << "," << std::endl
165167
{% else %}
166168
" {{ member.name }} : " << +{{ member.name }} << "," << std::endl

‎flatdata-generator/tests/generators/cpp_expectations/enums/structs.h‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,7 @@ std::string StructEnumI8Template< Member >::to_string( ) const
673673
{
674674
std::ostringstream ss;
675675
ss << "StructEnumI8 {" << std::endl <<
676-
" f : " << +f << "," << std::endl
676+
" f : " << n::to_string( f ) << "," << std::endl
677677
<< "}"
678678
;
679679
return ss.str( );
@@ -814,7 +814,7 @@ std::string StructEnumU8Template< Member >::to_string( ) const
814814
{
815815
std::ostringstream ss;
816816
ss << "StructEnumU8 {" << std::endl <<
817-
" f : " << +f << "," << std::endl
817+
" f : " << n::to_string( f ) << "," << std::endl
818818
<< "}"
819819
;
820820
return ss.str( );
@@ -955,7 +955,7 @@ std::string StructEnumI16Template< Member >::to_string( ) const
955955
{
956956
std::ostringstream ss;
957957
ss << "StructEnumI16 {" << std::endl <<
958-
" f : " << +f << "," << std::endl
958+
" f : " << n::to_string( f ) << "," << std::endl
959959
<< "}"
960960
;
961961
return ss.str( );
@@ -1096,7 +1096,7 @@ std::string StructEnumU16Template< Member >::to_string( ) const
10961096
{
10971097
std::ostringstream ss;
10981098
ss << "StructEnumU16 {" << std::endl <<
1099-
" f : " << +f << "," << std::endl
1099+
" f : " << n::to_string( f ) << "," << std::endl
11001100
<< "}"
11011101
;
11021102
return ss.str( );
@@ -1237,7 +1237,7 @@ std::string StructEnumI32Template< Member >::to_string( ) const
12371237
{
12381238
std::ostringstream ss;
12391239
ss << "StructEnumI32 {" << std::endl <<
1240-
" f : " << +f << "," << std::endl
1240+
" f : " << n::to_string( f ) << "," << std::endl
12411241
<< "}"
12421242
;
12431243
return ss.str( );
@@ -1378,7 +1378,7 @@ std::string StructEnumU32Template< Member >::to_string( ) const
13781378
{
13791379
std::ostringstream ss;
13801380
ss << "StructEnumU32 {" << std::endl <<
1381-
" f : " << +f << "," << std::endl
1381+
" f : " << n::to_string( f ) << "," << std::endl
13821382
<< "}"
13831383
;
13841384
return ss.str( );
@@ -1519,7 +1519,7 @@ std::string StructEnumI64Template< Member >::to_string( ) const
15191519
{
15201520
std::ostringstream ss;
15211521
ss << "StructEnumI64 {" << std::endl <<
1522-
" f : " << +f << "," << std::endl
1522+
" f : " << n::to_string( f ) << "," << std::endl
15231523
<< "}"
15241524
;
15251525
return ss.str( );
@@ -1660,7 +1660,7 @@ std::string StructEnumU64Template< Member >::to_string( ) const
16601660
{
16611661
std::ostringstream ss;
16621662
ss << "StructEnumU64 {" << std::endl <<
1663-
" f : " << +f << "," << std::endl
1663+
" f : " << n::to_string( f ) << "," << std::endl
16641664
<< "}"
16651665
;
16661666
return ss.str( );

0 commit comments

Comments
 (0)