// Logica pura del playground data_table. Sin ImGui — testable headless. // Cuando se promueva al registry, esto sera la base de data_table_cpp_viz. #pragma once #include #include namespace data_table { enum class Op { Eq, Neq, Gt, Gte, Lt, Lte }; const char* op_label(Op o); struct Filter { int col; Op op; std::string value; }; struct ColorRule { int col; std::string equals; unsigned int color; // ImU32 (ABGR para ImGui) }; struct State { std::vector filters; std::vector color_rules; std::vector col_visible; // size = col_count; auto-init en render int sort_col = -1; // -1 = sin sort bool sort_desc = false; }; // Parse "1.23" -> 1.23, true. False si la celda no es numero completo. bool parse_number(const char* s, double& out); // Compara dos celdas con operador. Numerico si ambas parseables; lexical si no. bool compare(const char* a, const char* b, Op op); // Aplica filtros y ordena. Devuelve indices de filas visibles. std::vector compute_visible_rows(const char* const* cells, int rows, int cols, const State& st); } // namespace data_table