- if(!s.compare(0, 7, "travel "))
- {
- if(!s.compare(7, 10, "to sensor "))
- return Row(TRAVEL_TO, lexical_cast<unsigned>(s.substr(17)));
- else if(!s.compare(7, 13, "past turnout "))
- return Row(TRAVEL_PAST, lexical_cast<unsigned>(s.substr(20)));
- else if(!s.compare(7, string::npos, "until arrival"))
- return Row(ARRIVE);
- }
- else if(!s.compare(0, 9, "wait for "))
- {
- if(isdigit(s[9]))
- {
- unsigned nondigit = 10;
- while(nondigit<s.size() && isdigit(s[nondigit]))
- ++nondigit;
- return Row(WAIT_TIME, lexical_cast<unsigned>(s.substr(9, nondigit-9)));
- }
- else if(!s.compare(9, 6, "train "))
- {
- string::size_type at = s.find(" at sensor ", 15);
- if(at!=string::npos)
- {
- Row row(WAIT_TRAIN, lexical_cast<unsigned>(s.substr(15, at-15)));
- row.params.push_back(lexical_cast<unsigned>(s.substr(at+11)));
- return row;
- }
- }
- }
- 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 "))