Commit 8d63073b authored by Mark Olesen's avatar Mark Olesen
Browse files

Add protected member List::size(const label) and removed some of the old

usage of the public 'label& List::size()'.

IMO this method is much too dangerous to leave public - the different
signature is needed to avoid confusing the compiler.
parent a82aa515
......@@ -33,7 +33,7 @@ inline Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::DynamicList()
List<T>(SizeInc),
allocSize_(SizeInc)
{
List<T>::size() = 0;
List<T>::size(0);
}
......@@ -47,7 +47,7 @@ inline Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::DynamicList
List<T>(s),
allocSize_(s)
{
List<T>::size() = 0;
List<T>::size(0);
}
......@@ -81,14 +81,14 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::setSize
{
if (s < List<T>::size())
{
List<T>::size() = s;
List<T>::size(s);
}
else
{
label nextFree = List<T>::size();
allocSize_ = s;
List<T>::setSize(allocSize_);
List<T>::size() = nextFree;
List<T>::size(nextFree);
}
}
......@@ -102,14 +102,14 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::setSize
{
if (s < List<T>::size())
{
List<T>::size() = s;
List<T>::size(s);
}
else
{
label nextFree = List<T>::size();
allocSize_ = s;
List<T>::setSize(allocSize_, t);
List<T>::size() = nextFree;
List<T>::size(nextFree);
}
}
......@@ -117,7 +117,7 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::setSize
template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::clear()
{
List<T>::size() = 0;
List<T>::size(0);
}
......@@ -191,7 +191,7 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::append(const T& e)
List<T>::setSize(allocSize_);
}
List<T>::size() = nextFree;
List<T>::size(nextFree);
this->operator[](nextFree - 1) = e;
}
......@@ -212,7 +212,7 @@ inline T Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::remove()
const T& val = List<T>::operator[](nextFree);
List<T>::size() = nextFree;
List<T>::size(nextFree);
return val;
}
......@@ -240,7 +240,7 @@ inline T& Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::operator()
List<T>::setSize(allocSize_);
}
List<T>::size() = nextFree;
List<T>::size(nextFree);
return this->operator[](i);
}
......
......@@ -78,6 +78,12 @@ class List
public UList<T>
{
protected:
//- Override size to be inconsistent with allocated storage.
// Use with care.
inline void size(const label);
public:
// Constructors
......
......@@ -52,6 +52,13 @@ inline T& Foam::List<T>::newElmt(const label i)
}
template<class T>
inline void Foam::List<T>::size(const label n)
{
UList<T>::size_ = n;
}
template<class T>
inline Foam::label Foam::List<T>::size() const
{
......
......@@ -40,6 +40,17 @@ Foam::SortableList<Type>::SortableList(const List<Type>& values)
sort();
}
// Construct from List by transferring
template <class Type>
Foam::SortableList<Type>::SortableList(const xfer<List<Type> >& values)
:
List<Type>(),
indices_((*values).size())
{
List<Type>::transfer(*values);
sort();
}
// Construct given size. Sort later on.
template <class Type>
......@@ -86,7 +97,7 @@ void Foam::SortableList<Type>::sort()
indices_[i] = i;
}
//Foam::sort(indices_, less(*this));
// Foam::sort(indices_, less(*this));
Foam::stableSort(indices_, less(*this));
List<Type> tmpValues(this->size());
......
......@@ -29,6 +29,8 @@ Description
A list that is sorted upon construction or when explicitly requested
with the sort() method.
Uses the Foam::stableSort() algorithm.
SourceFiles
SortableList.C
......@@ -84,10 +86,14 @@ public:
// Constructors
//- Construct from List, sorting the elements. Starts with indices set
// to index in argument
//- Construct from List, sorting the elements.
// Starts with indices set to index in argument
explicit SortableList(const List<Type>&);
//- Construct from tranferred List, sorting the elements.
// Starts with indices set to index in argument
explicit SortableList(const xfer<List<Type> >&);
//- Construct given size. Sort later on.
explicit SortableList(const label size);
......
Markdown is supported
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