- else if(!s.compare(0, 11, "wait until "))
- {
- string::size_type mod = s.find(" mod ", 11);
- unsigned nondigit = (mod!=string::npos ? mod+5 : 11);
- while(nondigit<s.size() && isdigit(s[nondigit]))
- ++nondigit;
- if(mod!=string::npos)
- {
- unsigned time = lexical_cast<unsigned>(s.substr(11, mod-11));
- Row row(WAIT_UNTIL, time);
- row.params.push_back(lexical_cast<unsigned>(s.substr(mod+5, nondigit-mod-5)));
- return row;
- }
- else
- {
- unsigned time = lexical_cast<unsigned>(s.substr(11, nondigit-11));
- Row row(WAIT_UNTIL, time);
- row.params.push_back(3600);
- return row;
- }
- }
- else if(!s.compare(0, 10, "set speed "))
- {
- unsigned nondigit = 11;
- while(nondigit<s.size() && (isdigit(s[nondigit]) || s[nondigit]=='-'))
- ++nondigit;
- return Row(SPEED, lexical_cast<unsigned>(s.substr(10, nondigit-10)));
- }
- else if(s=="reverse")
- return Row(REVERSE);
- else if(!s.compare(0, 10, "set route "))
- {
- if(!s.compare(10, 3, "to "))
- {
- if(!s.compare(13, 7, "sensor "))
- return Row(GOTO_SENSOR, lexical_cast<unsigned>(s.substr(20)));
- else
- return Row(GOTO_ZONE, s.substr(13));
- }
- return Row(ROUTE, s.substr(10));
- }
-
- throw invalid_argument("Timetable::Row::parse");