Skip to content

Commit 42f03c8

Browse files
committed
opt: use .reserve() on some data_t.
1 parent 3d3d58c commit 42f03c8

7 files changed

Lines changed: 24 additions & 11 deletions

File tree

src/TIFlashFile.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,7 @@ namespace tivars
10981098
data_t TIFlashFile::makeHeaderBytes(const flash_header_t& header)
10991099
{
11001100
data_t bytes;
1101+
bytes.reserve(headerByteCountWithoutChecksum + header.calcData.size() + (header.hasChecksum ? checksumByteCount : 0));
11011102
const std::string nullPad(1, '\0');
11021103
const std::string magic = str_pad(header.magic, magicByteCount, nullPad).substr(0, magicByteCount);
11031104
bytes.insert(bytes.end(), magic.begin(), magic.end());
@@ -1116,6 +1117,7 @@ namespace tivars
11161117
bytes.insert(bytes.end(), paddedName.begin(), paddedName.end());
11171118

11181119
data_t devicesField;
1120+
devicesField.reserve(deviceFieldByteCount);
11191121
for (const auto& device : header.devices)
11201122
{
11211123
devicesField.push_back(device.first);

src/TIVarFile.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -906,6 +906,7 @@ namespace tivars
906906
data_t TIVarFile::make_bin_data()
907907
{
908908
data_t bin_data;
909+
bin_data.reserve(firstVarEntryOffset + this->header.entries_len);
909910

910911
// Header
911912
{

src/TypeHandlers/TH_GDB.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,9 @@ namespace tivars::TypeHandlers
419419
GDB gdb{};
420420
from_json(json::parse(str), gdb);
421421

422-
data_t data(2); // reserve 2 bytes for size fields, filled later
422+
data_t data;
423+
data.reserve(dataByteCountMinimum);
424+
data.resize(2); // leave 2 bytes for size fields, filled later
423425

424426
data.push_back(0); // always 0
425427
data.push_back(gdb.graphMode);

src/TypeHandlers/TH_GenericList.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,13 @@ namespace tivars::TypeHandlers
4646
throw std::invalid_argument("Invalid input string. Needs to be a valid real or complex list");
4747
}
4848

49-
const auto handler = (type == 0x00) ? &TH_GenericReal::makeDataFromString : &TH_GenericComplex::makeDataFromString;
49+
const bool isRealList = type == TIVarType{"Real"}.getId();
50+
const auto handler = isRealList ? &TH_GenericReal::makeDataFromString : &TH_GenericComplex::makeDataFromString;
51+
const size_t valueByteCount = isRealList ? TH_GenericReal::dataByteCount : TH_GenericComplex::dataByteCount;
5052

51-
data_t data(2); // reserve 2 bytes for size fields
53+
data_t data;
54+
data.reserve(2 + numCount * valueByteCount);
55+
data.resize(2); // leave 2 bytes for item count
5256

5357
data[0] = (uint8_t) (numCount & 0xFF);
5458
data[1] = (uint8_t) ((numCount >> 8) & 0xFF);

src/TypeHandlers/TH_Group.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ namespace tivars::TypeHandlers
220220
}
221221

222222
data_t data(minimumDataByteCount, 0x00);
223+
data.reserve(minimumDataByteCount + entries.size() * (fixedNameByteCount + 6));
223224
for (const json& entry : entries)
224225
{
225226
if (!entry.is_object())

src/TypeHandlers/TH_Matrix.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ namespace tivars::TypeHandlers
1919
(void)options;
2020
(void)_ctx;
2121

22-
data_t data(2); // reserve 2 bytes for size fields
23-
2422
const std::string trimmed = trim(str);
2523
if (trimmed.length() < 5 || trimmed.substr(0, 2) != "[[" || trimmed.substr(trimmed.length()-2, 2) != "]]")
2624
{
@@ -59,6 +57,10 @@ namespace tivars::TypeHandlers
5957
matrix[counter++] = tmp;
6058
}
6159

60+
data_t data;
61+
data.reserve(2 + rowCount * colCount * TH_GenericReal::dataByteCount);
62+
data.resize(2); // leave 2 bytes for dimensions
63+
6264
data[0] = (uint8_t)(colCount & 0xFF);
6365
data[1] = (uint8_t)(rowCount & 0xFF);
6466

src/TypeHandlers/TH_Tokenized.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -904,10 +904,10 @@ namespace tivars::TypeHandlers
904904
if (j.contains("rawDataHex"))
905905
{
906906
data_t payload = hex_to_bytes(j.at("rawDataHex").get<std::string>());
907-
data_t data = {
908-
static_cast<uint8_t>(payload.size() & 0xFF),
909-
static_cast<uint8_t>((payload.size() >> 8) & 0xFF)
910-
};
907+
data_t data;
908+
data.reserve(2 + payload.size());
909+
data.push_back(static_cast<uint8_t>(payload.size() & 0xFF));
910+
data.push_back(static_cast<uint8_t>((payload.size() >> 8) & 0xFF));
911911
tivars::vector_append(data, payload);
912912
return data;
913913
}
@@ -936,8 +936,9 @@ namespace tivars::TypeHandlers
936936
str_new = str;
937937
}
938938

939-
// two bytes reserved for the size. Filled later
940-
data.push_back(0); data.push_back(0);
939+
// two bytes left for the size. Filled later
940+
data.reserve(2 + str_new.size());
941+
data.resize(2);
941942

942943
scan_source_tokens(str_new, detect_strings,
943944
[&](const std::string&, uint16_t tokenValue)

0 commit comments

Comments
 (0)