Spreadsheet: make active table lookup slightly more efficient

Move the active table to the front of the tables array, so that it
is easier to find in subsequent searches.
This commit is contained in:
Jacques Lucke
2025-05-28 06:20:30 +02:00
parent 16cd798f8d
commit 6066ef8802
3 changed files with 11 additions and 0 deletions

View File

@@ -451,6 +451,10 @@ static void spreadsheet_main_region_draw(const bContext *C, ARegion *region)
table = spreadsheet_table_new(spreadsheet_table_id_copy(*active_table_id));
spreadsheet_table_add(*sspreadsheet, table);
}
if (table) {
/* Move to the front of the tables list to make it cheaper to find the table in future. */
spreadsheet_table_move_to_front(*sspreadsheet, *table);
}
/* Update the last used time on the table. */
if (table->last_used < sspreadsheet->table_use_clock || sspreadsheet->table_use_clock == 0) {

View File

@@ -345,4 +345,10 @@ void spreadsheet_table_remove_unused_columns(SpreadsheetTable &table)
[](SpreadsheetColumn **column) { spreadsheet_column_free(*column); });
}
void spreadsheet_table_move_to_front(SpaceSpreadsheet &sspreadsheet, SpreadsheetTable &table)
{
const int old_index = Span(sspreadsheet.tables, sspreadsheet.num_tables).first_index(&table);
dna::array::move_index(sspreadsheet.tables, sspreadsheet.num_tables, old_index, 0);
}
} // namespace blender::ed::spreadsheet

View File

@@ -39,5 +39,6 @@ const SpreadsheetTable *spreadsheet_table_find(const SpaceSpreadsheet &sspreadsh
void spreadsheet_table_add(SpaceSpreadsheet &sspreadsheet, SpreadsheetTable *table);
void spreadsheet_table_remove_unused(SpaceSpreadsheet &sspreadsheet);
void spreadsheet_table_remove_unused_columns(SpreadsheetTable &table);
void spreadsheet_table_move_to_front(SpaceSpreadsheet &sspreadsheet, SpreadsheetTable &table);
} // namespace blender::ed::spreadsheet