4c04162e23
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
45 lines
1.3 KiB
C++
45 lines
1.3 KiB
C++
// 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 <string>
|
|
#include <vector>
|
|
|
|
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<Filter> filters;
|
|
std::vector<ColorRule> color_rules;
|
|
std::vector<bool> 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<int> compute_visible_rows(const char* const* cells,
|
|
int rows, int cols,
|
|
const State& st);
|
|
|
|
} // namespace data_table
|