mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
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:
@ -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";
|
||||
|
||||
@ -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;
|
||||
|
||||
Reference in New Issue
Block a user