diff options
Diffstat (limited to 'src/model/CompetitorWithResults.cpp')
-rw-r--r-- | src/model/CompetitorWithResults.cpp | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/src/model/CompetitorWithResults.cpp b/src/model/CompetitorWithResults.cpp index d29441d..1601a4a 100644 --- a/src/model/CompetitorWithResults.cpp +++ b/src/model/CompetitorWithResults.cpp @@ -1,15 +1,46 @@ #include "CompetitorWithResults.h" +/** + * Replaces/sets the results of a competitor. + * + * @param results The results of the competitor. + * @return True, if successful. + */ bool CompetitorWithResults::setResults(const QJsonObject &results) { if (!results.contains("mark") || !results.contains("medalType")) { throw invalid_argument("Results object of competitor is incomplete."); } - this->results = { - {QString("mark"), results["mark"].toString()}, - {QString("medalType"), results["medalType"].toString()} - }; + this->mark = results["mark"].toString(); + this->medalType = results["medalType"].toString(); + return true; } + +/** + * Static compare method, which can compare the result times or points of two CompetitorsWithResult. + * Returns true, if the left competitor (lComp) got a real lesser score than the right competitor (rComp). + * + * @param lComp First competitor to compare. + * @param rComp Second competitor to compare. + * @return True, if the second competitor got a higher score. + */ +bool CompetitorWithResults::compare(CompetitorWithResults lComp, CompetitorWithResults rComp) { + QString l = lComp.getMark(); + QString r = rComp.getMark(); + + // check if values are numerical (-> not time values) + if (!l.contains(":") || !r.contains(":")) { + return l.toFloat() < r.toFloat(); + } + + // compare time values if not numerical + QString lTime(""), rTime(""); + + for (QChar c : l) if (c.isDigit()) lTime.append(c); + for (QChar c : r) if (c.isDigit()) rTime.append(c); + + return lTime.compare(rTime) < 0; +} |