Skip to content

Commit e4caaa4

Browse files
committed
fix: array of user defined types
1 parent 91647ba commit e4caaa4

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

src/rk_generate

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,13 +162,21 @@ typedef struct {{
162162
encode_lines = []
163163
decode_lines = []
164164
for f in self.fields:
165-
if f.type == 'uint8_t' and f.array:
165+
if f.type == 'uint8_t' and f.array and f.size <= 0:
166166
encode_lines.append(f' node["{f.name}"] = to_uint16_vector(rhs.{f.name});')
167167
decode_lines.append(f' rhs.{f.name} = from_uint16_vector(node["{f.name}"].as<std::vector<uint16_t>>();')
168168
need_lambdas = True
169169
else:
170-
encode_lines.append(f' node["{f.name}"] = static_cast<{decode_datatype(f, yaml_use=True)}>(rhs.{f.name});')
171-
decode_lines.append(f' rhs.{f.name} = node["{f.name}"].as<{decode_datatype(f)}>();')
170+
if f.array and f.size > 0:
171+
encode_lines.append(f' std::array<{f.type}, {f.size}> arr;');
172+
encode_lines.append(f' memcpy(&arr[0], &rhs.{f.name}[0], {f.size} * sizeof({f.type}));')
173+
encode_lines.append(f' node["values"] = arr;')
174+
175+
decode_lines.append(f' std::array<{f.type}, {f.size}> arr = node["{f.name}"].as<std::array<{f.type}, {f.size}>>();')
176+
decode_lines.append(f' memcpy(&rhs.{f.name}[0], &arr[0], {f.size} * sizeof({f.type}));')
177+
else:
178+
encode_lines.append(f' node["{f.name}"] = static_cast<const {decode_datatype(f, yaml_use=True)}>(rhs.{f.name});')
179+
decode_lines.append(f' rhs.{f.name} = node["{f.name}"].as<{decode_datatype(f)}>();')
172180

173181
encode = "\n".join(encode_lines)
174182
decode = "\n".join(decode_lines)

0 commit comments

Comments
 (0)