PackedList improvements

- dropped auto-vivification for now (performance issue), but reworked to
  allow easy reinstatement
- derived both iterator and const_iterator from iteratorBase and use
  iteratorBase as our proxy for non-const access to the list elements.
  This allows properly chaining assignments:
     list[1] = list[2];
     list[1] = list[2] = 10;
- assigning iterators from iteratorBase or other iterators works:
     iterator iter = list[20];
- made template parameter nBits=1 the default
This commit is contained in:
Mark Olesen
2009-01-29 14:03:53 +01:00
parent 69f8c3b3a1
commit 4e56643efe
6 changed files with 562 additions and 350 deletions

View File

@ -52,25 +52,29 @@ int main(int argc, char *argv[])
list1 = -1;
list1.print(Info);
Info<< "\ntest assign between references - does not work as expected\n";
Info<< "\ntest assign between references\n";
list1[2] = 3;
list1[4] = list1[2];
list1.print(Info);
Info<< "\ntest assign between references, with chaining\n";
list1[4] = list1[2] = 1;
list1.print(Info);
{
const PackedList<3>& constLst = list1;
Info<< "\ntest operator[] const with out-of-range index\n";
constLst.print(Info);
if (!constLst[20])
{
Info<< "[20] is false, as expected\n";
Info<< "[20] is false (expected) list size should be unchanged (const)\n";
}
constLst.print(Info);
Info<< "\ntest operator[] non-const with out-of-range index\n";
if (!list1[20])
{
Info<< "[20] is false, as expected but list was resized!! (non-const)\n";
Info<< "[20] is false (expected) but list was resized?? (non-const)\n";
}
list1.print(Info);
}
@ -145,6 +149,10 @@ int main(int argc, char *argv[])
list1.setCapacity(24);
list1.print(Info);
Info<< "\ntest resize much smaller\n";
list1.resize(150);
list1.print(Info);
Info<< "\ntest trim\n";
list1.trim();
list1.print(Info);
@ -159,13 +167,16 @@ int main(int argc, char *argv[])
Info<< "begin():";
iter.print(Info) << "\n";
Info<< "\ntest iterator operator=\n";
iter = 2;
Info<< "iterator:" << iter() << "\n";
iter = 5;
iter() = 5;
iter.print(Info);
list1.print(Info);
iter = list1[31];
Info<< "iterator:" << iter() << "\n";
iter.print(Info);
Info<< "\ntest get() method\n";
Info<< "get(10):" << list1.get(10) << " and list[10]:" << list1[10] << "\n";
list1.print(Info);
@ -173,25 +184,34 @@ int main(int argc, char *argv[])
Info<< "\ntest iterator indexing\n";
Info<< "cend() ";
list1.cend().print(Info) << "\n";
{
Info<< "\ntest assignment of iterator\n";
list1.print(Info);
PackedList<3>::iterator cit = list1[25];
cit.print(Info);
list1.end().print(Info);
}
for
(
PackedList<3>::const_iterator cit = list1[30];
cit != list1.cend();
PackedList<3>::iterator cit = list1[5];
cit != list1.end();
++cit
)
{
cit.print(Info);
}
Info<< "\ntest operator[] auto-vivify\n";
const unsigned int val = list1[45];
Info<< "list[45]:" << val << "\n";
list1[45] = list1.max_value();
Info<< "list[45]:" << list1[45] << "\n";
list1[49] = list1.max_value();
list1.print(Info);
// Info<< "\ntest operator[] auto-vivify\n";
// const unsigned int val = list1[45];
//
// Info<< "list[45]:" << val << "\n";
// list1[45] = list1.max_value();
// Info<< "list[45]:" << list1[45] << "\n";
// list1[49] = list1.max_value();
// list1.print(Info);
Info<< "\ntest copy constructor + append\n";

View File

@ -61,8 +61,8 @@ int main(int argc, char *argv[])
}
cpuTime timer;
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
packed.resize(40);
packed.shrink();
@ -76,7 +76,7 @@ int main(int argc, char *argv[])
// Count packed
sum = 0;
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
forAll(packed, i)
{
@ -90,7 +90,7 @@ int main(int argc, char *argv[])
// Count packed
sum = 0;
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
sum += packed.count();
}
@ -101,7 +101,7 @@ int main(int argc, char *argv[])
// Dummy addition
sum = 0;
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
forAll(unpacked, i)
{
@ -117,7 +117,7 @@ int main(int argc, char *argv[])
// Read stl
sum = 0;
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
for(unsigned int i = 0; i < stlVector.size(); i++)
{
@ -130,7 +130,7 @@ int main(int argc, char *argv[])
// Read unpacked
sum = 0;
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
forAll(unpacked, i)
{
@ -143,7 +143,7 @@ int main(int argc, char *argv[])
// Read packed
sum = 0;
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
forAll(packed, i)
{
@ -157,7 +157,7 @@ int main(int argc, char *argv[])
// Read packed
sum = 0;
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
forAll(packed, i)
{
@ -171,7 +171,7 @@ int main(int argc, char *argv[])
// Read via iterator
sum = 0;
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
for
(
@ -190,7 +190,7 @@ int main(int argc, char *argv[])
// Read via iterator
sum = 0;
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
for
(
@ -209,7 +209,7 @@ int main(int argc, char *argv[])
// Read empty hash
sum = 0;
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
forAll(unpacked, i)
{
@ -223,7 +223,7 @@ int main(int argc, char *argv[])
// Read full hash
sum = 0;
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
forAll(unpacked, i)
{
@ -240,7 +240,7 @@ int main(int argc, char *argv[])
//
// Write stl
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
for (unsigned int i = 0; i < stlVector.size(); i++)
{
@ -250,7 +250,7 @@ int main(int argc, char *argv[])
Info<< "Writing stl:" << timer.cpuTimeIncrement() << " s" << endl;
// Write unpacked
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
forAll(unpacked, i)
{
@ -261,7 +261,7 @@ int main(int argc, char *argv[])
// Write packed
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
forAll(packed, i)
{
@ -273,7 +273,7 @@ int main(int argc, char *argv[])
// Write packed
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
forAll(packed, i)
{
@ -283,25 +283,9 @@ int main(int argc, char *argv[])
Info<< "Writing packed using set:" << timer.cpuTimeIncrement()
<< " s" << endl;
// Write packed
for (label iter = 0; iter < nIters; iter++)
{
for
(
PackedBoolList::iterator it = packed.begin();
it != packed.end();
++it
)
{
it = 1;
}
}
Info<< "Writing packed using iterator:" << timer.cpuTimeIncrement()
<< " s" << endl;
// Write packed
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
for
(
@ -313,12 +297,12 @@ int main(int argc, char *argv[])
it() = 1;
}
}
Info<< "Writing packed using iteratorRef:" << timer.cpuTimeIncrement()
Info<< "Writing packed using iterator:" << timer.cpuTimeIncrement()
<< " s" << endl;
// Write packed
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
packed = 0;
}
@ -327,7 +311,7 @@ int main(int argc, char *argv[])
// Write packed
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
packed = 1;
}
@ -338,7 +322,7 @@ int main(int argc, char *argv[])
PackedList<3> oddPacked(n, 3);
// Write packed
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
packed = 0;
}
@ -347,14 +331,14 @@ int main(int argc, char *argv[])
// Write packed
for (label iter = 0; iter < nIters; iter++)
for (label iter = 0; iter < nIters; ++iter)
{
packed = 1;
}
Info<< "Writing packed<3> uniform 1:" << timer.cpuTimeIncrement()
<< " s" << endl;
Info << "End\n" << endl;
return 0;