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:
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user