egutierrez
ea5c94fc8a
feat(0133-1+2): columnar snapshot + string interning in data_table
...
Change 1 — Columnar Snapshot Internal:
- Add ColumnSnapshot struct (type + str_ids/i64/f64 per column) in data_table_internal.h
- Add SnapshotCache struct with pointer-identity sentinel (last_cells_ptr)
- Add SnapshotCache field to UiState singleton
- In render(): rebuild snapshot after join materialization when cells ptr changes
Uses same pointer-identity pattern as existing stats_last_cells in State
Int/Float columns parsed once via parse_number; String/Auto interned
Change 2 — String Interning:
- Add StringPool struct (strings + unordered_map<string_view, uint32_t>) to data_table_types.h
- StringPool is per-State (NOT global) for table isolation
- intern(sv) inserts if absent, returns stable uint32_t index
- Cleared + rebuilt on each snapshot rebuild for index coherence
- Add string_pool field to State struct
Documentation:
- Extended header comment in data_table_internal.h describing design,
StringPool API, invariants (pointer-identity, row→snapshot_row),
and how stats_last_cells and snapshot coexist independently
Build: fn_module_data_table + tables_qa pass, no new errors (only
pre-existing -Wformat-truncation warnings unrelated to this change).
Public API (data_table.h, TableInput, render() signature) unchanged.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-22 23:35:12 +02:00
..
2026-05-18 18:17:08 +02:00
2026-04-28 22:05:31 +02:00
2026-04-28 23:40:51 +02:00
2026-05-17 02:44:04 +02:00
2026-05-17 02:44:04 +02:00
2026-05-17 02:44:04 +02:00
2026-05-04 11:50:57 +02:00
2026-05-04 11:50:57 +02:00
2026-05-14 00:28:20 +02:00
2026-05-03 00:32:55 +02:00
2026-04-25 21:25:51 +02:00
2026-04-28 23:40:51 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-04-24 14:52:09 +02:00
2026-04-24 14:52:09 +02:00
2026-04-28 23:42:35 +02:00
2026-04-25 21:50:29 +02:00
2026-04-25 21:50:29 +02:00
2026-05-14 00:28:20 +02:00
2026-04-25 21:25:39 +02:00
2026-04-25 21:25:39 +02:00
2026-04-28 23:42:35 +02:00
2026-05-18 18:17:08 +02:00
2026-05-18 18:17:08 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-18 18:17:08 +02:00
2026-05-18 18:17:08 +02:00
2026-05-18 18:17:08 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-04-08 00:10:18 +02:00
2026-04-08 00:10:18 +02:00
2026-04-28 23:42:35 +02:00
2026-04-08 00:10:18 +02:00
2026-04-08 00:10:18 +02:00
2026-04-28 23:44:55 +02:00
2026-05-22 23:35:12 +02:00
2026-04-08 00:10:18 +02:00
2026-04-08 00:10:18 +02:00
2026-05-14 00:28:20 +02:00
2026-04-24 14:52:09 +02:00
2026-04-24 14:52:09 +02:00
2026-04-28 23:42:35 +02:00
2026-04-28 23:53:49 +02:00
2026-04-28 23:53:49 +02:00
2026-04-28 23:53:49 +02:00
2026-04-28 23:55:11 +02:00
2026-04-28 23:55:11 +02:00
2026-04-28 23:55:11 +02:00
2026-04-06 23:46:36 +02:00
2026-04-06 23:46:36 +02:00
2026-05-14 00:28:20 +02:00
2026-04-24 21:31:00 +02:00
2026-04-08 01:17:44 +02:00
2026-04-28 23:40:51 +02:00
2026-04-08 00:10:18 +02:00
2026-04-08 00:10:18 +02:00
2026-04-08 00:10:18 +02:00
2026-05-18 18:14:37 +02:00
2026-05-18 18:14:37 +02:00
2026-05-18 18:14:56 +02:00
2026-05-22 22:15:37 +02:00
2026-05-18 18:14:37 +02:00
2026-05-18 18:14:56 +02:00
2026-04-25 21:25:39 +02:00
2026-04-25 21:25:39 +02:00
2026-04-28 23:42:35 +02:00
2026-05-16 16:33:22 +02:00
2026-04-25 21:25:25 +02:00
2026-05-14 00:28:20 +02:00
2026-04-25 21:25:25 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-04-25 21:25:51 +02:00
2026-04-25 21:25:51 +02:00
2026-05-14 00:28:20 +02:00
2026-05-10 13:30:27 +02:00
2026-05-10 13:30:27 +02:00
2026-05-14 00:28:20 +02:00
2026-05-04 11:50:57 +02:00
2026-04-25 21:25:51 +02:00
2026-04-28 23:40:51 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-04 11:50:57 +02:00
2026-05-04 11:50:57 +02:00
2026-05-04 11:50:57 +02:00
2026-05-04 11:50:57 +02:00
2026-05-04 11:50:57 +02:00
2026-05-04 11:50:57 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-11 16:28:50 +02:00
2026-04-08 00:10:18 +02:00
2026-04-08 00:10:18 +02:00
2026-05-14 00:28:20 +02:00
2026-04-25 21:25:39 +02:00
2026-04-25 21:25:39 +02:00
2026-04-28 23:42:35 +02:00
2026-04-25 21:51:15 +02:00
2026-04-25 21:51:15 +02:00
2026-04-28 23:40:51 +02:00
2026-04-24 14:52:09 +02:00
2026-04-24 14:52:09 +02:00
2026-04-28 23:42:35 +02:00
2026-04-25 21:25:51 +02:00
2026-04-25 21:25:51 +02:00
2026-04-28 23:40:51 +02:00
2026-05-04 11:52:50 +02:00
2026-05-04 11:52:50 +02:00
2026-05-14 00:28:20 +02:00
2026-05-18 18:17:08 +02:00
2026-05-18 18:17:08 +02:00
2026-05-18 18:17:08 +02:00
2026-04-08 00:10:18 +02:00
2026-04-08 00:10:18 +02:00
2026-05-14 00:28:20 +02:00
2026-04-28 23:53:08 +02:00
2026-04-25 21:25:39 +02:00
2026-04-28 23:53:08 +02:00
2026-04-28 23:52:37 +02:00
2026-04-28 23:52:37 +02:00
2026-04-28 23:52:37 +02:00
2026-04-25 21:25:39 +02:00
2026-04-25 21:25:39 +02:00
2026-04-28 23:42:35 +02:00
2026-05-04 11:50:57 +02:00
2026-05-04 11:50:57 +02:00
2026-05-14 00:28:20 +02:00
2026-04-08 00:10:18 +02:00
2026-04-08 00:10:18 +02:00
2026-05-14 00:28:20 +02:00
2026-05-04 11:52:50 +02:00
2026-05-04 11:52:50 +02:00
2026-05-14 00:28:20 +02:00
2026-04-28 23:58:40 +02:00
2026-04-28 23:51:23 +02:00
2026-04-28 23:51:23 +02:00
2026-04-28 23:51:59 +02:00
2026-04-25 21:48:50 +02:00
2026-05-14 00:28:20 +02:00
2026-05-18 21:40:52 +02:00
2026-05-18 19:59:50 +02:00
2026-05-18 19:59:50 +02:00
2026-04-08 00:10:18 +02:00
2026-04-08 00:10:18 +02:00
2026-05-14 00:28:20 +02:00
2026-04-25 21:00:31 +02:00
2026-04-25 21:00:31 +02:00
2026-04-28 23:40:51 +02:00
2026-04-25 21:25:39 +02:00
2026-04-25 21:25:39 +02:00
2026-04-28 23:42:35 +02:00
2026-04-08 00:10:18 +02:00
2026-04-08 00:10:18 +02:00
2026-05-14 00:28:20 +02:00
2026-04-25 21:50:35 +02:00
2026-04-25 21:50:35 +02:00
2026-05-14 00:28:20 +02:00
2026-05-05 23:12:50 +02:00
2026-04-25 21:25:39 +02:00
2026-04-28 23:42:35 +02:00
2026-05-12 03:10:00 +02:00
2026-04-25 21:14:15 +02:00
2026-04-28 23:44:55 +02:00
2026-04-25 21:25:39 +02:00
2026-04-25 21:25:39 +02:00
2026-04-28 23:42:35 +02:00
2026-05-15 17:24:53 +02:00
2026-05-17 00:07:03 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-15 17:24:53 +02:00
2026-05-17 00:07:03 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-05-16 16:33:22 +02:00
2026-04-08 00:10:18 +02:00
2026-04-08 00:10:18 +02:00
2026-05-14 00:28:20 +02:00
2026-04-25 21:25:39 +02:00
2026-04-25 21:25:39 +02:00
2026-04-28 23:42:35 +02:00
2026-04-25 21:50:21 +02:00
2026-04-25 21:50:21 +02:00
2026-04-28 23:44:55 +02:00