Skip to content

Commit e772f1d

Browse files
committed
Consistently call reserve() before append_row()
1 parent 7adbb27 commit e772f1d

File tree

6 files changed

+22
-11
lines changed

6 files changed

+22
-11
lines changed

src/Table/Table.cxx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ void Table::append_rows(const Table &table2) {
6565
const auto &offsets = get_offsets();
6666
const auto &table2_offsets = table2.get_offsets();
6767

68-
6968
for (size_t col_idx = 0; col_idx < num_columns; ++col_idx) {
7069
const auto &column = columns.at(col_idx);
7170
const auto &table2_column = table2_columns.at(col_idx);
@@ -89,7 +88,7 @@ void Table::append_rows(const Table &table2) {
8988
}
9089
}
9190
}
92-
91+
get_data().reserve(get_data().size() + table2.get_data().size());
9392
tablator::append_rows(get_data(), table2.get_data());
9493
}
9594

src/Table/read_dsv/read_dsv_rows.cxx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ std::vector<uint8_t> tablator::Table::read_dsv_rows(
55
const std::list<std::vector<std::string> > &dsv) {
66
bool skipped(false);
77

8+
size_t row_size = tablator::get_row_size(offsets);
9+
Row single_row(row_size);
810
std::vector<uint8_t> data;
9-
10-
Row single_row(tablator::get_row_size(offsets));
11+
data.reserve(row_size * dsv.size());
1112

1213
for (auto &dsv_row : dsv) {
1314
if (!skipped) {

src/Table/read_ipac_table/read_ipac_table.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ void tablator::Table::read_ipac_table(std::istream &input_stream) {
4545
std::vector<size_t> minimum_column_widths(num_tablator_columns, 1);
4646
std::string line;
4747
std::getline(input_stream, line);
48-
4948
Row single_row(tablator::get_row_size(offsets));
5049

5150
std::vector<uint8_t> data;
51+
// JTODO reserve()?
5252
while (input_stream) {
5353
if (line.find_first_not_of(" \t") != std::string::npos) {
5454
single_row.fill_with_zeros();

src/Table_Ops.cxx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,14 @@ Table add_counter_column(const Table &src_table, const std::string &col_name) {
3232

3333

3434
size_t src_nulls_size(src_offsets.at(1));
35-
size_t dest_nulls_size(dest_offsets.at(1));
3635
size_t src_row_size = src_table.get_row_size();
37-
size_t dest_row_size = dest_table.get_row_size();
38-
36+
size_t num_rows = src_table.get_num_rows();
3937
const auto &src_data = src_table.get_data();
4038

39+
size_t dest_nulls_size(dest_offsets.at(1));
40+
size_t dest_row_size = dest_table.get_row_size();
41+
dest_table.reserve_data(num_rows);
42+
4143
tablator::Row row(dest_row_size);
4244
uint64_t cntr(1);
4345

src/ptree_readers/read_resource_element/read_table_element/read_data_element/read_binary2/read_binary2.cxx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,12 @@ Data_Element ptree_readers::read_binary2(const boost::property_tree::ptree &bina
5353
}
5454

5555
std::vector<size_t> rows_per_stream;
56+
size_t total_num_rows = 0;
5657
for (auto &stream : streams) {
5758
size_t num_rows;
5859
compute_column_array_sizes(stream, fields, column_array_sizes, num_rows);
5960
rows_per_stream.push_back(num_rows);
61+
total_num_rows += num_rows;
6062
}
6163

6264
std::vector<Column> columns;
@@ -69,6 +71,10 @@ Data_Element ptree_readers::read_binary2(const boost::property_tree::ptree &bina
6971
column_array_sizes[c], field.get_field_properties(),
7072
field.get_dynamic_array_flag());
7173
}
74+
75+
size_t row_size = *offsets.rbegin();
76+
data.reserve(row_size * total_num_rows);
77+
7278
for (std::size_t stream = 0; stream < streams.size(); ++stream) {
7379
append_data_from_stream(data, columns, offsets, streams[stream], fields,
7480
rows_per_stream[stream]);

src/ptree_readers/read_resource_element/read_table_element/read_data_element/read_tabledata/read_tabledata.cxx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ tablator::Data_Element tablator::ptree_readers::read_tabledata(
7171

7272
std::vector<Column> columns;
7373
std::vector<size_t> offsets = {0};
74-
std::vector<uint8_t> data;
7574

7675
for (std::size_t c = 0; c < num_fields; ++c) {
7776
const auto &field = fields.at(c);
@@ -80,11 +79,15 @@ tablator::Data_Element tablator::ptree_readers::read_tabledata(
8079
field.get_dynamic_array_flag());
8180
}
8281

83-
Row single_row(*offsets.rbegin());
82+
size_t row_size = *offsets.rbegin();
83+
size_t num_rows = element_lists_by_row.size();
84+
std::vector<uint8_t> data;
85+
data.reserve(row_size * num_rows);
8486

87+
Row single_row(row_size);
8588
// JTODO Are we allowing for non-CHAR dynamic arrays? Should all arrays end in
8689
// '\0'?
87-
for (size_t row_idx = 0; row_idx < element_lists_by_row.size(); ++row_idx) {
90+
for (size_t row_idx = 0; row_idx < num_rows; ++row_idx) {
8891
auto &element_list = element_lists_by_row[row_idx];
8992
single_row.fill_with_zeros();
9093
for (size_t col_idx = 1; col_idx < num_fields; ++col_idx) {

0 commit comments

Comments
 (0)