PackedList gets count() and trim() methods

- the bit counting is relatively fast:
  under 0.2 seconds for 1M bits counted 1000 times

- trim()'ing the final zero elements tested for a few cases,
  but might need more attention
This commit is contained in:
Mark Olesen
2009-01-28 16:32:47 +01:00
parent 22df173acb
commit 7c739978b1
7 changed files with 429 additions and 174 deletions

View File

@ -54,7 +54,7 @@ int main(int argc, char *argv[])
std::vector<bool> stlVector(n, true);
labelHashSet emptyHash;
labelHashSet fullHash;
labelHashSet fullHash(1000);
for(label i = 0; i < n; i++)
{
fullHash.insert(i);
@ -70,6 +70,35 @@ int main(int argc, char *argv[])
}
Info<< "resize/shrink/resize:" << timer.cpuTimeIncrement() << " s\n\n";
// set every other bit on:
Info<< "set every other bit on and count\n";
packed.storage() = 0xAAAAAAAAu;
// Count packed
sum = 0;
for (label iter = 0; iter < nIters; iter++)
{
forAll(packed, i)
{
sum += packed[i];
}
}
Info<< "Counting brute-force:" << timer.cpuTimeIncrement()
<< " s" << endl;
Info<< " sum " << sum << endl;
// Count packed
sum = 0;
for (label iter = 0; iter < nIters; iter++)
{
sum += packed.count();
}
Info<< "Counting via count():" << timer.cpuTimeIncrement()
<< " s" << endl;
Info<< " sum " << sum << endl;
// Dummy addition
sum = 0;
for (label iter = 0; iter < nIters; iter++)
@ -182,7 +211,7 @@ int main(int argc, char *argv[])
sum = 0;
for (label iter = 0; iter < nIters; iter++)
{
forAll(packed, i)
forAll(unpacked, i)
{
sum += emptyHash.found(i);
}
@ -196,7 +225,7 @@ int main(int argc, char *argv[])
sum = 0;
for (label iter = 0; iter < nIters; iter++)
{
forAll(packed, i)
forAll(unpacked, i)
{
sum += fullHash.found(i);
}
@ -206,7 +235,6 @@ int main(int argc, char *argv[])
Info<< " sum " << sum << endl;
//
// Write
//
@ -326,8 +354,7 @@ int main(int argc, char *argv[])
Info<< "Writing packed<3> uniform 1:" << timer.cpuTimeIncrement()
<< " s" << endl;
Info << "End\n" << endl;
return 0;