Skip to content

Commit d796c8c

Browse files
Optimizations for classes with many fields; #168 (#171)
1 parent c36f8c6 commit d796c8c

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

include/rfl/internal/get_field_names.hpp

+7
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,13 @@ auto concat_literals(const Head& _head, const Tail&... _tail) {
119119
return (wrap_literal(_head) + ... + wrap_literal(_tail)).literal_;
120120
}
121121

122+
// Special case - the struct does not contain rfl::Flatten.
123+
template <StringLiteral _head, StringLiteral... _tail>
124+
auto concat_literals(const rfl::Literal<_head>&,
125+
const rfl::Literal<_tail>&...) {
126+
return rfl::Literal<_head, _tail...>::template from_value<0>();
127+
}
128+
122129
inline auto concat_literals() { return rfl::Literal<>(); }
123130

124131
#ifdef __clang__

tests/json/test_many_fields.cpp

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
#include <rfl.hpp>
2+
#include <rfl/json.hpp>
3+
#include <string>
4+
5+
#include "write_and_read.hpp"
6+
7+
namespace test_many_fields {
8+
9+
class ManyFields {
10+
public:
11+
double dummy1 = 0;
12+
double dummy2 = 0;
13+
double dummy3 = 0;
14+
double dummy4 = 0;
15+
double dummy5 = 0;
16+
double dummy6 = 0;
17+
double dummy7 = 0;
18+
double dummy8 = 0;
19+
double dummy9 = 0;
20+
double dummy10 = 0;
21+
double dummy11 = 0;
22+
double dummy12 = 0;
23+
double dummy13 = 0;
24+
double dummy14 = 0;
25+
double dummy15 = 0;
26+
double dummy16 = 0;
27+
double dummy17 = 0;
28+
double dummy18 = 0;
29+
double dummy19 = 0;
30+
double dummy20 = 0;
31+
double dummy21 = 0;
32+
double dummy22 = 0;
33+
double dummy23 = 0;
34+
double dummy24 = 0;
35+
double dummy25 = 0;
36+
double dummy26 = 0;
37+
double dummy27 = 0;
38+
double dummy28 = 0;
39+
double dummy29 = 0;
40+
double dummy30 = 0;
41+
double dummy31 = 0;
42+
double dummy32 = 0;
43+
double dummy33 = 0;
44+
double dummy34 = 0;
45+
double dummy35 = 0;
46+
double dummy36 = 0;
47+
double dummy37 = 0;
48+
double dummy38 = 0;
49+
double dummy39 = 0;
50+
double dummy40 = 0;
51+
double dummy41 = 0;
52+
double dummy42 = 0;
53+
double dummy43 = 0;
54+
double dummy44 = 0;
55+
double dummy45 = 0;
56+
double dummy46 = 0;
57+
double dummy47 = 0;
58+
double dummy48 = 0;
59+
double dummy49 = 0;
60+
double dummy50 = 0;
61+
double dummy51 = 0;
62+
double dummy52 = 0;
63+
double dummy53 = 0;
64+
double dummy54 = 0;
65+
double dummy55 = 0;
66+
double dummy56 = 0;
67+
double dummy57 = 0;
68+
double dummy58 = 0;
69+
double dummy59 = 0;
70+
double dummy60 = 0;
71+
double dummy61 = 0;
72+
double dummy62 = 0;
73+
double dummy63 = 0;
74+
double dummy64 = 0;
75+
double dummy65 = 0;
76+
double dummy66 = 0;
77+
double dummy67 = 0;
78+
double dummy68 = 0;
79+
double dummy69 = 0;
80+
double dummy70 = 0;
81+
};
82+
83+
TEST(json, test_many_fields) {
84+
ManyFields mf{};
85+
86+
write_and_read(
87+
mf,
88+
R"({"dummy1":0.0,"dummy2":0.0,"dummy3":0.0,"dummy4":0.0,"dummy5":0.0,"dummy6":0.0,"dummy7":0.0,"dummy8":0.0,"dummy9":0.0,"dummy10":0.0,"dummy11":0.0,"dummy12":0.0,"dummy13":0.0,"dummy14":0.0,"dummy15":0.0,"dummy16":0.0,"dummy17":0.0,"dummy18":0.0,"dummy19":0.0,"dummy20":0.0,"dummy21":0.0,"dummy22":0.0,"dummy23":0.0,"dummy24":0.0,"dummy25":0.0,"dummy26":0.0,"dummy27":0.0,"dummy28":0.0,"dummy29":0.0,"dummy30":0.0,"dummy31":0.0,"dummy32":0.0,"dummy33":0.0,"dummy34":0.0,"dummy35":0.0,"dummy36":0.0,"dummy37":0.0,"dummy38":0.0,"dummy39":0.0,"dummy40":0.0,"dummy41":0.0,"dummy42":0.0,"dummy43":0.0,"dummy44":0.0,"dummy45":0.0,"dummy46":0.0,"dummy47":0.0,"dummy48":0.0,"dummy49":0.0,"dummy50":0.0,"dummy51":0.0,"dummy52":0.0,"dummy53":0.0,"dummy54":0.0,"dummy55":0.0,"dummy56":0.0,"dummy57":0.0,"dummy58":0.0,"dummy59":0.0,"dummy60":0.0,"dummy61":0.0,"dummy62":0.0,"dummy63":0.0,"dummy64":0.0,"dummy65":0.0,"dummy66":0.0,"dummy67":0.0,"dummy68":0.0,"dummy69":0.0,"dummy70":0.0})");
89+
}
90+
91+
} // namespace test_many_fields

0 commit comments

Comments
 (0)