| 254 | } |
| 255 | |
| 256 | void Config::readFromMap(std::map<std::string, std::any>& mp) { |
| 257 | bool given = false; |
| 258 | std::string CTL = "column_table_limit"; |
| 259 | std::string CL = "column_limit"; |
| 260 | for (const auto& kv : mp) { |
| 261 | auto key = kv.first; |
| 262 | if (node[key]) { |
| 263 | switch (datatype[key]) { |
| 264 | case 'i': { |
| 265 | assert(strcmp(kv.second.type().name(), "i") == 0); |
| 266 | node[key] = std::any_cast<int>(validators[key](key, kv.second)); |
| 267 | break; |
| 268 | } |
| 269 | case 'b': { |
| 270 | assert(strcmp(kv.second.type().name(), "b") == 0); |
| 271 | node[key] = std::any_cast<bool>(validators[key](key, kv.second)); |
| 272 | break; |
| 273 | } |
| 274 | case 'c': { |
| 275 | assert(strcmp(kv.second.type().name(), "c") == 0); |
| 276 | node[key] = std::any_cast<char>(validators[key](key, kv.second)); |
| 277 | break; |
| 278 | } |
| 279 | case 's': { |
| 280 | assert(strcmp(kv.second.type().name(), "s") == 0); |
| 281 | node[key] = std::any_cast<std::string>(validators[key](key, kv.second)); |
| 282 | break; |
| 283 | } |
| 284 | } |
| 285 | } |
| 286 | if (key == CTL) { |
| 287 | given = true; |
| 288 | } |
| 289 | } |
| 290 | if (!given) { |
| 291 | node[CTL] = node[CL]; |
| 292 | } |
| 293 | } |
| 294 | |
| 295 | void Config::dumpCurrent(std::ofstream& fout) { |
| 296 | for (const auto& kv : node) { |