コード例 #1
0
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;
      });
}