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