From 7f062a8f5e399ddb91c08cd1c56b4593caef449f Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Tue, 8 Apr 2025 09:20:57 +0200 Subject: [PATCH] ENH: return plain List instead of shrinking the DynamicList Using 'return List(std::move(dynList))' for transfer of content (with implicit shrinking) into a plain List, and leave copy elision to do the rest. The implicit transfer (move construct List from DynamicList) will normally invoke resize (new/delete and moving elements). With 'return dynList.shrink()', it will first invoke an internal resize (new/delete and moving elements), followed by a copy construct as a plain list. STYLE: avoid implicit cast to 'const List&' in constructors --- .../IndirectList/IndirectListI.H | 4 +- .../polyTopoChange/combineFaces.C | 2 +- .../polyTopoChange/removeCells.C | 2 +- src/fileFormats/vtk/part/foamVtuSizing.C | 44 +++++++++---------- .../vtk/read/vtkUnstructuredReader.C | 3 +- .../utilities/vtkWrite/vtkWriteUpdate.C | 2 +- ...edPointDisplacementPointPatchVectorField.C | 2 +- .../tools/lumpedPointTools.C | 15 ++++--- .../meshRefinement/meshRefinementBaffles.C | 3 +- src/meshTools/regionSplit/localPointRegion.C | 3 +- .../surfaceFeatures/surfaceFeatures.C | 2 +- src/surfMesh/MeshedSurface/MeshedSurface.C | 4 +- .../abaqus/ABAQUSsurfaceFormat.C | 2 +- .../surfaceFormats/ac3d/AC3DsurfaceFormat.C | 4 +- .../surfaceFormats/fire/FLMAsurfaceFormat.C | 2 +- .../surfaceFormats/gts/GTSsurfaceFormat.C | 2 +- .../surfaceFormats/nas/NASsurfaceFormat.C | 2 +- .../surfaceFormats/obj/OBJsurfaceFormat.C | 2 +- .../surfaceFormats/smesh/SMESHsurfaceFormat.C | 2 +- .../starcd/STARCDsurfaceFormat.C | 2 +- .../surfaceFormats/stl/STLsurfaceFormat.C | 4 +- .../surfaceFormats/tri/TRIsurfaceFormat.C | 2 +- .../surfaceFormats/vtk/VTKsurfaceFormat.C | 2 +- .../surfaceFormats/vtp/VTPsurfaceFormat.C | 2 +- .../surfaceFormats/x3d/X3DsurfaceFormat.C | 2 +- 25 files changed, 60 insertions(+), 56 deletions(-) diff --git a/src/OpenFOAM/containers/IndirectLists/IndirectList/IndirectListI.H b/src/OpenFOAM/containers/IndirectLists/IndirectList/IndirectListI.H index d179d1c0bc..cb2d5e4fac 100644 --- a/src/OpenFOAM/containers/IndirectLists/IndirectList/IndirectListI.H +++ b/src/OpenFOAM/containers/IndirectLists/IndirectList/IndirectListI.H @@ -35,7 +35,8 @@ inline Foam::IndirectList::IndirectList const labelUList& addr ) : - IndirectListAddressing(addr), + // Copy addressing + IndirectListAddressing(labelList(addr)), UIndirectList ( values, @@ -51,6 +52,7 @@ inline Foam::IndirectList::IndirectList labelList&& addr ) : + // Move addressing IndirectListAddressing(std::move(addr)), UIndirectList ( diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C index 0233e32c5d..bcbe10bf8e 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C @@ -409,7 +409,7 @@ Foam::labelListList Foam::combineFaces::getMergeSets } } - return allFaceSets.shrink(); + return labelListList(std::move(allFaceSets)); } diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/removeCells.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/removeCells.C index 8be969216c..ab924692a2 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/removeCells.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/removeCells.C @@ -180,7 +180,7 @@ Foam::labelList Foam::removeCells::getExposedFaces } } - return exposedFaces.shrink(); + return labelList(std::move(exposedFaces)); } diff --git a/src/fileFormats/vtk/part/foamVtuSizing.C b/src/fileFormats/vtk/part/foamVtuSizing.C index 87a99cac4b..b8c6377c48 100644 --- a/src/fileFormats/vtk/part/foamVtuSizing.C +++ b/src/fileFormats/vtk/part/foamVtuSizing.C @@ -780,13 +780,12 @@ Foam::labelList Foam::vtk::vtuSizing::copyVertLabelsLegacy const label globalPointOffset ) { - if (!globalPointOffset) - { - return vertLabels; - } - labelList output(vertLabels); - renumberVertLabelsLegacy(output, globalPointOffset); + + if (globalPointOffset) + { + renumberVertLabelsLegacy(output, globalPointOffset); + } return output; } @@ -863,13 +862,12 @@ Foam::labelList Foam::vtk::vtuSizing::copyVertLabelsXml const label globalPointOffset ) { - if (!globalPointOffset) - { - return vertLabels; - } - labelList output(vertLabels); - renumberVertLabelsXml(output, globalPointOffset); + + if (globalPointOffset) + { + renumberVertLabelsXml(output, globalPointOffset); + } return output; } @@ -902,13 +900,12 @@ Foam::labelList Foam::vtk::vtuSizing::copyFaceLabelsXml const label globalPointOffset ) { - if (!globalPointOffset) - { - return faceLabels; - } - labelList output(faceLabels); - renumberFaceLabelsXml(output, globalPointOffset); + + if (globalPointOffset) + { + renumberFaceLabelsXml(output, globalPointOffset); + } return output; } @@ -957,13 +954,12 @@ Foam::labelList Foam::vtk::vtuSizing::copyFaceOffsetsXml const label prevOffset ) { - if (!prevOffset) - { - return faceOffsets; - } - labelList output(faceOffsets); - renumberFaceOffsetsXml(output, prevOffset); + + if (prevOffset) + { + renumberFaceOffsetsXml(output, prevOffset); + } return output; } diff --git a/src/fileFormats/vtk/read/vtkUnstructuredReader.C b/src/fileFormats/vtk/read/vtkUnstructuredReader.C index 40b45b37e7..71a64a8ae2 100644 --- a/src/fileFormats/vtk/read/vtkUnstructuredReader.C +++ b/src/fileFormats/vtk/read/vtkUnstructuredReader.C @@ -566,7 +566,8 @@ Foam::wordList Foam::vtkUnstructuredReader::readFieldArray ); fields.append(arrayName); } - return fields.shrink(); + + return wordList(std::move(fields)); } diff --git a/src/functionObjects/utilities/vtkWrite/vtkWriteUpdate.C b/src/functionObjects/utilities/vtkWrite/vtkWriteUpdate.C index 45ed8fdc3a..57c67cc186 100644 --- a/src/functionObjects/utilities/vtkWrite/vtkWriteUpdate.C +++ b/src/functionObjects/utilities/vtkWrite/vtkWriteUpdate.C @@ -78,7 +78,7 @@ Foam::labelList Foam::functionObjects::vtkWrite::getSelectedPatches } } - return patchIDs.shrink(); + return labelList(std::move(patchIDs)); } diff --git a/src/lumpedPointMotion/pointPatchFields/lumpedPointDisplacementPointPatchVectorField.C b/src/lumpedPointMotion/pointPatchFields/lumpedPointDisplacementPointPatchVectorField.C index b10fe98d72..160a9f75ba 100644 --- a/src/lumpedPointMotion/pointPatchFields/lumpedPointDisplacementPointPatchVectorField.C +++ b/src/lumpedPointMotion/pointPatchFields/lumpedPointDisplacementPointPatchVectorField.C @@ -137,7 +137,7 @@ Foam::lumpedPointDisplacementPointPatchVectorField::patchIds } } - return patchLst.shrink(); + return labelList(std::move(patchLst)); } diff --git a/src/lumpedPointMotion/tools/lumpedPointTools.C b/src/lumpedPointMotion/tools/lumpedPointTools.C index eba1d49d05..d676f6df2c 100644 --- a/src/lumpedPointMotion/tools/lumpedPointTools.C +++ b/src/lumpedPointMotion/tools/lumpedPointTools.C @@ -92,21 +92,24 @@ Foam::lumpedPointTools::lumpedPointStates Info<<"Reading states\n"; List entries(dict.lookup("response")); - DynamicList> states(entries.size()); + label statei = 0; + + // List + List> states(entries.size()); for (const dictionary& subDict : entries) { - states.append - ( + states[statei] = lumpedPointStateTuple ( subDict.get("time"), lumpedPointState(subDict) - ) - ); + ); + + ++statei; } - return states.shrink(); + return states; } diff --git a/src/mesh/snappyHexMesh/meshRefinement/meshRefinementBaffles.C b/src/mesh/snappyHexMesh/meshRefinement/meshRefinementBaffles.C index 2c92d2f059..7a233dc902 100644 --- a/src/mesh/snappyHexMesh/meshRefinement/meshRefinementBaffles.C +++ b/src/mesh/snappyHexMesh/meshRefinement/meshRefinementBaffles.C @@ -3995,7 +3995,8 @@ Foam::labelList Foam::meshRefinement::freeStandingBaffleFaces } } } - return faceLabels.shrink(); + + return labelList(std::move(faceLabels)); } diff --git a/src/meshTools/regionSplit/localPointRegion.C b/src/meshTools/regionSplit/localPointRegion.C index c4dd9b2eef..df78dbd4d6 100644 --- a/src/meshTools/regionSplit/localPointRegion.C +++ b/src/meshTools/regionSplit/localPointRegion.C @@ -677,7 +677,8 @@ Foam::List Foam::localPointRegion::findDuplicateFacePairs } } } - return baffles.shrink(); + + return List(std::move(baffles)); } diff --git a/src/meshTools/triSurface/surfaceFeatures/surfaceFeatures.C b/src/meshTools/triSurface/surfaceFeatures/surfaceFeatures.C index 9242d8c7d4..bd942e25d1 100644 --- a/src/meshTools/triSurface/surfaceFeatures/surfaceFeatures.C +++ b/src/meshTools/triSurface/surfaceFeatures/surfaceFeatures.C @@ -1113,7 +1113,7 @@ Foam::labelList Foam::surfaceFeatures::selectFeatureEdges } } - return selectedEdges.shrink(); + return labelList(std::move(selectedEdges)); } diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.C b/src/surfMesh/MeshedSurface/MeshedSurface.C index 3feb342a7b..30516a5518 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurface.C +++ b/src/surfMesh/MeshedSurface/MeshedSurface.C @@ -277,7 +277,7 @@ Foam::MeshedSurface::MeshedSurface const UList& zoneLst ) : - MeshReference(faceLst, pointLst), // Copy construct + MeshReference(List(faceLst), pointLst), // Copy construct faceIds_(), zones_(zoneLst) { @@ -310,7 +310,7 @@ Foam::MeshedSurface::MeshedSurface const UList& zoneNames ) : - MeshReference(faceLst, pointLst), // Copy construct + MeshReference(List(faceLst), pointLst), // Copy construct faceIds_(), zones_() { diff --git a/src/surfMesh/surfaceFormats/abaqus/ABAQUSsurfaceFormat.C b/src/surfMesh/surfaceFormats/abaqus/ABAQUSsurfaceFormat.C index a58d42cbc2..843d1f21c6 100644 --- a/src/surfMesh/surfaceFormats/abaqus/ABAQUSsurfaceFormat.C +++ b/src/surfMesh/surfaceFormats/abaqus/ABAQUSsurfaceFormat.C @@ -253,7 +253,7 @@ void Foam::fileFormats::ABAQUSsurfaceFormat::write const UList