- // Read lines until I reach something for me (which breaks in loop body) or end of file reached
- while (!action_fs->eof()) {
- std::string action_line;
- read_and_trim_line(action_fs, &action_line);
- if (action_line.length() > 0 && action_line.find("#") == std::string::npos) {
- /* we cannot split in place here because we parse&store several lines for the colleagues... */
- action = new ReplayAction();
- boost::split(*action, action_line, boost::is_any_of(" \t"), boost::token_compress_on);
-
- // if it's for me, I'm done
- std::string evtname = action->front();
- if (evtname.compare(name) == 0) {
- return action;
- } else {
- // Else, I have to store it for the relevant colleague
- std::queue<ReplayAction*>* otherqueue = nullptr;
- if (action_queues.find(evtname) != action_queues.end())
- otherqueue = action_queues.at(evtname);
- if (otherqueue == nullptr) { // Damn. Create the queue of that guy
- otherqueue = new std::queue<ReplayAction*>();
- action_queues.insert({evtname, otherqueue});
- }
- otherqueue->push(action);
- }
- }
- }
- // end of file reached while searching in vain for more work
- } else {
- // Get something from my queue and return it
- action = myqueue->front();
- myqueue->pop();
- return action;