Commit 5514471c authored by Mark OLESEN's avatar Mark OLESEN
Browse files

BUG: FixedList '<' operator using a template parameter (fixes #458)

- cannot use comparison of list sizes. Okay for UList, but not here.

STYLE:
- don't need two iterators for the '<' comparison, can just access
  internal storage directly
parent f1ca8946
......@@ -33,7 +33,6 @@ See also
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "IOstreams.H"
#include "FixedList.H"
#include "IFstream.H"
#include "OFstream.H"
......@@ -64,6 +63,15 @@ int main(int argc, char *argv[])
Info<< "list2:" << list2
<< " hash:" << FixedList<label, 4>::Hash<>()(list2) << endl;
// Using FixedList for content too
{
List<FixedList<label, 4>> twolists{list, list2};
Info<<"List of FixedList: " << flatOutput(twolists) << endl;
sort(twolists);
// outer-sort only
Info<<"sorted FixedList : " << flatOutput(twolists) << endl;
}
Info<< "list: " << list << nl
<< "list2: " << list2 << endl;
list.swap(list2);
......
......@@ -70,31 +70,24 @@ bool Foam::FixedList<T, Size>::operator!=(const FixedList<T, Size>& a) const
template<class T, unsigned Size>
bool Foam::FixedList<T, Size>::operator<(const FixedList<T, Size>& a) const
{
for
(
const_iterator vi = cbegin(), ai = a.cbegin();
vi < cend() && ai < a.cend();
vi++, ai++
)
const T* const __restrict__ ptr1 = this->begin();
const T* const __restrict__ ptr2 = a.begin();
for (unsigned i=0; i<Size; ++i)
{
if (*vi < *ai)
if (ptr1[i] < ptr2[i])
{
return true;
}
else if (*vi > *ai)
else if (ptr1[i] > ptr2[i])
{
return false;
}
}
if (Size < a.Size)
{
return true;
}
else
{
return false;
}
// Contents look to be identical.
// The sizes are identical by definition (template parameter)
return false;
}
......
......@@ -196,14 +196,8 @@ bool Foam::UList<T>::operator<(const UList<T>& a) const
}
}
if (this->size_ < a.size_)
{
return true;
}
else
{
return false;
}
// Contents look to be identical, or lists have different sizes
return (this->size_ < a.size_);
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment