Program Listing for File InputParser.cpp

Return to documentation for file (include/judge/InputParser/InputParser.cpp)

#include "InputParser.hpp"
#include "PDJE_Input_DataLine.hpp"
#include "PDJE_Rule.hpp"
#include <algorithm>
#include <cstdint>

namespace PDJE_JUDGE {
PARSE_OUT *
InputParser::Parse(const INPUT_RAW &raw)
{
    outCache.logs.clear();
    outCache.logs.reserve(raw.second);
    if (raw.second == 0 || raw.first == nullptr) {
        return nullptr;
    }

    PDJE_Input_Log *p;
    int64_t         off;
    std::string     offsetkey;
    for (uint64_t i = 0; i < raw.second; ++i) {
        p = &raw.first[i];
        offsetkey.assign(p->id, p->id_len);
        auto it = offsetData.find(offsetkey);
        if (it != offsetData.end()) {
            off = it->second.offset_microsecond;
        } else {
            off = 0;
        }

        outCache.logs.push_back(raw.first[i]);
        outCache.logs.back().microSecond += off;
    }
    std::sort(outCache.logs.begin(),
              outCache.logs.end(),
              [](const PDJE_Input_Log &a, const PDJE_Input_Log &b) {
                  return a.microSecond < b.microSecond;
              });
    outCache.highest = outCache.logs.back().microSecond;
    outCache.lowest  = outCache.logs.front().microSecond;
    return &outCache;
}
} // namespace PDJE_JUDGE