|
|
- #pragma once
- #include <vector>
- #include <map>
- #include <string>
- #include <utility>
- #include <iostream>
-
- namespace csv {
- struct cell_id {
- size_t x,y;
- bool operator<(const cell_id& oth) {
- if (y < oth.y) return true;
- if (x < oth.x) return true;
- return false;
- };
- };
-
- cell_id get_coords_from_id(const std::string_view id) {
- size_t x = 0;
- size_t y = 0;
- auto c = id.begin();
- while(*c < 'A' || *c > 'Z')
- {
- x += *c-'A';
- x *= 26;
- c++;
- }
- x /= 26;
- while(*c < '0' || *c > '9')
- {
- y += *c-'0';
- y *= 10;
- c++;
- }
- y /= 10;
- cell_id ret;
- ret.x = x;
- ret.y = y;
- return ret;
- }
-
- class context;
-
- class cell {
- public:
- std::string data = "";
- mutable std::string computed_value = "";
- mutable std::string display_value = "";
-
- void eval(const context& ctx);
- };
-
- class context {
- public:
- std::map<cell_id, cell> data;
-
- /*const cell& operator[] (const std::string_view id) const {
- auto coords = get_coords_from_id(id);
- return data[coords];
- }*/
- };
-
- }
|