diff --git a/applications/test/DynamicList/Make/files b/applications/test/DynamicList/Make/files index b496842582..76d78735b0 100644 --- a/applications/test/DynamicList/Make/files +++ b/applications/test/DynamicList/Make/files @@ -1,3 +1,3 @@ -Test-DynamicList.C +Test-DynamicList.cxx EXE = $(FOAM_USER_APPBIN)/Test-DynamicList diff --git a/applications/test/DynamicList/Test-DynamicList.C b/applications/test/DynamicList/Test-DynamicList.cxx similarity index 100% rename from applications/test/DynamicList/Test-DynamicList.C rename to applications/test/DynamicList/Test-DynamicList.cxx diff --git a/applications/test/DynamicList2/Make/files b/applications/test/DynamicList2/Make/files index 78b8198c6a..ceb29c7712 100644 --- a/applications/test/DynamicList2/Make/files +++ b/applications/test/DynamicList2/Make/files @@ -1,3 +1,3 @@ -Test-DynamicList2.C +Test-DynamicList2.cxx EXE = $(FOAM_USER_APPBIN)/Test-DynamicList2 diff --git a/applications/test/DynamicList2/Test-DynamicList2.C b/applications/test/DynamicList2/Test-DynamicList2.cxx similarity index 87% rename from applications/test/DynamicList2/Test-DynamicList2.C rename to applications/test/DynamicList2/Test-DynamicList2.cxx index e75e0d2986..ef47d26783 100644 --- a/applications/test/DynamicList2/Test-DynamicList2.C +++ b/applications/test/DynamicList2/Test-DynamicList2.cxx @@ -52,7 +52,8 @@ void printInfo if (showSize) { Info<< " size=\"" << list.size() - << "\" capacity=\"" << list.capacity() << "\""; + << "\" capacity=\"" << list.capacity() << "\"" + << "\" min=\"" << SizeMin << "\"" ; if (list.cdata()) { Info<< " ptr=\"" << name(list.cdata()) << "\""; @@ -79,7 +80,8 @@ void printInfo if (showSize) { Info<< " size=\"" << list.size() - << "\" capacity=\"" << list.capacity() << "\""; + << "\" capacity=\"" << list.capacity() << "\"" + << "\" min=\"" << SizeMin << "\"" ; if (list.cdata()) { Info<< " ptr=\"" << name(list.cdata()) << "\""; @@ -168,6 +170,22 @@ int main(int argc, char *argv[]) printInfo("", list2); } + { + DynamicList list1(std::pair(16,0)); + list1 = -1; + + Info<< "construct with specified size/capacity" << nl; + printInfo("", list1); + } + + { + DynamicList list1(std::pair(8,16)); + list1 = -1; + + Info<< "construct with specified size/capacity" << nl; + printInfo("", list1); + } + Info<< "\nEnd\n"; return 0; diff --git a/applications/test/FixedList/Make/files b/applications/test/FixedList/Make/files index dcfee8af13..cd58141078 100644 --- a/applications/test/FixedList/Make/files +++ b/applications/test/FixedList/Make/files @@ -1,3 +1,3 @@ -Test-FixedList.C +Test-FixedList.cxx EXE = $(FOAM_USER_APPBIN)/Test-FixedList diff --git a/applications/test/FixedList/Test-FixedList.C b/applications/test/FixedList/Test-FixedList.cxx similarity index 99% rename from applications/test/FixedList/Test-FixedList.C rename to applications/test/FixedList/Test-FixedList.cxx index e77190a793..5f8a103441 100644 --- a/applications/test/FixedList/Test-FixedList.C +++ b/applications/test/FixedList/Test-FixedList.cxx @@ -41,7 +41,6 @@ See also #include "List.H" #include "IPstream.H" #include "OPstream.H" -#include using namespace Foam; diff --git a/applications/test/List/Test-List.cxx b/applications/test/List/Test-List.cxx index 96571f642c..0962997830 100644 --- a/applications/test/List/Test-List.cxx +++ b/applications/test/List/Test-List.cxx @@ -54,7 +54,6 @@ See also #include "ListPolicy.H" #include -#include #include // see issue #2083 diff --git a/applications/test/List3/Make/files b/applications/test/List3/Make/files index 640cc113d7..93c443e14e 100644 --- a/applications/test/List3/Make/files +++ b/applications/test/List3/Make/files @@ -1,3 +1,3 @@ -Test-List3.C +Test-List3.cxx EXE = $(FOAM_USER_APPBIN)/Test-List3 diff --git a/applications/test/List3/Test-List3.C b/applications/test/List3/Test-List3.cxx similarity index 100% rename from applications/test/List3/Test-List3.C rename to applications/test/List3/Test-List3.cxx diff --git a/applications/test/ListRead1/Make/files b/applications/test/ListRead1/Make/files index da3cc22d19..8631d227f0 100644 --- a/applications/test/ListRead1/Make/files +++ b/applications/test/ListRead1/Make/files @@ -1,3 +1,3 @@ -Test-ListRead1.C +Test-ListRead1.cxx EXE = $(FOAM_USER_APPBIN)/Test-ListRead1 diff --git a/applications/test/ListRead1/Test-ListRead1.C b/applications/test/ListRead1/Test-ListRead1.C index d7417235b4..aac211e2da 100644 --- a/applications/test/ListRead1/Test-ListRead1.C +++ b/applications/test/ListRead1/Test-ListRead1.C @@ -50,7 +50,6 @@ Description #include "ListPolicy.H" #include -#include #include using namespace Foam; diff --git a/applications/test/PackedList1/Make/files b/applications/test/PackedList1/Make/files index 76843f21f9..0b2b68d6ff 100644 --- a/applications/test/PackedList1/Make/files +++ b/applications/test/PackedList1/Make/files @@ -1,3 +1,3 @@ -Test-PackedList1.C +Test-PackedList1.cxx EXE = $(FOAM_USER_APPBIN)/Test-PackedList1 diff --git a/applications/test/PackedList1/Test-PackedList1.C b/applications/test/PackedList1/Test-PackedList1.cxx similarity index 100% rename from applications/test/PackedList1/Test-PackedList1.C rename to applications/test/PackedList1/Test-PackedList1.cxx diff --git a/applications/test/PackedList2/Make/files b/applications/test/PackedList2/Make/files index ce31f2fa8d..7c20add1a5 100644 --- a/applications/test/PackedList2/Make/files +++ b/applications/test/PackedList2/Make/files @@ -1,3 +1,3 @@ -Test-PackedList2.C +Test-PackedList2.cxx EXE = $(FOAM_USER_APPBIN)/Test-PackedList2 diff --git a/applications/test/PackedList2/Test-PackedList2.C b/applications/test/PackedList2/Test-PackedList2.cxx similarity index 100% rename from applications/test/PackedList2/Test-PackedList2.C rename to applications/test/PackedList2/Test-PackedList2.cxx diff --git a/applications/test/SubField/Make/files b/applications/test/SubField/Make/files index 406ae41531..9e8f8ac4bb 100644 --- a/applications/test/SubField/Make/files +++ b/applications/test/SubField/Make/files @@ -1,3 +1,3 @@ -Test-SubField.C +Test-SubField.cxx EXE = $(FOAM_USER_APPBIN)/Test-SubField diff --git a/applications/test/SubField/Test-SubField.C b/applications/test/SubField/Test-SubField.cxx similarity index 99% rename from applications/test/SubField/Test-SubField.C rename to applications/test/SubField/Test-SubField.cxx index bed02ecacb..17a41f14f3 100644 --- a/applications/test/SubField/Test-SubField.C +++ b/applications/test/SubField/Test-SubField.cxx @@ -38,7 +38,6 @@ Description #include "SubField.H" #include "labelRange.H" #include "ListOps.H" -#include using namespace Foam; diff --git a/applications/test/UIndirectList/Make/files b/applications/test/UIndirectList/Make/files index 8f70521989..9be6c13178 100644 --- a/applications/test/UIndirectList/Make/files +++ b/applications/test/UIndirectList/Make/files @@ -1,3 +1,3 @@ -Test-UIndirectList.C +Test-UIndirectList.cxx EXE = $(FOAM_USER_APPBIN)/Test-UIndirectList diff --git a/applications/test/UIndirectList/Test-UIndirectList.C b/applications/test/UIndirectList/Test-UIndirectList.cxx similarity index 100% rename from applications/test/UIndirectList/Test-UIndirectList.C rename to applications/test/UIndirectList/Test-UIndirectList.cxx diff --git a/applications/test/bitSet2/Make/files b/applications/test/bitSet2/Make/files index ff546fa179..e3ceca9e23 100644 --- a/applications/test/bitSet2/Make/files +++ b/applications/test/bitSet2/Make/files @@ -1,3 +1,3 @@ -Test-bitSet2.C +Test-bitSet2.cxx EXE = $(FOAM_USER_APPBIN)/Test-bitSet2 diff --git a/applications/test/bitSet2/Test-bitSet2.C b/applications/test/bitSet2/Test-bitSet2.cxx similarity index 99% rename from applications/test/bitSet2/Test-bitSet2.C rename to applications/test/bitSet2/Test-bitSet2.cxx index fb9bc746a1..8f9f5d487e 100644 --- a/applications/test/bitSet2/Test-bitSet2.C +++ b/applications/test/bitSet2/Test-bitSet2.cxx @@ -499,7 +499,7 @@ int main(int argc, char *argv[]) Info<<"bitSet "; report(list4); - list4.shrink(); + list4.shrink_to_fit(); Info<<"shrunk "; report(list4); diff --git a/applications/test/charList/Make/files b/applications/test/charList/Make/files index e7b5eba75b..f3f0e233d5 100644 --- a/applications/test/charList/Make/files +++ b/applications/test/charList/Make/files @@ -1,3 +1,3 @@ -Test-charList.C +Test-charList.cxx EXE = $(FOAM_USER_APPBIN)/Test-charList diff --git a/applications/test/charList/Test-charList.C b/applications/test/charList/Test-charList.cxx similarity index 99% rename from applications/test/charList/Test-charList.C rename to applications/test/charList/Test-charList.cxx index 32e9811093..8a480a287b 100644 --- a/applications/test/charList/Test-charList.C +++ b/applications/test/charList/Test-charList.cxx @@ -43,8 +43,6 @@ Description #include "SubList.H" #include "FlatOutput.H" -#include - using namespace Foam; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/test/checkIOspeed/Test-checkIOspeed.cxx b/applications/test/checkIOspeed/Test-checkIOspeed.cxx index a92159dde3..5db748b01c 100644 --- a/applications/test/checkIOspeed/Test-checkIOspeed.cxx +++ b/applications/test/checkIOspeed/Test-checkIOspeed.cxx @@ -50,8 +50,6 @@ Description #include "SliceStreamRepo.H" #endif -#include - using namespace Foam; diff --git a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C index 8f0ea89dc2..b009297bde 100644 --- a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C +++ b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C @@ -73,7 +73,6 @@ Description #include "perfectInterface.H" #include "IOobjectList.H" #include "ReadFields.H" -#include // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/containers/Bits/PackedList/PackedList.H b/src/OpenFOAM/containers/Bits/PackedList/PackedList.H index 5bdbbceb6a..aa6c755962 100644 --- a/src/OpenFOAM/containers/Bits/PackedList/PackedList.H +++ b/src/OpenFOAM/containers/Bits/PackedList/PackedList.H @@ -406,7 +406,10 @@ public: inline void clearStorage(); //- Shrink the allocated space to what is actually used. - inline void shrink(); + inline void shrink_to_fit(); + + //- Alias for shrink_to_fit() + void shrink() { this->shrink_to_fit(); } //- Swap contents with argument inline void swap(PackedList& rhs); diff --git a/src/OpenFOAM/containers/Bits/PackedList/PackedListI.H b/src/OpenFOAM/containers/Bits/PackedList/PackedListI.H index 8bdd10ddcc..a8e7f93dd9 100644 --- a/src/OpenFOAM/containers/Bits/PackedList/PackedListI.H +++ b/src/OpenFOAM/containers/Bits/PackedList/PackedListI.H @@ -597,7 +597,7 @@ inline void Foam::PackedList::clearStorage() template -inline void Foam::PackedList::shrink() +inline void Foam::PackedList::shrink_to_fit() { // Any unneeded space allocated? const label nblocks = num_blocks(size()); diff --git a/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H b/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H index 78385c9b5b..bf8768d9bc 100644 --- a/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H +++ b/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H @@ -120,6 +120,9 @@ public: //- Construct an empty list with given initial capacity inline explicit DynamicList(const label initialCapacity); + //- Construct with given size and capacity + inline explicit DynamicList(const std::pair& sizing); + //- Construct with given size and value for all elements. inline DynamicList(const label len, const T& val); @@ -133,21 +136,21 @@ public: template inline DynamicList(const DynamicList& lst); - //- Construct from UList. Size set to UList size. + //- Copy construct from UList. Size set to UList size. // Also constructs from DynamicList with different sizing parameters. inline explicit DynamicList(const UList& lst); //- Copy construct subset of list inline DynamicList(const UList& list, const labelUList& indices); - //- Construct from a FixedList + //- Copy construct from a FixedList template inline explicit DynamicList(const FixedList& lst); - //- Construct from an initializer list. Size set to list size. + //- Copy construct from an initializer list. Size set to list size. inline explicit DynamicList(std::initializer_list lst); - //- Construct from IndirectList. Size set to addressing size. + //- Copy construct from IndirectList. Size set to addressing size. template inline explicit DynamicList(const IndirectListBase& lst); @@ -200,7 +203,7 @@ public: //- Change the value for the list capacity directly (ADVANCED, UNSAFE) //- Does not perform any memory management or resizing. - inline void setCapacity_unsafe(const label len) noexcept; + void setCapacity_unsafe(const label len) noexcept { capacity_ = len; } //- Reserve allocation space for at least this size, allocating new //- space if required and \em retaining old content. @@ -238,12 +241,6 @@ public: // Otherwise all entries will be uninitialized. inline void resize_nocopy(const label len); - //- Same as resize() - void setSize(const label n) { this->resize(n); } - - //- Same as resize() - void setSize(const label n, const T& val) { this->resize(n, val); } - //- Clear the addressed list, i.e. set the size to zero. // Allocated size does not change inline void clear() noexcept; @@ -259,9 +256,6 @@ public: // \note when empty() it will delete any allocated memory. inline void shrink_unsafe(); - //- Calls shrink_to_fit() and returns a reference to the DynamicList. - inline DynamicList& shrink(); - // Edit @@ -304,7 +298,7 @@ public: template inline void push_back(const IndirectListBase& lst); - //- Move append list + //- Move append another list to the end of this list inline void push_back(List&& list); //- Move append list @@ -355,10 +349,10 @@ public: //- Return non-const access to an element, resizing list if needed inline T& operator()(const label i); - //- Assignment of all addressed entries to the given value + //- Assign addressed entries to the given value inline void operator=(const T& val); - //- Assignment of all entries to zero + //- Assign addressed entries to zero inline void operator=(Foam::zero); //- Assignment to UList @@ -418,6 +412,20 @@ public: // Housekeeping + //- Alias for resize() + void setSize(const label n) { this->resize(n); } + + //- Alias for resize() + void setSize(const label n, const T& val) { this->resize(n, val); } + + //- Calls shrink_to_fit() and returns a reference to the DynamicList. + //FOAM_DEPRECATED_FOR(2025-04, "shrink_to_fit()") + DynamicList& shrink() + { + this->shrink_to_fit(); + return *this; + } + //- Copy append an element to the end of this list. //FOAM_DEPRECATED_FOR(2022-10, "push_back()") void append(const T& val) { this->push_back(val); } diff --git a/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H b/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H index a3c004cd8a..17e199242d 100644 --- a/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H +++ b/src/OpenFOAM/containers/Lists/DynamicList/DynamicListI.H @@ -42,7 +42,7 @@ inline void Foam::DynamicList::doAssignDynList if (capacity_ < len) { // Needs more space for the copy operation - List::setAddressableSize(capacity_); // Use entire space + List::setAddressableSize(capacity_); List::resize_nocopy(len); capacity_ = List::size(); } @@ -68,23 +68,14 @@ inline void Foam::DynamicList::doCapacity // Addressable length, possibly truncated by new capacity const label currLen = Foam::min(List::size(), newCapacity); - // Corner case... - if (List::size() == newCapacity) - { - // Adjust addressable size to trigger proper resizing. - // Using (old size+1) is safe since it does not affect the 'overlap' - // of old and new addressable regions, but incurs fewew copy - // operations than extending to use the current capacity would. - List::setAddressableSize(currLen+1); - } - + List::setAddressableSize(capacity_); if (nocopy) { List::resize_nocopy(newCapacity); } else { - List::resize(newCapacity); + List::resize_copy(currLen, newCapacity); } capacity_ = List::size(); @@ -153,6 +144,19 @@ inline Foam::DynamicList::DynamicList(const label initialCapacity) } +template +inline Foam::DynamicList::DynamicList +( + const std::pair& sizing +) +: + List(std::max(sizing.first, sizing.second)), + capacity_(List::size()) +{ + List::setAddressableSize(sizing.first); +} + + template inline Foam::DynamicList::DynamicList ( @@ -326,16 +330,6 @@ inline void Foam::DynamicList::setCapacity_nocopy } -template -inline void Foam::DynamicList::setCapacity_unsafe -( - const label len -) noexcept -{ - capacity_ = len; -} - - template inline void Foam::DynamicList::reserve ( @@ -448,8 +442,7 @@ inline void Foam::DynamicList::shrink_to_fit() const label currLen = List::size(); if (currLen < capacity_) { - // Adjust addressable size to trigger proper resizing - List::setAddressableSize(currLen+1); + List::setAddressableSize(capacity_); List::resize(currLen); capacity_ = List::size(); } @@ -468,15 +461,6 @@ inline void Foam::DynamicList::shrink_unsafe() } -template -inline Foam::DynamicList& -Foam::DynamicList::shrink() -{ - this->shrink_to_fit(); - return *this; -} - - template inline void Foam::DynamicList::swap(List& list) @@ -608,7 +592,7 @@ inline void Foam::DynamicList::push_back const UList& list ) { - if (this == &list) + if (FOAM_UNLIKELY(this == &list)) { FatalErrorInFunction << "Attempted push_back to self" @@ -662,8 +646,7 @@ inline void Foam::DynamicList::push_back const label idx = this->size(); const label n = list.size(); - - resize(list + n); + resize(idx + n); auto iter = this->begin(idx); @@ -680,7 +663,7 @@ inline void Foam::DynamicList::push_back List&& list ) { - if (this == &list) + if (FOAM_UNLIKELY(this == &list)) { FatalErrorInFunction << "Attempted push_back to self" diff --git a/src/OpenFOAM/containers/Lists/List/List.C b/src/OpenFOAM/containers/Lists/List/List.C index bdf09f58c5..c9707ef29b 100644 --- a/src/OpenFOAM/containers/Lists/List/List.C +++ b/src/OpenFOAM/containers/Lists/List/List.C @@ -31,31 +31,34 @@ License #include "PtrList.H" #include "contiguous.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template -void Foam::List::doResize(const label len) +void Foam::List::resize_copy(const label count, const label len) { - if (len == this->size_) - { - return; - } + // Only a limited number of internal size checks. + // Caller knows what they are doing. - if (len > 0) + if (FOAM_LIKELY(len > 0)) { // With sign-check to avoid spurious -Walloc-size-larger-than - const label overlap = Foam::min(this->size_, len); + // const label oldLen = this->size_; + const label overlap = Foam::min(count, len); + // Extra safety, not currently necessary: + // const label overlap = Foam::min(Foam::min(count, oldLen), len); + + T* old = this->v_; if (overlap > 0) { // Recover overlapping content when resizing - T* old = this->v_; + this->size_ = len; this->v_ = new T[len]; // Can dispatch with - // - std::execution::parallel_unsequenced_policy - // - std::execution::unsequenced_policy + // - std::execution::par_unseq + // - std::execution::unseq std::move(old, (old + overlap), this->v_); delete[] old; @@ -63,7 +66,8 @@ void Foam::List::doResize(const label len) else { // No overlapping content - delete[] this->v_; + delete[] old; + this->size_ = len; this->v_ = new T[len]; } @@ -71,7 +75,7 @@ void Foam::List::doResize(const label len) else { // Or only #ifdef FULLDEBUG - if (len < 0) + if (FOAM_UNLIKELY(len < 0)) { FatalErrorInFunction << "bad size " << len @@ -91,14 +95,17 @@ Foam::List::List(const label len) : UList(nullptr, len) { - if (len < 0) + if (FOAM_UNLIKELY(len < 0)) { FatalErrorInFunction << "bad size " << len << abort(FatalError); } - doAlloc(); + if (len > 0) + { + doAlloc(); + } } @@ -107,14 +114,14 @@ Foam::List::List(const label len, const T& val) : UList(nullptr, len) { - if (len < 0) + if (FOAM_UNLIKELY(len < 0)) { FatalErrorInFunction << "bad size " << len << abort(FatalError); } - if (len) + if (len > 0) { doAlloc(); UList::operator=(val); @@ -127,14 +134,14 @@ Foam::List::List(const label len, Foam::zero) : UList(nullptr, len) { - if (len < 0) + if (FOAM_UNLIKELY(len < 0)) { FatalErrorInFunction << "bad size " << len << abort(FatalError); } - if (len) + if (len > 0) { doAlloc(); UList::operator=(Foam::zero{}); @@ -206,10 +213,8 @@ Foam::List::List(List& list, bool reuse) this->v_ = list.v_; list.v_ = nullptr; list.size_ = 0; - return; } - - if (this->size_) + else if (this->size_ > 0) { doAlloc(); UList::deepCopy(list); @@ -316,7 +321,13 @@ template void Foam::List::resize(const label len, const T& val) { const label oldLen = this->size_; - this->doResize(len); + + if (oldLen == len) + { + return; + } + + this->resize_copy(oldLen, len); // Fill trailing part with new values if (oldLen < this->size_) diff --git a/src/OpenFOAM/containers/Lists/List/List.H b/src/OpenFOAM/containers/Lists/List/List.H index 8f2d96a99f..5c9d7d1c8f 100644 --- a/src/OpenFOAM/containers/Lists/List/List.H +++ b/src/OpenFOAM/containers/Lists/List/List.H @@ -93,10 +93,6 @@ class List template inline void copyList(const ListType& list, const ListIndices& indices); - //- Change allocation size of List, retaining old contents. - // Backend for resize - void doResize(const label len); - //- Construct given begin/end iterators and number of elements // Since the size is provided, the end iterator is actually ignored. template @@ -118,6 +114,16 @@ class List void setCapacity_nocopy(const label len) { resize_nocopy(len); } +protected: + + // Protected Member Functions + + //- Low-level resizing (backend for resize). + //- Change allocation size of list, retaining the first count contents. + // \note Only uses a limited number of internal checks. + void resize_copy(const label count, const label len); + + public: // Related types diff --git a/src/OpenFOAM/containers/Lists/List/ListI.H b/src/OpenFOAM/containers/Lists/List/ListI.H index bdb510f837..228df08392 100644 --- a/src/OpenFOAM/containers/Lists/List/ListI.H +++ b/src/OpenFOAM/containers/Lists/List/ListI.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2017-2023 OpenCFD Ltd. + Copyright (C) 2017-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -102,7 +102,7 @@ inline Foam::List::List : UList(nullptr, len) { - if (this->size_) + if (len > 0) { doAlloc(); @@ -149,9 +149,9 @@ namespace Foam { // Template specialization for bool. Fills new entries with false template<> - inline void List::resize(const label newLen) + inline void List::resize(const label len) { - this->resize(newLen, false); + this->resize(len, false); } } @@ -159,7 +159,10 @@ namespace Foam template inline void Foam::List::resize(const label len) { - this->doResize(len); + if (this->size_ != len) + { + this->resize_copy(this->size_, len); + } } @@ -269,7 +272,6 @@ inline void Foam::List::push_back(const IndirectListBase& list) const label idx = this->size(); const label n = list.size(); - resize(idx + n); auto iter = this->begin(idx); diff --git a/src/OpenFOAM/containers/Lists/List/SubList.H b/src/OpenFOAM/containers/Lists/List/SubList.H index 2cd0e10c18..ba7d320c67 100644 --- a/src/OpenFOAM/containers/Lists/List/SubList.H +++ b/src/OpenFOAM/containers/Lists/List/SubList.H @@ -172,7 +172,11 @@ public: // Member Operators //- Allow cast to a const List\& - inline operator const Foam::List&() const; + FOAM_DEPRECATED_STRICTER(2025-04, "dereference as SubList, not List?") + operator const Foam::List&() const + { + return *reinterpret_cast*>(this); + } //- Copy assign entries (deep copy) from given sub-list. //- Sizes must match! diff --git a/src/OpenFOAM/containers/Lists/List/SubListI.H b/src/OpenFOAM/containers/Lists/List/SubListI.H index 1bec82958e..567fa32f25 100644 --- a/src/OpenFOAM/containers/Lists/List/SubListI.H +++ b/src/OpenFOAM/containers/Lists/List/SubListI.H @@ -214,13 +214,6 @@ inline Foam::UList& Foam::SubList::reset // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // -template -inline Foam::SubList::operator const Foam::List&() const -{ - return *reinterpret_cast*>(this); -} - - template inline void Foam::SubList::operator=(const SubList& list) { diff --git a/src/OpenFOAM/containers/Lists/List/UList.H b/src/OpenFOAM/containers/Lists/List/UList.H index 2af60648ff..0c54fe8a59 100644 --- a/src/OpenFOAM/containers/Lists/List/UList.H +++ b/src/OpenFOAM/containers/Lists/List/UList.H @@ -427,7 +427,7 @@ public: //- Allow cast to a const List&. // \note Marked as "strictly" deprecated. // Currently (2025-04) code still depends on this cast. - FOAM_DEPRECATED_STRICTER(2025-04, "dereference as UList, not List") + FOAM_DEPRECATED_STRICTER(2025-04, "dereference as UList, not List?") operator const Foam::List&() const { return *reinterpret_cast*>(this); diff --git a/src/OpenFOAM/containers/PtrLists/PtrDynList/PtrDynList.H b/src/OpenFOAM/containers/PtrLists/PtrDynList/PtrDynList.H index ee33bbef2d..f55ee7e022 100644 --- a/src/OpenFOAM/containers/PtrLists/PtrDynList/PtrDynList.H +++ b/src/OpenFOAM/containers/PtrLists/PtrDynList/PtrDynList.H @@ -76,9 +76,12 @@ public: //- Default construct inline constexpr PtrDynList() noexcept; - //- Construct with given capacity. + //- Construct with given initial capacity inline explicit PtrDynList(const label len); + //- Construct with given size and capacity + inline explicit PtrDynList(const std::pair& sizing); + //- Copy construct using 'clone()' method on each element inline PtrDynList(const PtrDynList& list); @@ -107,6 +110,10 @@ public: //- Size of the underlying storage. label capacity() const noexcept { return capacity_; } + //- Change the value for the list capacity directly (ADVANCED, UNSAFE) + //- Does not perform any memory management or resizing. + void setCapacity_unsafe(const label len) noexcept { capacity_ = len; } + //- Reserve allocation space for at least this size. inline void reserve(const label len); @@ -138,8 +145,8 @@ public: // \note when empty() it will delete any allocated memory. inline void shrink_unsafe(); - //- Calls shrink_to_fit() - void shrink() { shrink_to_fit(); } + //- Alias for shrink_to_fit() + void shrink() { this->shrink_to_fit(); } // Edit diff --git a/src/OpenFOAM/containers/PtrLists/PtrDynList/PtrDynListI.H b/src/OpenFOAM/containers/PtrLists/PtrDynList/PtrDynListI.H index fccedeccfb..79763cf398 100644 --- a/src/OpenFOAM/containers/PtrLists/PtrDynList/PtrDynListI.H +++ b/src/OpenFOAM/containers/PtrLists/PtrDynList/PtrDynListI.H @@ -49,6 +49,19 @@ inline Foam::PtrDynList::PtrDynList(const label len) } +template +inline Foam::PtrDynList::PtrDynList +( + const std::pair& sizing +) +: + PtrList(std::max(sizing.first, sizing.second)), + capacity_(PtrList::size()) +{ + PtrList::setAddressableSize(sizing.first); +} + + template inline Foam::PtrDynList::PtrDynList ( @@ -220,8 +233,7 @@ inline void Foam::PtrDynList::shrink_to_fit() const label currLen = PtrList::size(); if (currLen < capacity_) { - // Adjust addressable size to trigger proper resizing - PtrList::setAddressableSize(currLen+1); + PtrList::setAddressableSize(capacity_); PtrList::resize(currLen); capacity_ = PtrList::size(); } diff --git a/src/OpenFOAM/containers/PtrLists/PtrList/PtrList.H b/src/OpenFOAM/containers/PtrLists/PtrList/PtrList.H index 72c8389278..89e4a9688a 100644 --- a/src/OpenFOAM/containers/PtrLists/PtrList/PtrList.H +++ b/src/OpenFOAM/containers/PtrLists/PtrList/PtrList.H @@ -249,7 +249,7 @@ public: } //- Same as resize() - void setSize(const label newLen) { this->resize(newLen); } + void setSize(const label n) { this->resize(n); } //- Move append an element to the end of the list //FOAM_DEPRECATED_FOR(2022-10, "push_back()") diff --git a/src/OpenFOAM/expressions/value/exprValue.H b/src/OpenFOAM/expressions/value/exprValue.H index 97e057614d..c65fcb93f1 100644 --- a/src/OpenFOAM/expressions/value/exprValue.H +++ b/src/OpenFOAM/expressions/value/exprValue.H @@ -308,7 +308,7 @@ public: void operator=(const exprValue& rhs) { deepCopy(rhs); } //- Assign from zero. Changes value but not type - void operator=(const Foam::zero) { fill_zero(); } + void operator=(Foam::zero) { fill_zero(); } // Low-level access diff --git a/src/OpenFOAM/expressions/value/exprValueFieldTag.H b/src/OpenFOAM/expressions/value/exprValueFieldTag.H index 07f8666e49..b1c3295c4a 100644 --- a/src/OpenFOAM/expressions/value/exprValueFieldTag.H +++ b/src/OpenFOAM/expressions/value/exprValueFieldTag.H @@ -214,7 +214,7 @@ public: // Member Operators //- Assign from zero. Changes value but not type - void operator=(const Foam::zero) { value_ = Foam::zero{}; } + void operator=(Foam::zero) { value_ = Foam::zero{}; } //- Compare (uniformity,value) for equality bool operator==(const exprValueFieldTag&) const; diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.C b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.C index 362c5a355e..6328e7c062 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.C +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.C @@ -331,7 +331,7 @@ void clamp ( DimensionedField& result, const DimensionedField& f1, - const Foam::zero_one + Foam::zero_one ) { const MinMax range(Foam::zero_one{}); @@ -345,7 +345,7 @@ tmp> clamp ( const DimensionedField& f1, - const Foam::zero_one + Foam::zero_one ) { auto tres = @@ -367,7 +367,7 @@ tmp> clamp ( const tmp>& tf1, - const Foam::zero_one + Foam::zero_one ) { const auto& f1 = tf1(); diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.H b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.H index 32ce17fcf0..b6ad90506c 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.H +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.H @@ -149,7 +149,7 @@ void clamp ( DimensionedField& result, const DimensionedField& f1, - const Foam::zero_one + Foam::zero_one ); template @@ -157,7 +157,7 @@ tmp> clamp ( const DimensionedField& f1, - const Foam::zero_one + Foam::zero_one ); template @@ -165,7 +165,7 @@ tmp> clamp ( const tmp>& tf1, - const Foam::zero_one + Foam::zero_one ); BINARY_TYPE_FUNCTION_FS(Type, Type, MinMax, clamp) diff --git a/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.C b/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.C index 1cd6a54c6b..7b21f1d7ea 100644 --- a/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.C +++ b/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.C @@ -458,7 +458,7 @@ void FieldField::operator=(const Type& val) template class Field, class Type> -void FieldField::operator=(const Foam::zero) +void FieldField::operator=(Foam::zero) { forAll(*this, i) { diff --git a/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.H b/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.H index f1c9fda937..6924b0b32b 100644 --- a/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.H +++ b/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.H @@ -197,7 +197,7 @@ public: void operator=(const Type& val); //- Assign uniform zero - void operator=(const Foam::zero); + void operator=(Foam::zero); void operator+=(const FieldField&); void operator+=(const tmp>&); diff --git a/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.H b/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.H index 5f73c83e11..7451c5ffde 100644 --- a/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.H +++ b/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.H @@ -29,6 +29,7 @@ Class Description Dynamically sized Field. + Similar to DynamicList, but inheriting from a Field instead of a List. SourceFiles DynamicFieldI.H @@ -95,15 +96,6 @@ class DynamicField public: - // Static Member Functions - - //- Return a null DynamicField (reference to a nullObject). - static const DynamicField& null() noexcept - { - return NullObjectRef>(); - } - - // Constructors //- Default construct, an empty field without allocation. @@ -112,11 +104,14 @@ public: //- Construct empty field with given initial capacity inline explicit DynamicField(const label initialCapacity); + //- Construct with given size and capacity + inline explicit DynamicField(const std::pair& sizing); + //- Construct given size and initial value inline DynamicField(const label len, const T& val); //- Construct given size and initial value of zero - inline DynamicField(const label len, const Foam::zero); + inline DynamicField(const label len, Foam::zero); //- Copy construct inline DynamicField(const DynamicField& list); @@ -222,7 +217,7 @@ public: //- Change the value for the list capacity directly (ADVANCED, UNSAFE) //- Does not perform any memory management or resizing. - inline void setCapacity_unsafe(const label len) noexcept; + void setCapacity_unsafe(const label len) noexcept { capacity_ = len; } //- Reserve allocation space for at least this size, allocating new //- space if required and \em retaining old content. @@ -248,21 +243,18 @@ public: // setting values (as per List usage). inline void resize(const label len); - //- Alter addressable size and fill new space with constant value + //- Alter addressable size and fill \em new entries with constant value inline void resize(const label len, const T& val); + //- Alter addressable size and set val for \em all addressed entries + inline void resize_fill(const label len, const T& val); + //- Alter addressable list size, allocating new space if required //- \em without necessarily recovering old content. // If no reallocation is required, the contents remain untouched. // Otherwise all entries will be uninitialized. inline void resize_nocopy(const label len); - //- Alias for resize() - void setSize(const label n) { this->resize(n); } - - //- Alias for resize() - void setSize(const label n, const T& val) { this->resize(n, val); } - //- Clear the addressed list, i.e. set the size to zero. // Allocated size does not change inline void clear() noexcept; @@ -278,9 +270,6 @@ public: // \note when empty() it will delete any allocated memory. inline void shrink_unsafe(); - //- Calls shrink_to_fit() and returns a reference to the DynamicField. - inline DynamicField& shrink(); - // Edit @@ -289,11 +278,11 @@ public: //- Swap content, independent of sizing parameter template - inline void swap(DynamicField& other); + inline void swap(DynamicField& other) noexcept; //- Swap content with DynamicList, independent of sizing parameter template - inline void swap(DynamicList& other); + inline void swap(DynamicList& other) noexcept; //- Transfer the parameter contents into this inline void transfer(List& list); @@ -311,7 +300,7 @@ public: template inline T& emplace_back(Args&&... args); - //- Copy append an element at the end of the list + //- Copy append an element to the end of the list inline void push_back(const T& val); //- Move append an element @@ -340,7 +329,7 @@ public: inline void operator=(const T& val); //- Assign addressed entries to zero - inline void operator=(const Foam::zero); + inline void operator=(Foam::zero); //- Copy assignment inline void operator=(const UList& list); @@ -392,6 +381,20 @@ public: // Housekeeping + //- Alias for resize() + void setSize(const label n) { this->resize(n); } + + //- Alias for resize() + void setSize(const label n, const T& val) { this->resize(n, val); } + + //- Calls shrink_to_fit() and returns a reference to the DynamicField. + //FOAM_DEPRECATED_FOR(2025-04, "shrink_to_fit()") + DynamicField& shrink() + { + this->shrink_to_fit(); + return *this; + } + //- Append an element at the end of the list //FOAM_DEPRECATED_FOR(2022-10, "push_back()") void append(const T& val) { this->push_back(val); } diff --git a/src/OpenFOAM/fields/Fields/DynamicField/DynamicFieldI.H b/src/OpenFOAM/fields/Fields/DynamicField/DynamicFieldI.H index 18012d91f2..1b5b6fd69d 100644 --- a/src/OpenFOAM/fields/Fields/DynamicField/DynamicFieldI.H +++ b/src/OpenFOAM/fields/Fields/DynamicField/DynamicFieldI.H @@ -40,7 +40,7 @@ inline void Foam::DynamicField::doAssignDynList if (capacity_ < len) { // Needs more space for the copy operation - List::setAddressableSize(capacity_); // Use entire space + List::setAddressableSize(capacity_); List::resize_nocopy(len); capacity_ = List::size(); } @@ -66,19 +66,14 @@ inline void Foam::DynamicField::doCapacity // Addressable length, possibly truncated by new capacity const label currLen = Foam::min(List::size(), newCapacity); - // Corner case - see comments in DynamicList doCapacity - if (List::size() == newCapacity) - { - List::setAddressableSize(currLen+1); - } - + List::setAddressableSize(capacity_); if (nocopy) { List::resize_nocopy(newCapacity); } else { - List::resize(newCapacity); + List::resize_copy(currLen, newCapacity); } capacity_ = List::size(); @@ -147,6 +142,19 @@ inline Foam::DynamicField::DynamicField(const label initialCapacity) } +template +inline Foam::DynamicField::DynamicField +( + const std::pair& sizing +) +: + Field(std::max(sizing.first, sizing.second)), + capacity_(Field::size()) +{ + List::setAddressableSize(sizing.first); +} + + template inline Foam::DynamicField::DynamicField ( @@ -163,7 +171,7 @@ template inline Foam::DynamicField::DynamicField ( const label len, - const Foam::zero + Foam::zero ) : Field(len, Foam::zero{}), @@ -423,16 +431,6 @@ inline void Foam::DynamicField::setCapacity_nocopy } -template -inline void Foam::DynamicField::setCapacity_unsafe -( - const label len -) noexcept -{ - capacity_ = len; -} - - template inline void Foam::DynamicField::reserve ( @@ -491,6 +489,18 @@ inline void Foam::DynamicField::resize_nocopy } +template +inline void Foam::DynamicField::resize_fill +( + const label len, + const T& val +) +{ + this->doResize(true, len); // nocopy = true + UList::operator=(val); +} + + template inline void Foam::DynamicField::resize ( @@ -534,8 +544,7 @@ inline void Foam::DynamicField::shrink_to_fit() if (currLen < capacity_) { - // Adjust addressable size to trigger proper resizing - List::setAddressableSize(currLen+1); + List::setAddressableSize(capacity_); List::resize(currLen); capacity_ = List::size(); } @@ -554,15 +563,6 @@ inline void Foam::DynamicField::shrink_unsafe() } -template -inline Foam::DynamicField& -Foam::DynamicField::shrink() -{ - this->shrink_to_fit(); - return *this; -} - - template inline void Foam::DynamicField::swap(List& list) @@ -592,7 +592,7 @@ template inline void Foam::DynamicField::swap ( DynamicField& other -) +) noexcept { if ( @@ -616,7 +616,7 @@ template inline void Foam::DynamicField::swap ( DynamicList& other -) +) noexcept { if ( @@ -822,7 +822,7 @@ inline void Foam::DynamicField::operator= template inline void Foam::DynamicField::operator= ( - const Foam::zero + Foam::zero ) { UList::operator=(Foam::zero{}); diff --git a/src/OpenFOAM/fields/Fields/Field/Field.H b/src/OpenFOAM/fields/Fields/Field/Field.H index 3441a50e0b..c49292a066 100644 --- a/src/OpenFOAM/fields/Fields/Field/Field.H +++ b/src/OpenFOAM/fields/Fields/Field/Field.H @@ -145,16 +145,16 @@ public: inline Field(const label len, const Type& val); //- Construct given size and initial values of zero - inline Field(const label len, const Foam::zero); + inline Field(const label len, Foam::zero); //- Construct with length=1, copying the value as the only content - inline Field(const Foam::one, const Type& val); + inline Field(Foam::one, const Type& val); //- Construct with length=1, moving the value as the only content - inline Field(const Foam::one, Type&& val); + inline Field(Foam::one, Type&& val); //- Construct with length=1, initializing content to zero - inline Field(const Foam::one, const Foam::zero); + inline Field(Foam::one, Foam::zero); //- Copy construct inline Field(const Field& fld); @@ -276,7 +276,7 @@ public: //- and assign its contents to this. The behaviour largely as //- described in assign(): // - For MUST_READ and key not found: FatalIOError. - // - For LAZY_READ and key not found: initialise field with Zero. + // - For LAZY_READ and key not found: initialise field with zero. // - For NO_READ and key not found: simply size the field. // . Field @@ -508,7 +508,7 @@ public: inline void operator=(const Type& val); //- Assign entries to zero - inline void operator=(const Foam::zero); + inline void operator=(Foam::zero); template void operator=(const VectorSpace&); diff --git a/src/OpenFOAM/fields/Fields/Field/FieldI.H b/src/OpenFOAM/fields/Fields/Field/FieldI.H index 4c34df88b1..6d1bf437dd 100644 --- a/src/OpenFOAM/fields/Fields/Field/FieldI.H +++ b/src/OpenFOAM/fields/Fields/Field/FieldI.H @@ -29,8 +29,6 @@ License template inline constexpr Foam::Field::Field() noexcept -: - List() {} @@ -49,28 +47,28 @@ inline Foam::Field::Field(const label len, const Type& val) template -inline Foam::Field::Field(const label len, const Foam::zero) +inline Foam::Field::Field(const label len, Foam::zero) : List(len, Foam::zero{}) {} template -inline Foam::Field::Field(const Foam::one, const Type& val) +inline Foam::Field::Field(Foam::one, const Type& val) : List(Foam::one{}, val) {} template -inline Foam::Field::Field(const Foam::one, Type&& val) +inline Foam::Field::Field(Foam::one, Type&& val) : List(Foam::one{}, std::move(val)) {} template -inline Foam::Field::Field(const Foam::one, const Foam::zero) +inline Foam::Field::Field(Foam::one, Foam::zero) : List(Foam::one{}, Foam::zero{}) {} @@ -209,7 +207,7 @@ inline void Foam::Field::operator=(const Type& val) template -inline void Foam::Field::operator=(const Foam::zero) +inline void Foam::Field::operator=(Foam::zero) { List::operator=(Foam::zero{}); } diff --git a/src/OpenFOAM/fields/Fields/Field/SubField.H b/src/OpenFOAM/fields/Fields/Field/SubField.H index 15e09522a7..be237c924e 100644 --- a/src/OpenFOAM/fields/Fields/Field/SubField.H +++ b/src/OpenFOAM/fields/Fields/Field/SubField.H @@ -136,7 +136,13 @@ public: // Member Operators //- Allow cast to a const Field\& - inline operator const Foam::Field&() const; + // \note Marked as "strictly" deprecated. + // Currently (2025-04) code still depends on this cast. + FOAM_DEPRECATED_STRICTER(2025-04, "dereference as SubField, not Field?") + operator const Foam::Field&() const + { + return *reinterpret_cast*>(this); + } //- Copy assign via UList operator. Takes linear time. inline void operator=(const SubField&); @@ -148,7 +154,7 @@ public: inline void operator=(const Type& val); //- Assign all entries to zero - inline void operator=(const Foam::zero); + inline void operator=(Foam::zero); //- Copy assign via UList operator. Takes linear time. template diff --git a/src/OpenFOAM/fields/Fields/Field/SubFieldI.H b/src/OpenFOAM/fields/Fields/Field/SubFieldI.H index 235f981da7..0aff687982 100644 --- a/src/OpenFOAM/fields/Fields/Field/SubFieldI.H +++ b/src/OpenFOAM/fields/Fields/Field/SubFieldI.H @@ -125,13 +125,6 @@ inline Foam::tmp> Foam::SubField::T() const // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // -template -inline Foam::SubField::operator const Foam::Field&() const -{ - return *reinterpret_cast*>(this); -} - - template inline void Foam::SubField::operator=(const SubField& rhs) { @@ -154,7 +147,7 @@ inline void Foam::SubField::operator=(const Type& val) template -inline void Foam::SubField::operator=(const Foam::zero) +inline void Foam::SubField::operator=(Foam::zero) { SubList::operator=(Foam::zero{}); } diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.C b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.C index 506942bb91..3336a34721 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.C +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.C @@ -524,7 +524,7 @@ void clamp ( GeometricField& result, const GeometricField& f1, - const Foam::zero_one + Foam::zero_one ) { const MinMax range(Foam::zero_one{}); @@ -544,7 +544,7 @@ tmp> clamp ( const GeometricField& f1, - const Foam::zero_one + Foam::zero_one ) { auto tres = @@ -566,7 +566,7 @@ tmp> clamp ( const tmp>& tf1, - const Foam::zero_one + Foam::zero_one ) { const auto& f1 = tf1(); diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.H b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.H index 5aab42aae0..92fe6c87aa 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.H +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.H @@ -287,7 +287,7 @@ void clamp ( GeometricField& result, const GeometricField& f1, - const Foam::zero_one + Foam::zero_one ); template class PatchField, class GeoMesh> @@ -295,7 +295,7 @@ tmp> clamp ( const GeometricField& f1, - const Foam::zero_one + Foam::zero_one ); template class PatchField, class GeoMesh> @@ -303,7 +303,7 @@ tmp> clamp ( const tmp>& tf1, - const Foam::zero_one + Foam::zero_one ); BINARY_TYPE_FUNCTION_FS(Type, Type, MinMax, clamp) diff --git a/src/OpenFOAM/include/stdFoam.H b/src/OpenFOAM/include/stdFoam.H index 24cf6c14b3..5878f8e790 100644 --- a/src/OpenFOAM/include/stdFoam.H +++ b/src/OpenFOAM/include/stdFoam.H @@ -24,7 +24,7 @@ License along with OpenFOAM. If not, see . Description - Includes some standard C++ headers, defines global macros and templates + Includes some common C++ headers, defines global macros and templates used in multiple places by OpenFOAM. \*---------------------------------------------------------------------------*/ @@ -36,6 +36,7 @@ Description #include #include // for std::begin, std::end, ... #include +#include // for std::iota, std::reduce, ... #include #include diff --git a/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.H b/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.H index 60e985a25e..017a6adf67 100644 --- a/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.H +++ b/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.H @@ -43,7 +43,6 @@ SourceFiles #define Foam_DiagonalMatrix_H #include "List.H" -#include // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/matrices/SquareMatrix/SquareMatrix.H b/src/OpenFOAM/matrices/SquareMatrix/SquareMatrix.H index 0ef3cd52a1..96f6e53f11 100644 --- a/src/OpenFOAM/matrices/SquareMatrix/SquareMatrix.H +++ b/src/OpenFOAM/matrices/SquareMatrix/SquareMatrix.H @@ -45,7 +45,6 @@ SourceFiles #include "Matrix.H" #include "Identity.H" -#include // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolverSolve.C b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolverSolve.C index 5e472755d6..fafaabee13 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolverSolve.C +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolverSolve.C @@ -239,7 +239,7 @@ void Foam::GAMGSolver::Vcycle coarseCorrFields[leveli], const_cast ( - ACf.operator const solveScalarField&() + static_cast(ACf) ), matrixLevels_[leveli], interfaceLevelsBouCoeffs_[leveli], @@ -346,11 +346,10 @@ void Foam::GAMGSolver::Vcycle scratch1, coarseCorrFields[leveli].size() ); - solveScalarField& ACfRef = - const_cast - ( - ACf.operator const solveScalarField&() - ); + auto& ACfRef = const_cast + ( + static_cast(ACf) + ); if (interpolateCorrection_) { diff --git a/src/OpenFOAM/meshes/boundBox/boundBox.H b/src/OpenFOAM/meshes/boundBox/boundBox.H index 554c93285c..109a53ff79 100644 --- a/src/OpenFOAM/meshes/boundBox/boundBox.H +++ b/src/OpenFOAM/meshes/boundBox/boundBox.H @@ -164,7 +164,7 @@ public: inline explicit boundBox(const point& p); //- Construct a 0/1 unit bounding box - inline explicit boundBox(const Foam::zero_one); + inline explicit boundBox(Foam::zero_one); //- Construct from bound box min/max points inline boundBox(const point& min, const point& max); @@ -295,7 +295,7 @@ public: inline void reset(); //- Reset to a 0/1 unit bounding box - inline void reset(const Foam::zero_one); + inline void reset(Foam::zero_one); //- Reset min/max to be identical to the specified point inline void reset(const point& pt); diff --git a/src/OpenFOAM/meshes/boundBox/boundBoxI.H b/src/OpenFOAM/meshes/boundBox/boundBoxI.H index 4b900ae1c5..147944fe86 100644 --- a/src/OpenFOAM/meshes/boundBox/boundBoxI.H +++ b/src/OpenFOAM/meshes/boundBox/boundBoxI.H @@ -112,7 +112,7 @@ inline Foam::boundBox::boundBox() {} -inline Foam::boundBox::boundBox(const Foam::zero_one) +inline Foam::boundBox::boundBox(Foam::zero_one) : min_(point::zero), max_(point::one) @@ -306,7 +306,7 @@ inline void Foam::boundBox::reset() } -inline void Foam::boundBox::reset(const Foam::zero_one) +inline void Foam::boundBox::reset(Foam::zero_one) { min_ = point::zero; max_ = point::one; diff --git a/src/OpenFOAM/meshes/ijkMesh/IjkField.H b/src/OpenFOAM/meshes/ijkMesh/IjkField.H index f7e0b28449..8ce84d2482 100644 --- a/src/OpenFOAM/meshes/ijkMesh/IjkField.H +++ b/src/OpenFOAM/meshes/ijkMesh/IjkField.H @@ -81,7 +81,7 @@ public: inline IjkField(const labelVector& ijk, const Type& val); //- Construct with sizing information and initial values of zero - inline IjkField(const labelVector& ijk, const Foam::zero); + inline IjkField(const labelVector& ijk, Foam::zero); //- Copy construct from components inline IjkField(const labelVector& ijk, const UList& list); @@ -118,7 +118,7 @@ public: //- Clear dimensions and field inline void clear(); - //- Change dimensions. Fill new values with Zero + //- Change dimensions. Fill new values with zero void resize(const labelVector& newSizes); //- Change dimensions diff --git a/src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H b/src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H index 45c9afade7..97c44b22b0 100644 --- a/src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H +++ b/src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H @@ -75,7 +75,7 @@ template inline Foam::IjkField::IjkField ( const labelVector& ijk, - const Foam::zero + Foam::zero ) : Field(cmptProduct(ijk), Foam::zero{}), @@ -101,7 +101,7 @@ inline Foam::IjkField::IjkField << nl << nl; #endif - Field::resize(ijk_.size(), Zero); + Field::resize(ijk_.size(), Foam::zero{}); } } @@ -124,7 +124,7 @@ inline Foam::IjkField::IjkField << nl << nl; #endif - Field::resize(ijk_.size(), Zero); + Field::resize(ijk_.size(), Foam::zero{}); } } diff --git a/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C b/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C index a0a55385e4..f1b20cb1a3 100644 --- a/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C +++ b/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C @@ -1134,8 +1134,12 @@ void Foam::syncTools::syncBoundaryFaceList pp.size(), pp.start()-boundaryOffset ); - const List& fakeList = recvFld; - top(procPatch, const_cast&>(fakeList)); + + auto& fakeList = const_cast&> + ( + static_cast&>(recvFld) + ); + top(procPatch, fakeList); SubList patchValues ( diff --git a/src/OpenFOAM/meshes/treeBoundBox/treeBoundBox.H b/src/OpenFOAM/meshes/treeBoundBox/treeBoundBox.H index a30a872250..26d24f1f49 100644 --- a/src/OpenFOAM/meshes/treeBoundBox/treeBoundBox.H +++ b/src/OpenFOAM/meshes/treeBoundBox/treeBoundBox.H @@ -202,7 +202,7 @@ public: // Constructors //- Construct a 0/1 unit bounding box - inline explicit treeBoundBox(const Foam::zero_one); + inline explicit treeBoundBox(Foam::zero_one); //- Construct a bounding box containing a single initial point inline explicit treeBoundBox(const point& p); diff --git a/src/OpenFOAM/meshes/treeBoundBox/treeBoundBoxI.H b/src/OpenFOAM/meshes/treeBoundBox/treeBoundBoxI.H index 08bff3acfa..5315c45702 100644 --- a/src/OpenFOAM/meshes/treeBoundBox/treeBoundBoxI.H +++ b/src/OpenFOAM/meshes/treeBoundBox/treeBoundBoxI.H @@ -31,9 +31,9 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -inline Foam::treeBoundBox::treeBoundBox(const Foam::zero_one) +inline Foam::treeBoundBox::treeBoundBox(Foam::zero_one) : - boundBox(zero_one{}) + boundBox(Foam::zero_one{}) {} diff --git a/src/OpenFOAM/primitives/Scalar/scalarImpl.H b/src/OpenFOAM/primitives/Scalar/scalarImpl.H index 0d1564dde5..cde30b8c7f 100644 --- a/src/OpenFOAM/primitives/Scalar/scalarImpl.H +++ b/src/OpenFOAM/primitives/Scalar/scalarImpl.H @@ -292,7 +292,7 @@ inline bool notEqual(const Scalar a, const Scalar b) //- Clamp scalar value to a 0-1 range -inline Scalar clamp(const Scalar val, const Foam::zero_one) +inline Scalar clamp(const Scalar val, Foam::zero_one) { return (val < 0) ? 0 : (1 < val) ? 1 : val; } diff --git a/src/OpenFOAM/primitives/ranges/MinMax/MinMaxOps.H b/src/OpenFOAM/primitives/ranges/MinMax/MinMaxOps.H index 71e3632bfc..26464e0d16 100644 --- a/src/OpenFOAM/primitives/ranges/MinMax/MinMaxOps.H +++ b/src/OpenFOAM/primitives/ranges/MinMax/MinMaxOps.H @@ -84,7 +84,7 @@ struct clampOp {} //- Construct as 0-1 min/max range - clampOp(const Foam::zero_one) + clampOp(Foam::zero_one) : clampOp(MinMax(Foam::zero_one{})) {} diff --git a/src/conversion/vtk/adaptor/foamVtkToolsI.H b/src/conversion/vtk/adaptor/foamVtkToolsI.H index aa2da4eeb2..435845f3b7 100644 --- a/src/conversion/vtk/adaptor/foamVtkToolsI.H +++ b/src/conversion/vtk/adaptor/foamVtkToolsI.H @@ -25,8 +25,6 @@ License \*---------------------------------------------------------------------------*/ -#include - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // inline Foam::UList Foam::vtk::Tools::asUList diff --git a/src/fileFormats/ensight/part/faces/ensightFaces.C b/src/fileFormats/ensight/part/faces/ensightFaces.C index 4b41a67fd2..393182e285 100644 --- a/src/fileFormats/ensight/part/faces/ensightFaces.C +++ b/src/fileFormats/ensight/part/faces/ensightFaces.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2016-2022 OpenCFD Ltd. + Copyright (C) 2016-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -193,22 +193,22 @@ void Foam::ensightFaces::sort() if (!sub.empty()) { SubList