void indexScenario(const Scenario& scenario, InquiryToReplies& inquiryToReplies) { int index = 0; int counter = 0; bool isInSaying = 0; InquiryToReply inquiryToReply; std::for_each( scenario.begin(), scenario.end(), [&inquiryToReplies, &inquiryToReply, &index, &counter, &isInSaying](const ScriptLine& line) { LineRange& inquiry = inquiryToReply.first; LineRange& reply = inquiryToReply.second; if (isLine<SAYING>(line)) { if (counter % 2 == 0) { inquiry.lower = index; inquiry.upper = index; reply.lower = -1; } if (counter % 2 == 1) { reply.lower = index; reply.upper = index; } isInSaying = true; ++counter; } else if (!isMarkedLine(line) && isInSaying) { if (reply.lower == -1) { inquiry.upper++; } else { reply.upper++; } } else if (isMarkedLine(line) && isInSaying && reply.lower != -1) { inquiryToReplies.insert(inquiryToReply); isInSaying = false; } else { isInSaying = false; } ++index; }); }