#include "geo/SequenceArray.hpp" //#include "dbg/debug.h" //#include // ***************************************************************************** // DebugContext // ***************************************************************************** // use your own timing struct here #define DBG_START(ClassName, FuncName, IsActivated) // ***************************************************************************** // Tests for both Vector of Vectors (vov's) and SequenceArrays // ***************************************************************************** template void TestSequentialFillWithPushBack(SeqArrType*, unsigned n, unsigned k) { DBG_START(typeid(SeqArrType).name(), "TestSequentialFillWithPushBack", true); // present timer typedef SeqArrType::value_type SequenceType; typedef SequenceType::value_type ElemType; ElemType x; SeqArrType seqArr; seqArr.resize(n); for (unsigned i = 0; i!=n; ++i) for (unsigned j = 0; j!=k; ++j) seqArr[i].push_back(x); } template void TestSequentialFillWithResize(SeqArrType*, unsigned n, unsigned k) { DBG_START(typeid(SeqArrType).name(), "TestSequentialFillWithResize", true); // present timer typedef SeqArrType::value_type SequenceType; typedef SequenceType::value_type ElemType; ElemType x; SeqArrType seqArr; seqArr.resize(n); for (unsigned i = 0; i!=n; ++i) { seqArr[i].resize(k); for (unsigned j = 0; j!=k; ++j) seqArr[i][j] = x; } } // ***************************************************************************** // Test only for SequenceArray (the fastest way to fill a sequence_array) // requires you to pre-specify the expected total data size. // ***************************************************************************** template void TestSequentialFillWithDataReserve(SeqArrType*, unsigned n, unsigned k) { DBG_START(typeid(SeqArrType).name(), "TestSequentialFillWithResize", true); // present timer typedef SeqArrType::value_type SequenceType; typedef SequenceType::value_type ElemType; ElemType x; SeqArrType seqArr; seqArr.resize(n); seqArr.data_reserve(n*k); // here it the trick to get the most fast result for (unsigned i = 0; i!=n; ++i) { seqArr[i].resize(k); for (unsigned j = 0; j!=k; ++j) seqArr[i][j] = x; } } // ***************************************************************************** // Main // ***************************************************************************** struct DblPoint : std::pair {}; typedef sequence_array DblPolygonArray; struct DblPointVec : std::vector {}; struct DblPolygonVec : std::vector{}; int main() { DBG_START("SequenceArrayTester", "main", true); // present timer TestSequentialFillWithPushBack((DblPolygonVec* )0, 5000, 1000); // 13 secs TestSequentialFillWithPushBack((DblPolygonArray*)0, 5000, 1000); // 9 secs TestSequentialFillWithResize ((DblPolygonVec* )0, 5000, 1000); // 12 secs TestSequentialFillWithResize ((DblPolygonArray*)0, 5000, 1000); // 6 secs TestSequentialFillWithDataReserve((DblPolygonArray*)0, 5000, 1000); // 3 secs return 0; } // total: 43 secs