refs #570 Removed unused method splitByTime.

This commit is contained in:
Mathew Sutcliffe
2016-06-06 21:59:20 +01:00
parent 8c80cc33b3
commit a5dfa1ef00
4 changed files with 0 additions and 78 deletions

View File

@@ -303,34 +303,6 @@ namespace BlackSample
Q_UNUSED(a); Q_UNUSED(a);
Q_UNUSED(b); Q_UNUSED(b);
timer.start();
QList<CAircraftSituationList> split = situations.splitByTime(halfTime);
for (int cs = 0; cs < numberOfCallsigns; cs++)
{
CCallsign callsign("CS" + QString::number(cs));
CAircraftSituationList csSituationsBefore = split[0].findByCallsign(callsign);
CAircraftSituationList csSituationsAfter = split[1].findByCallsign(callsign);
Q_UNUSED(csSituationsBefore);
Q_UNUSED(csSituationsAfter);
}
out << "Single split by time upfront, then callsigns: " << timer.elapsed() << "ms" << endl;
b = split[0].size();
a = split[1].size();
Q_ASSERT(a + b == numberOfTimes * numberOfCallsigns);
situations.sortLatestFirst(); // eliminate impact of sort
timer.start();
split = situations.splitByTime(halfTime);
for (int cs = 0; cs < numberOfCallsigns; cs++)
{
CCallsign callsign("CS" + QString::number(cs));
CAircraftSituationList csSituationsBefore = split[0].findByCallsign(callsign);
CAircraftSituationList csSituationsAfter = split[1].findByCallsign(callsign);
Q_UNUSED(csSituationsBefore);
Q_UNUSED(csSituationsAfter);
}
out << "Single, pre-sorted split by time upfront, then callsigns: " << timer.elapsed() << "ms" << endl;
timer.start(); timer.start();
QHash<CCallsign, CAircraftSituationList> csSituations = situations.splitPerCallsign(); QHash<CCallsign, CAircraftSituationList> csSituations = situations.splitPerCallsign();
out << "Split by " << csSituations.size() << " callsigns, " << timer.elapsed() << "ms" << endl; out << "Split by " << csSituations.size() << " callsigns, " << timer.elapsed() << "ms" << endl;

View File

@@ -102,32 +102,6 @@ namespace BlackMisc
return this->container().contains(&OBJ::hasValidTimestamp, false); return this->container().contains(&OBJ::hasValidTimestamp, false);
} }
template <class OBJ, class CONTAINER>
QList<CONTAINER> ITimestampObjectList<OBJ, CONTAINER>::splitByTime(qint64 msSinceEpoch, bool sortedLatestFirst) const
{
QList<CONTAINER> result { {}, {} };
const auto &c = this->container();
if (sortedLatestFirst)
{
// O(log n) comparisons and O(n) copies
struct Comparator
{
bool operator()(const OBJ &a, qint64 b) const { return a.isNewerThan(b); }
bool operator()(qint64 a, const OBJ &b) const { return b.isOlderThan(a); }
};
auto it = std::upper_bound(c.begin(), c.end(), msSinceEpoch, Comparator());
std::copy(c.begin(), it, std::back_inserter(result[0]));
std::copy(it, c.end(), std::back_inserter(result[1]));
}
else
{
// O(n) comparisons and O(n) copies
std::partition_copy(c.begin(), c.end(), std::back_inserter(result[0]), std::back_inserter(result[1]),
[msSinceEpoch](const OBJ & obj) { return ! obj.isNewerThan(msSinceEpoch); });
}
return result;
}
template <class OBJ, class CONTAINER> template <class OBJ, class CONTAINER>
QDateTime ITimestampObjectList<OBJ, CONTAINER>::latestTimestamp() const QDateTime ITimestampObjectList<OBJ, CONTAINER>::latestTimestamp() const
{ {

View File

@@ -50,10 +50,6 @@ namespace BlackMisc
//! Has invalid timestamp //! Has invalid timestamp
bool hasInvalidTimestamps() const; bool hasInvalidTimestamps() const;
//! Partition into two containers, first [0,msSinceEpoch] and second (msSinceEpoch,LLONG_MAX].
//! Within each of the two parts, the original relative ordering of the elements is preserved.
QList<CONTAINER> splitByTime(qint64 msSinceEpoch, bool sortedLatestFirst = false) const;
//! Latest timestamp //! Latest timestamp
QDateTime latestTimestamp() const; QDateTime latestTimestamp() const;

View File

@@ -254,26 +254,6 @@ namespace BlackMiscTest
ms = situations.front().getMSecsSinceEpoch(); ms = situations.front().getMSecsSinceEpoch();
QVERIFY2(ms == ts, "Latest value not first"); QVERIFY2(ms == ts, "Latest value not first");
// split in half
for (bool sortLatestFirst : { false, true })
{
sortLatestFirst ? situations.sortLatestFirst() : situations.sortOldestFirst();
qint64 splitTime = ts - ((no / 2) * 10) + 1;
QList<CAircraftSituationList> split = situations.splitByTime(splitTime);
CAircraftSituationList before = split[0];
CAircraftSituationList after = split[1];
int beforeSize = before.size();
int afterSize = after.size();
QVERIFY(beforeSize == no / 2);
QVERIFY(afterSize == no / 2);
// check partitioning
auto isNewer = [splitTime](const CAircraftSituation &as) { return as.isNewerThan(splitTime); };
QVERIFY2(std::none_of(before.cbegin(), before.cend(), isNewer), "before contains a time which is after");
QVERIFY2(std::all_of(after.cbegin(), after.cend(), isNewer), "after contains a time which is before");
}
// test shifting // test shifting
situations.clear(); situations.clear();
const int maxElements = 8; const int maxElements = 8;