#pragma once #include "base/assert.hpp" #include "std/iostream.hpp" namespace tree { template bool LoadTreeAsText(istream & s, ToDo & toDo) { string name; s >> name; ASSERT ( !name.empty(), ("Error in classificator file") ); if (name == "{}") return false; // set key name toDo.Name(name); // load object itself string strkey; s >> strkey; while (strkey != "+" && strkey != "-") { s >> strkey; } // load children if (strkey == "+") { size_t i = 0; while (true) { toDo.Start(i++); bool const isContinue = LoadTreeAsText(s, toDo); toDo.End(); if (!isContinue) { toDo.EndChilds(); break; } } ASSERT ( i <= 128, ("too many features at level = ", name) ); } return true; } }