- The capitalization is consistent with most other template classes, but
more importantly frees up xfer() for use as method name without needing
special treatment to avoid ambiguities.
It seems reasonable to have different names for transfer(...) and xfer()
methods, since the transfer is occuring in different directions.
The xfer() method can thus replace the recently introduced zero-parameter
transfer() methods.
Other name candidates (eg, yield, release, etc.) were deemed too abstract.
- this should provide a slightly more naturally means to using transfer
constructors, for example
labelList list2(list1.transfer());
vs. labelList list2(xferMove(list1));
- returns a plain list where appropriate (eg, DynamicList, SortableList)
for example
labelList list2(dynList1.transfer());
vs. labelList list2(xferMoveTo<labelList>(dynList1));
- setSize() adjusts the addressable length only.
Changed setSize(label) usage to setCapacity(label) or reserve(label)
throughout. The final name (capacity vs. storageSize() vs. whatever) can
easily be decided at a later date.
- added setSize(label, const T&), which may still not be really useful, but
is at least now meaningful
- made shrink() a bit more legible.
- added append(UList<T>&)
- copying from a UList avoids reallocations where possible
The following bits of code continue to use the DynamicList::setSize(), but
appear to be legitimate (or the corresponding code itself needs rethinking).
src/OpenFOAM/meshes/primitiveMesh/primitiveMeshPointCells.C:167: error: within this context
src/OpenFOAM/lnInclude/faceTemplates.C:44: error: within this context
src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.C:178: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:737: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:741: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:745: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:749: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:754: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:935: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:940: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:1041: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:1046: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2161: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2162: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2201: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2205: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2261: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2262: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2263: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2264: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2265: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:3011: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:3076: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:3244: error: within this context
src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:3371: error: within this context
src/dynamicMesh/meshCut/cellLooper/topoCellLooper.C:73: error: within this context
src/dynamicMesh/meshCut/cellLooper/topoCellLooper.C:91: error: within this context
src/dynamicMesh/meshCut/cellLooper/topoCellLooper.C:73: error: within this context
src/dynamicMesh/meshCut/cellLooper/topoCellLooper.C:91: error: within this context
* DynamicList::allocSize(label)
- Adjust the allocated size. The addressed list can be truncated but not
extended, use setSize() for that.
* DynamicList::reserve(label)
- Reserve allocation for *at least* this number of elements.
Never shrinks the allocated size, nor touches the addressed list size.
* DynamicList::setSize(label)
- proposed behaviour:
Adjust the addressed list size, allocating extra space if required.
- The current behaviour is ambiguous about what addressable size will
actually get set and using it to extend the addressable size (as
per List) automatically shrinks the allocated space to this size!
- shrink() should now correctly actually shrink
- List::transfer(DynamicList&) invokes shrink() before transferring
contents: otherwise the ununsed allocated space is never recovered
until much, much later.
- DynamicList::transfer(List&) no longer throws a FatalError when
transferring in a smaller list. The original list contents are getting
tossed away anyhow!
- setSize(const label)
* When the new size is greater than the addressed list size, the allocated
list sizes is adjusted and the addressed size does not change.
* Otherwise the addressed list size is just reduced and the allocated
size does not change. inline void setSize(const label);
- setSize(const label, const T&)
Disabled, since the usefulness and semantics are not quite clear
- operator=(const T&)
should not affect the allocated size (BUGFIX)
- expansion of a list beyond the currently addressed list size
changes both the allocated size and the addressed list size
- contracting list below the currently addressed list size
changes the addressed list size only.
If someone really wishes to increase the underlying allocated list size
without touching the addressed list size:
prevSize = myList.size();
myList.setSize(largerSize);
myList.setSize(prevSize);
or introduce an equivalent allocSize(const label) method if this is needed
setSize(const label)
- When the new size is smaller than the addressed list size, the addressed
list size is reduced and the allocated size does not change.
- Otherwise the allocated size is adjusted, but the addressed list size
does not change.
setSize(const label, const T&)
- When the new size is larger than the addressed list size, both allocated
and addressed list sizes are adjusted.
NOTE: it might be more consistent to have setSize(label) also adjust the
addressed list size. This also corresponds to what previous releases
did, although I don't know if anyone has relied upon any particular
behaviour