Skip to content

Commit baf24eb

Browse files
committed
List: Set string size in toStringPtr()
1 parent 862c323 commit baf24eb

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

include/scratchcpp/list.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -180,52 +180,52 @@ class LIBSCRATCHCPP_EXPORT List : public Entity
180180
}
181181

182182
StringPtr *ret = string_pool_new();
183-
size_t offset = 0;
183+
ret->size = 0;
184184

185185
if (digits) {
186186
string_alloc(ret, size);
187187

188188
for (i = 0; i < strings.size(); i++) {
189-
memcpy(ret->data + offset, strings[i]->data, strings[i]->size * sizeof(char16_t));
190-
offset += strings[i]->size;
189+
memcpy(ret->data + ret->size, strings[i]->data, strings[i]->size * sizeof(char16_t));
190+
ret->size += strings[i]->size;
191191
string_pool_free(strings[i]);
192192
}
193193

194194
for (; i < m_size; i++) {
195195
StringPtr *item = value_toStringPtr(&m_dataPtr->operator[](i));
196196
size += item->size + 1;
197197
string_alloc(ret, size);
198-
memcpy(ret->data + offset, item->data, item->size * sizeof(char16_t));
199-
offset += item->size;
198+
memcpy(ret->data + ret->size, item->data, item->size * sizeof(char16_t));
199+
ret->size += item->size;
200200
string_pool_free(item);
201201
}
202202
} else {
203203
size += strings.size() - 1;
204204
string_alloc(ret, size);
205205

206206
for (i = 0; i < strings.size(); i++) {
207-
memcpy(ret->data + offset, strings[i]->data, strings[i]->size * sizeof(char16_t));
208-
offset += strings[i]->size;
207+
memcpy(ret->data + ret->size, strings[i]->data, strings[i]->size * sizeof(char16_t));
208+
ret->size += strings[i]->size;
209209
string_pool_free(strings[i]);
210210

211211
if (i + 1 < m_size)
212-
ret->data[offset++] = u' ';
212+
ret->data[ret->size++] = u' ';
213213
}
214214

215215
for (; i < m_size; i++) {
216216
StringPtr *item = value_toStringPtr(&m_dataPtr->operator[](i));
217217
size += item->size + 1;
218218
string_alloc(ret, size);
219-
memcpy(ret->data + offset, item->data, item->size * sizeof(char16_t));
220-
offset += item->size;
219+
memcpy(ret->data + ret->size, item->data, item->size * sizeof(char16_t));
220+
ret->size += item->size;
221221
string_pool_free(item);
222222

223223
if (i + 1 < m_size)
224-
ret->data[offset++] = u' ';
224+
ret->data[ret->size++] = u' ';
225225
}
226226
}
227227

228-
ret->data[offset] = u'\0';
228+
ret->data[ret->size] = u'\0';
229229
return ret;
230230
}
231231

test/scratch_classes/list_test.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,17 +281,20 @@ TEST(ListTest, ToString)
281281
List list("", "test list");
282282
StringPtr *str = list.toStringPtr();
283283
ASSERT_EQ(utf8::utf16to8(std::u16string(str->data)), "");
284+
ASSERT_EQ(str->size, 0);
284285
ASSERT_EQ(list.toString(), "");
285286

286287
list.append("");
287288
str = list.toStringPtr();
288289
ASSERT_EQ(utf8::utf16to8(std::u16string(str->data)), "");
290+
ASSERT_EQ(str->size, 0);
289291
ASSERT_EQ(list.toString(), "");
290292

291293
list.append("");
292294
list.append("");
293295
str = list.toStringPtr();
294296
ASSERT_EQ(utf8::utf16to8(std::u16string(str->data)), " ");
297+
ASSERT_EQ(str->size, 2);
295298
ASSERT_EQ(list.toString(), " ");
296299

297300
list.clear();
@@ -300,6 +303,7 @@ TEST(ListTest, ToString)
300303
list.append("item 3");
301304
str = list.toStringPtr();
302305
ASSERT_EQ(utf8::utf16to8(std::u16string(str->data)), "item1 i t e m 2 item 3");
306+
ASSERT_EQ(str->size, 22);
303307
ASSERT_EQ(list.toString(), "item1 i t e m 2 item 3");
304308

305309
list.clear();
@@ -309,13 +313,15 @@ TEST(ListTest, ToString)
309313
list.append(" c ");
310314
str = list.toStringPtr();
311315
ASSERT_EQ(utf8::utf16to8(std::u16string(str->data)), " a b c ");
316+
ASSERT_EQ(str->size, 11);
312317
ASSERT_EQ(list.toString(), " a b c ");
313318

314319
list.clear();
315320
list.append("áä");
316321
list.append("ľ š");
317322
str = list.toStringPtr();
318323
ASSERT_EQ(utf8::utf16to8(std::u16string(str->data)), "áä ľ š");
324+
ASSERT_EQ(str->size, 6);
319325
ASSERT_EQ(list.toString(), "áä ľ š");
320326

321327
list.clear();
@@ -324,6 +330,7 @@ TEST(ListTest, ToString)
324330
list.append(8);
325331
str = list.toStringPtr();
326332
ASSERT_EQ(utf8::utf16to8(std::u16string(str->data)), "-2 5 8");
333+
ASSERT_EQ(str->size, 6);
327334
ASSERT_EQ(list.toString(), "-2 5 8");
328335

329336
list.clear();
@@ -332,6 +339,7 @@ TEST(ListTest, ToString)
332339
list.append(8);
333340
str = list.toStringPtr();
334341
ASSERT_EQ(utf8::utf16to8(std::u16string(str->data)), "2 10 8");
342+
ASSERT_EQ(str->size, 6);
335343
ASSERT_EQ(list.toString(), "2 10 8");
336344

337345
list.clear();
@@ -340,20 +348,23 @@ TEST(ListTest, ToString)
340348
list.append(8);
341349
str = list.toStringPtr();
342350
ASSERT_EQ(utf8::utf16to8(std::u16string(str->data)), "098");
351+
ASSERT_EQ(str->size, 3);
343352
ASSERT_EQ(list.toString(), "098");
344353

345354
list.clear();
346355
list.append("true");
347356
list.append("false");
348357
str = list.toStringPtr();
349358
ASSERT_EQ(utf8::utf16to8(std::u16string(str->data)), "true false");
359+
ASSERT_EQ(str->size, 10);
350360
ASSERT_EQ(list.toString(), "true false");
351361

352362
list.clear();
353363
list.append(true);
354364
list.append(false);
355365
str = list.toStringPtr();
356366
ASSERT_EQ(utf8::utf16to8(std::u16string(str->data)), "true false");
367+
ASSERT_EQ(str->size, 10);
357368
ASSERT_EQ(list.toString(), "true false");
358369
}
359370

0 commit comments

Comments
 (0)