mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: cleanup of ListOps, ListListOps. Adjustments to List, PackedList.
- relocated ListAppendEqOp and ListUniqueEqOp to ListOps::appendEqOp
and ListOps::UniqueEqOp, respectively for better code isolation and
documentation of purpose.
- relocated setValues to ListOps::setValue() with many more
alternative selectors possible
- relocated createWithValues to ListOps::createWithValue
for better code isolation. The default initialization value is itself
now a default parameter, which allow for less typing.
Negative indices in the locations to set are now silently ignored,
which makes it possible to use an oldToNew mapping that includes
negative indices.
- additional ListOps::createWithValue taking a single position to set,
available both in copy assign and move assign versions.
Since a negative index is ignored, it is possible to combine with
the output of List::find() etc.
STYLE: changes for PackedList
- code simplication in the PackedList iterators, including dropping
the unused operator() on iterators, which is not available in plain
list versions either.
- improved sizing for PackedBoolList creation from a labelUList.
ENH: additional List constructors, for handling single element list.
- can assist in reducing constructor ambiguity, but can also helps
memory optimization when creating a single element list.
For example,
labelListList labels(one(), identity(mesh.nFaces()));
This commit is contained in:
@ -3,7 +3,7 @@
|
|||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
|
\\/ M anipulation | Copyright (C) 2017-2018 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -97,11 +97,14 @@ void printMyString(const UList<string>& lst)
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
argList::noParallel();
|
argList::noParallel();
|
||||||
|
argList::noFunctionObjects();
|
||||||
|
|
||||||
argList::addOption("reList", "reList");
|
argList::addOption("reList", "reList");
|
||||||
argList::addOption("wordList", "wordList");
|
argList::addOption("wordList", "wordList");
|
||||||
argList::addOption("stringList", "stringList");
|
argList::addOption("stringList", "stringList");
|
||||||
argList::addOption("float", "xx");
|
argList::addOption("float", "xx");
|
||||||
argList::addBoolOption("transform", "Test List::createList functionality");
|
argList::addBoolOption("create", "Test ListOps::create functionality");
|
||||||
|
argList::addBoolOption("ListList", "Test list of list functionality");
|
||||||
argList::addBoolOption("flag");
|
argList::addBoolOption("flag");
|
||||||
|
|
||||||
#include "setRootCase.H"
|
#include "setRootCase.H"
|
||||||
@ -332,11 +335,11 @@ int main(int argc, char *argv[])
|
|||||||
List<scalar> sident(range.begin(), range.end());
|
List<scalar> sident(range.begin(), range.end());
|
||||||
Info<<"range-list (scalar)=" << sident << nl;
|
Info<<"range-list (scalar)=" << sident << nl;
|
||||||
|
|
||||||
// Sub-ranges also work
|
// // Sub-ranges also work
|
||||||
List<scalar> sident2(range(3), range(10));
|
// List<scalar> sident2(range.at(3), range.at(10));
|
||||||
Info<<"range-list (scalar)=" << sident2 << nl;
|
// Info<<"subrange-list (scalar)=" << sident2 << nl;
|
||||||
|
|
||||||
// VERY BAD IDEA: List<scalar> sident3(range(10), range(3));
|
// VERY BAD IDEA: List<scalar> sident3(range.at(10), range.at(3));
|
||||||
|
|
||||||
// This doesn't work, and don't know what it should do anyhow
|
// This doesn't work, and don't know what it should do anyhow
|
||||||
// List<vector> vident(range.begin(), range.end());
|
// List<vector> vident(range.begin(), range.end());
|
||||||
@ -362,15 +365,15 @@ int main(int argc, char *argv[])
|
|||||||
Info<<"-flag:" << args["flag"] << endl;
|
Info<<"-flag:" << args["flag"] << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.found("transform"))
|
if (args.found("create"))
|
||||||
{
|
{
|
||||||
Info<< nl << "Test List::createList functionality" << nl;
|
Info<< nl << "Test ListOps::create functionality" << nl;
|
||||||
|
|
||||||
const auto labels = identity(15);
|
const auto labels = identity(15);
|
||||||
Info<< "labels: " << flatOutput(labels) << endl;
|
Info<< "labels: " << flatOutput(labels) << endl;
|
||||||
|
|
||||||
{
|
{
|
||||||
auto scalars = List<scalar>::createList
|
auto scalars = ListOps::create<scalar>
|
||||||
(
|
(
|
||||||
labels,
|
labels,
|
||||||
[](const label& val){ return scalar(1.5*val); }
|
[](const label& val){ return scalar(1.5*val); }
|
||||||
@ -379,7 +382,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
auto vectors = List<vector>::createList
|
auto vectors = ListOps::create<vector>
|
||||||
(
|
(
|
||||||
labels,
|
labels,
|
||||||
[](const label& val){ return vector(1.2*val, -1.2*val, 0); }
|
[](const label& val){ return vector(1.2*val, -1.2*val, 0); }
|
||||||
@ -388,7 +391,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
auto longs = List<long>::createList
|
auto longs = ListOps::create<long>
|
||||||
(
|
(
|
||||||
labels,
|
labels,
|
||||||
[](const label& val){ return val; }
|
[](const label& val){ return val; }
|
||||||
@ -396,7 +399,7 @@ int main(int argc, char *argv[])
|
|||||||
Info<< "longs: " << flatOutput(longs) << endl;
|
Info<< "longs: " << flatOutput(longs) << endl;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
auto negs = List<label>::createList
|
auto negs = ListOps::create<label>
|
||||||
(
|
(
|
||||||
labels,
|
labels,
|
||||||
std::negate<label>()
|
std::negate<label>()
|
||||||
@ -405,7 +408,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
auto scalars = List<scalar>::createList
|
auto scalars = ListOps::create<scalar>
|
||||||
(
|
(
|
||||||
labelRange::null.cbegin(),
|
labelRange::null.cbegin(),
|
||||||
labelRange::identity(15).cend(),
|
labelRange::identity(15).cend(),
|
||||||
@ -417,9 +420,9 @@ int main(int argc, char *argv[])
|
|||||||
#if WM_LABEL_SIZE == 32
|
#if WM_LABEL_SIZE == 32
|
||||||
{
|
{
|
||||||
List<int64_t> input(10);
|
List<int64_t> input(10);
|
||||||
std::iota(input.begin(), input.end(), 0);
|
std::iota(input.begin(), input.end(), 50);
|
||||||
|
|
||||||
auto output = List<label>::createList
|
auto output = ListOps::create<label>
|
||||||
(
|
(
|
||||||
input,
|
input,
|
||||||
toLabel<int64_t>()
|
toLabel<int64_t>()
|
||||||
@ -429,9 +432,9 @@ int main(int argc, char *argv[])
|
|||||||
#elif WM_LABEL_SIZE == 64
|
#elif WM_LABEL_SIZE == 64
|
||||||
{
|
{
|
||||||
List<int32_t> input(10);
|
List<int32_t> input(10);
|
||||||
std::iota(input.begin(), input.end(), 0);
|
std::iota(input.begin(), input.end(), 50);
|
||||||
|
|
||||||
auto output = List<label>::createList
|
auto output = ListOps::create<label>
|
||||||
(
|
(
|
||||||
input,
|
input,
|
||||||
toLabel<int32_t>()
|
toLabel<int32_t>()
|
||||||
@ -439,6 +442,157 @@ int main(int argc, char *argv[])
|
|||||||
Info<< "label (from int32): " << flatOutput(output) << endl;
|
Info<< "label (from int32): " << flatOutput(output) << endl;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
labelHashSet locations{ -15, 5, 10, 15, 25, 35 };
|
||||||
|
Info<< nl << "Test for createWithValue with locations :"
|
||||||
|
<< flatOutput(locations.sortedToc()) << nl;
|
||||||
|
|
||||||
|
{
|
||||||
|
auto output = ListOps::createWithValue<label>
|
||||||
|
(
|
||||||
|
30,
|
||||||
|
locations.toc(), // Any order
|
||||||
|
100,
|
||||||
|
-1 // default value
|
||||||
|
);
|
||||||
|
Info<< "with labelUList: " << flatOutput(output)
|
||||||
|
<< " selector: " << flatOutput(locations.sortedToc()) << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto output = ListOps::createWithValue<label>
|
||||||
|
(
|
||||||
|
30,
|
||||||
|
locations,
|
||||||
|
100,
|
||||||
|
-1 // default value
|
||||||
|
);
|
||||||
|
Info<< "with labelHashSet: " << flatOutput(output)
|
||||||
|
<< " selector: " << flatOutput(locations) << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
PackedBoolList select(locations.toc());
|
||||||
|
auto output = ListOps::createWithValue<label>
|
||||||
|
(
|
||||||
|
30,
|
||||||
|
select,
|
||||||
|
100,
|
||||||
|
-1 // default value
|
||||||
|
);
|
||||||
|
Info<< "with PackedBoolList: " << flatOutput(output)
|
||||||
|
<< " selector: " << flatOutput(select.used()) << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Fairly really inconvenient way to set true/false
|
||||||
|
labelList toc(locations.sortedToc());
|
||||||
|
|
||||||
|
List<bool> select = ListOps::createWithValue<bool>
|
||||||
|
(
|
||||||
|
toc.last() + 1,
|
||||||
|
toc,
|
||||||
|
true,
|
||||||
|
false // default value
|
||||||
|
);
|
||||||
|
|
||||||
|
auto output = ListOps::createWithValue<label>
|
||||||
|
(
|
||||||
|
30,
|
||||||
|
select,
|
||||||
|
100,
|
||||||
|
-1 // default value
|
||||||
|
);
|
||||||
|
Info<< "with boolList: " << flatOutput(output)
|
||||||
|
<< " selector: " << flatOutput(select) << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Repeat with a shorter selector
|
||||||
|
locations = { -15, 5, 10 };
|
||||||
|
|
||||||
|
{
|
||||||
|
auto output = ListOps::createWithValue<label>
|
||||||
|
(
|
||||||
|
30,
|
||||||
|
locations,
|
||||||
|
100,
|
||||||
|
-1 // default value
|
||||||
|
);
|
||||||
|
Info<< "with labelHashSet: " << flatOutput(output)
|
||||||
|
<< " selector: " << flatOutput(locations) << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
PackedBoolList select(locations.toc());
|
||||||
|
auto output = ListOps::createWithValue<label>
|
||||||
|
(
|
||||||
|
30,
|
||||||
|
select,
|
||||||
|
100,
|
||||||
|
-1 // default value
|
||||||
|
);
|
||||||
|
Info<< "with PackedBoolList: " << flatOutput(output)
|
||||||
|
<< " selector: " << flatOutput(select.used()) << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Fairly really inconvenient way to set true/false
|
||||||
|
labelList toc(locations.sortedToc());
|
||||||
|
|
||||||
|
List<bool> select = ListOps::createWithValue<bool>
|
||||||
|
(
|
||||||
|
toc.last() + 1,
|
||||||
|
toc,
|
||||||
|
true,
|
||||||
|
false // default value
|
||||||
|
);
|
||||||
|
|
||||||
|
auto output = ListOps::createWithValue<label>
|
||||||
|
(
|
||||||
|
30,
|
||||||
|
select,
|
||||||
|
100,
|
||||||
|
-1 // default value
|
||||||
|
);
|
||||||
|
Info<< "with boolList: " << flatOutput(output)
|
||||||
|
<< " selector: " << flatOutput(select) << nl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.found("ListList"))
|
||||||
|
{
|
||||||
|
{
|
||||||
|
labelListList listlist(5, identity(5));
|
||||||
|
Info<<"list-list with length/val:" << listlist << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
labelListList listlist(one(), identity(5));
|
||||||
|
Info<<"list-list 1/val:" << listlist << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
labelList content = identity(5);
|
||||||
|
|
||||||
|
labelListList listlist(one(), content);
|
||||||
|
Info<<"list-list 1/copy val:" << listlist
|
||||||
|
<<" - from " << content << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
labelList content = identity(5);
|
||||||
|
|
||||||
|
labelListList listlist(one(), std::move(content));
|
||||||
|
Info<<"list-list 1/move val:" << listlist
|
||||||
|
<<" - from " << content << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
labelListList listlist(one(), Zero);
|
||||||
|
Info<<"list-list 1/move val:" << listlist
|
||||||
|
<< nl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.readIfPresent<scalar>("float", xxx))
|
if (args.readIfPresent<scalar>("float", xxx))
|
||||||
|
|||||||
@ -251,13 +251,13 @@ int main(int argc, char *argv[])
|
|||||||
Info<< "begin():";
|
Info<< "begin():";
|
||||||
iter.printInfo(Info) << "\n";
|
iter.printInfo(Info) << "\n";
|
||||||
|
|
||||||
Info<< "iterator:" << iter() << "\n";
|
Info<< "iterator:" << *iter << "\n";
|
||||||
iter() = 5;
|
*iter = 5;
|
||||||
iter.printInfo(Info);
|
iter.printInfo(Info);
|
||||||
list1.printInfo(Info, true);
|
list1.printInfo(Info, true);
|
||||||
|
|
||||||
iter = list1[31];
|
iter = list1[31];
|
||||||
Info<< "iterator:" << iter() << "\n";
|
Info<< "iterator:" << *iter << "\n";
|
||||||
iter.printInfo(Info);
|
iter.printInfo(Info);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -229,7 +229,7 @@ int main(int argc, char *argv[])
|
|||||||
sum = 0;
|
sum = 0;
|
||||||
for (label iter = 0; iter < nIters; ++iter)
|
for (label iter = 0; iter < nIters; ++iter)
|
||||||
{
|
{
|
||||||
forAllIter(PackedBoolList, packed, it)
|
forAllIters(packed, it)
|
||||||
{
|
{
|
||||||
sum += it;
|
sum += it;
|
||||||
}
|
}
|
||||||
@ -244,9 +244,9 @@ int main(int argc, char *argv[])
|
|||||||
sum = 0;
|
sum = 0;
|
||||||
for (label iter = 0; iter < nIters; ++iter)
|
for (label iter = 0; iter < nIters; ++iter)
|
||||||
{
|
{
|
||||||
forAllConstIter(PackedBoolList, packed, cit)
|
forAllConstIters(packed, cit)
|
||||||
{
|
{
|
||||||
sum += cit();
|
sum += *cit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::cout
|
std::cout
|
||||||
@ -370,9 +370,9 @@ int main(int argc, char *argv[])
|
|||||||
// Write packed
|
// Write packed
|
||||||
for (label iter = 0; iter < nIters; ++iter)
|
for (label iter = 0; iter < nIters; ++iter)
|
||||||
{
|
{
|
||||||
forAllIter(PackedBoolList, packed, it)
|
forAllIters(packed, it)
|
||||||
{
|
{
|
||||||
it() = 1;
|
*it = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Info<< "Writing packed using iterator:" << timer.cpuTimeIncrement()
|
Info<< "Writing packed using iterator:" << timer.cpuTimeIncrement()
|
||||||
|
|||||||
@ -29,9 +29,12 @@ Description
|
|||||||
|
|
||||||
#include "uLabel.H"
|
#include "uLabel.H"
|
||||||
#include "boolList.H"
|
#include "boolList.H"
|
||||||
|
#include "DynamicList.H"
|
||||||
#include "IOstreams.H"
|
#include "IOstreams.H"
|
||||||
#include "PackedBoolList.H"
|
#include "PackedBoolList.H"
|
||||||
|
#include "ITstream.H"
|
||||||
#include "StringStream.H"
|
#include "StringStream.H"
|
||||||
|
#include "FlatOutput.H"
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
|
|
||||||
@ -135,8 +138,9 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
PackedBoolList list4
|
PackedBoolList list4
|
||||||
(
|
(
|
||||||
IStringStream
|
ITstream
|
||||||
(
|
(
|
||||||
|
"input",
|
||||||
"(1 n 1 n 1 n 1 1 off 0 0 f f 0 y yes y true y false on t)"
|
"(1 n 1 n 1 n 1 1 off 0 0 f f 0 y yes y true y false on t)"
|
||||||
)()
|
)()
|
||||||
);
|
);
|
||||||
@ -199,6 +203,18 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
list4.writeEntry("PackedBoolList", Info);
|
list4.writeEntry("PackedBoolList", Info);
|
||||||
|
|
||||||
|
// Construct from labelUList, labelUIndList
|
||||||
|
{
|
||||||
|
DynamicList<label> indices({10, 50, 300});
|
||||||
|
|
||||||
|
Info<< "set: " << flatOutput(indices) << endl;
|
||||||
|
|
||||||
|
PackedBoolList bools1(indices);
|
||||||
|
|
||||||
|
Info<< "used: " << bools1.size() << " "
|
||||||
|
<< flatOutput(bools1.used()) << endl;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1007,7 +1007,7 @@ Foam::label Foam::checkGeometry
|
|||||||
globalFaces().gather
|
globalFaces().gather
|
||||||
(
|
(
|
||||||
UPstream::worldComm,
|
UPstream::worldComm,
|
||||||
labelList::createList
|
ListOps::create<label>
|
||||||
(
|
(
|
||||||
UPstream::procID(UPstream::worldComm),
|
UPstream::procID(UPstream::worldComm),
|
||||||
toLabel<int>() // int -> label
|
toLabel<int>() // int -> label
|
||||||
@ -1061,7 +1061,7 @@ Foam::label Foam::checkGeometry
|
|||||||
globalFaces().gather
|
globalFaces().gather
|
||||||
(
|
(
|
||||||
UPstream::worldComm,
|
UPstream::worldComm,
|
||||||
labelList::createList
|
ListOps::create<label>
|
||||||
(
|
(
|
||||||
UPstream::procID(UPstream::worldComm),
|
UPstream::procID(UPstream::worldComm),
|
||||||
toLabel<int>() // int -> label
|
toLabel<int>() // int -> label
|
||||||
|
|||||||
@ -84,7 +84,7 @@ void writeWeights
|
|||||||
globalFaces().gather
|
globalFaces().gather
|
||||||
(
|
(
|
||||||
UPstream::worldComm,
|
UPstream::worldComm,
|
||||||
labelList::createList
|
ListOps::create<label>
|
||||||
(
|
(
|
||||||
UPstream::procID(UPstream::worldComm),
|
UPstream::procID(UPstream::worldComm),
|
||||||
toLabel<int>() // int -> label
|
toLabel<int>() // int -> label
|
||||||
|
|||||||
@ -81,7 +81,7 @@ void Foam::parLagrangianRedistributor::findClouds
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Synchronise cloud names
|
// Synchronise cloud names
|
||||||
Pstream::combineGather(cloudNames, ListUniqueEqOp<word>());
|
Pstream::combineGather(cloudNames, ListOps::uniqueEqOp<word>());
|
||||||
Pstream::combineScatter(cloudNames);
|
Pstream::combineScatter(cloudNames);
|
||||||
|
|
||||||
objectNames.setSize(cloudNames.size());
|
objectNames.setSize(cloudNames.size());
|
||||||
@ -117,10 +117,10 @@ void Foam::parLagrangianRedistributor::findClouds
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Synchronise objectNames
|
// Synchronise objectNames
|
||||||
forAll(objectNames, cloudI)
|
forAll(objectNames, i)
|
||||||
{
|
{
|
||||||
Pstream::combineGather(objectNames[cloudI], ListUniqueEqOp<word>());
|
Pstream::combineGather(objectNames[i], ListOps::uniqueEqOp<word>());
|
||||||
Pstream::combineScatter(objectNames[cloudI]);
|
Pstream::combineScatter(objectNames[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -44,7 +44,7 @@ Foam::wordList Foam::parLagrangianRedistributor::filterObjects
|
|||||||
|
|
||||||
// Parallel synchronise
|
// Parallel synchronise
|
||||||
wordList fieldNames(objects.names(fieldClassName));
|
wordList fieldNames(objects.names(fieldClassName));
|
||||||
Pstream::combineGather(fieldNames, ListUniqueEqOp<word>());
|
Pstream::combineGather(fieldNames, ListOps::uniqueEqOp<word>());
|
||||||
Pstream::combineScatter(fieldNames);
|
Pstream::combineScatter(fieldNames);
|
||||||
|
|
||||||
if (!selectedFields.empty())
|
if (!selectedFields.empty())
|
||||||
|
|||||||
@ -2357,7 +2357,7 @@ int main(int argc, char *argv[])
|
|||||||
bool nfs = true;
|
bool nfs = true;
|
||||||
{
|
{
|
||||||
List<fileName> roots(1, args.rootPath());
|
List<fileName> roots(1, args.rootPath());
|
||||||
combineReduce(roots, ListUniqueEqOp<fileName>());
|
combineReduce(roots, ListOps::uniqueEqOp<fileName>());
|
||||||
nfs = (roots.size() == 1);
|
nfs = (roots.size() == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -35,65 +35,6 @@ License
|
|||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
template<class T2, class UnaryOperation>
|
|
||||||
Foam::List<T> Foam::List<T>::createList
|
|
||||||
(
|
|
||||||
const UList<T2>& input,
|
|
||||||
const UnaryOperation& op
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const label len = input.size();
|
|
||||||
|
|
||||||
List<T> output(len);
|
|
||||||
|
|
||||||
if (len)
|
|
||||||
{
|
|
||||||
List_ACCESS(T, output, out);
|
|
||||||
List_CONST_ACCESS(T2, input, in);
|
|
||||||
|
|
||||||
for (label i = 0; i < len; ++i)
|
|
||||||
{
|
|
||||||
out[i] = op(in[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
template<class InputIterator, class UnaryOperation>
|
|
||||||
Foam::List<T> Foam::List<T>::createList
|
|
||||||
(
|
|
||||||
InputIterator begIter,
|
|
||||||
InputIterator endIter,
|
|
||||||
const UnaryOperation& op
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const label len = std::distance(begIter, endIter);
|
|
||||||
|
|
||||||
List<T> output(len);
|
|
||||||
|
|
||||||
if (len)
|
|
||||||
{
|
|
||||||
List_ACCESS(T, output, out);
|
|
||||||
|
|
||||||
InputIterator iter = begIter;
|
|
||||||
|
|
||||||
for (label i = 0; i < len; ++i)
|
|
||||||
{
|
|
||||||
out[i] = op(*iter);
|
|
||||||
++iter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
@ -162,6 +103,33 @@ Foam::List<T>::List(const label len, const zero)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
Foam::List<T>::List(const one, const T& val)
|
||||||
|
:
|
||||||
|
UList<T>(new T[1], 1)
|
||||||
|
{
|
||||||
|
this->v_[0] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
Foam::List<T>::List(const one, T&& val)
|
||||||
|
:
|
||||||
|
UList<T>(new T[1], 1)
|
||||||
|
{
|
||||||
|
this->v_[0] = std::move(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
Foam::List<T>::List(const one, const zero)
|
||||||
|
:
|
||||||
|
UList<T>(new T[1], 1)
|
||||||
|
{
|
||||||
|
this->v_[0] = Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
Foam::List<T>::List(const UList<T>& a)
|
Foam::List<T>::List(const UList<T>& a)
|
||||||
:
|
:
|
||||||
|
|||||||
@ -42,6 +42,7 @@ SourceFiles
|
|||||||
|
|
||||||
#include "UList.H"
|
#include "UList.H"
|
||||||
#include "autoPtr.H"
|
#include "autoPtr.H"
|
||||||
|
#include "one.H"
|
||||||
#include "Xfer.H"
|
#include "Xfer.H"
|
||||||
#include "SLListFwd.H"
|
#include "SLListFwd.H"
|
||||||
|
|
||||||
@ -112,49 +113,11 @@ public:
|
|||||||
//- Return a null List
|
//- Return a null List
|
||||||
inline static const List<T>& null();
|
inline static const List<T>& null();
|
||||||
|
|
||||||
//- Create from a list of a dissimilar type.
|
|
||||||
// Eg, convert a list of ints to floats, vectors etc.
|
|
||||||
// For example,
|
|
||||||
// \code
|
|
||||||
// auto vectors = List<vector>::createList
|
|
||||||
// (
|
|
||||||
// ints,
|
|
||||||
// [](const int& val){ return vector(1.5*val, 0, 0); }
|
|
||||||
// );
|
|
||||||
//
|
|
||||||
// auto neg = labelList::createList
|
|
||||||
// (
|
|
||||||
// ints,
|
|
||||||
// std::negate<label>()
|
|
||||||
// );
|
|
||||||
// auto labels = labelList::createList
|
|
||||||
// (
|
|
||||||
// ints,
|
|
||||||
// toLabel<int>()
|
|
||||||
// );
|
|
||||||
// \endcode
|
|
||||||
template<class T2, class UnaryOperation>
|
|
||||||
static List<T> createList
|
|
||||||
(
|
|
||||||
const UList<T2>& input,
|
|
||||||
const UnaryOperation& op
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Create from an iterator range (uses std::distance for the size).
|
|
||||||
// The unary operation can be used to convert to other types.
|
|
||||||
template<class InputIterator, class UnaryOperation>
|
|
||||||
static List<T> createList
|
|
||||||
(
|
|
||||||
InputIterator begIter,
|
|
||||||
InputIterator endIter,
|
|
||||||
const UnaryOperation& op
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Null constructor
|
//- Null constructor
|
||||||
inline List();
|
inline constexpr List() noexcept;
|
||||||
|
|
||||||
//- Construct with given size
|
//- Construct with given size
|
||||||
explicit List(const label len);
|
explicit List(const label len);
|
||||||
@ -165,6 +128,15 @@ public:
|
|||||||
//- Construct with given size initializing all elements to zero
|
//- Construct with given size initializing all elements to zero
|
||||||
List(const label len, const zero);
|
List(const label len, const zero);
|
||||||
|
|
||||||
|
//- Construct with length=1, copying the value as the only content
|
||||||
|
List(const one, const T& val);
|
||||||
|
|
||||||
|
//- Construct with length=1, moving the value as the only content
|
||||||
|
List(const one, T&& val);
|
||||||
|
|
||||||
|
//- Construct with length=1, initializing content to zero
|
||||||
|
List(const one, const zero);
|
||||||
|
|
||||||
//- Copy construct from list
|
//- Copy construct from list
|
||||||
List(const List<T>& a);
|
List(const List<T>& a);
|
||||||
|
|
||||||
|
|||||||
@ -88,7 +88,7 @@ inline Foam::List<T>::List
|
|||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
inline Foam::List<T>::List()
|
inline constexpr Foam::List<T>::List() noexcept
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -23,93 +23,109 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
template<class T, class AccessOp>
|
||||||
|
Foam::labelList Foam::ListListOps::subSizes
|
||||||
namespace Foam
|
(
|
||||||
|
const UList<T>& lists,
|
||||||
|
AccessOp aop
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
labelList output(lists.size());
|
||||||
|
auto out = output.begin();
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
for (const T& sub : lists)
|
||||||
|
|
||||||
template<class AccessType, class T, class AccessOp>
|
|
||||||
AccessType ListListOps::combine(const List<T>& lst, AccessOp aop)
|
|
||||||
{
|
|
||||||
label sum = 0;
|
|
||||||
|
|
||||||
forAll(lst, lstI)
|
|
||||||
{
|
{
|
||||||
sum += aop(lst[lstI]).size();
|
*out = aop(sub).size();
|
||||||
|
++out;
|
||||||
}
|
}
|
||||||
|
|
||||||
AccessType result(sum);
|
return output;
|
||||||
|
|
||||||
label globalElemI = 0;
|
|
||||||
|
|
||||||
forAll(lst, lstI)
|
|
||||||
{
|
|
||||||
const T& sub = lst[lstI];
|
|
||||||
|
|
||||||
forAll(aop(sub), elemI)
|
|
||||||
{
|
|
||||||
result[globalElemI++] = aop(sub)[elemI];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class T, class AccessOp>
|
template<class T, class AccessOp>
|
||||||
labelList ListListOps::subSizes(const List<T>& lst, AccessOp aop)
|
Foam::label Foam::ListListOps::sumSizes
|
||||||
|
(
|
||||||
|
const UList<T>& lists,
|
||||||
|
AccessOp aop
|
||||||
|
)
|
||||||
{
|
{
|
||||||
labelList sizes(lst.size());
|
label len = 0;
|
||||||
|
|
||||||
forAll(lst, lstI)
|
for (const T& sub : lists)
|
||||||
{
|
{
|
||||||
sizes[lstI] = aop(lst[lstI]).size();
|
len += aop(sub).size();
|
||||||
}
|
}
|
||||||
return sizes;
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class AccessType, class T, class AccessOp>
|
||||||
|
AccessType Foam::ListListOps::combine
|
||||||
|
(
|
||||||
|
const UList<T>& lists,
|
||||||
|
AccessOp aop
|
||||||
|
)
|
||||||
|
{
|
||||||
|
label len = 0;
|
||||||
|
|
||||||
|
for (const T& sub : lists)
|
||||||
|
{
|
||||||
|
len += aop(sub).size();
|
||||||
|
}
|
||||||
|
|
||||||
|
AccessType output(len);
|
||||||
|
auto out = output.begin();
|
||||||
|
|
||||||
|
for (const T& sub : lists)
|
||||||
|
{
|
||||||
|
for (const auto& item : aop(sub))
|
||||||
|
{
|
||||||
|
*out = item;
|
||||||
|
++out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class AccessType, class T, class AccessOp, class OffsetOp>
|
template<class AccessType, class T, class AccessOp, class OffsetOp>
|
||||||
AccessType ListListOps::combineOffset
|
AccessType Foam::ListListOps::combineOffset
|
||||||
(
|
(
|
||||||
const List<T>& lst,
|
const UList<T>& lists,
|
||||||
const labelList& sizes,
|
const labelUList& offsets,
|
||||||
AccessOp aop,
|
AccessOp aop,
|
||||||
OffsetOp oop
|
OffsetOp oop
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
label sum = 0;
|
label len = 0;
|
||||||
|
|
||||||
forAll(lst, lstI)
|
for (const T& sub : lists)
|
||||||
{
|
{
|
||||||
sum += aop(lst[lstI]).size();
|
len += aop(sub).size();
|
||||||
}
|
}
|
||||||
|
|
||||||
AccessType result(sum);
|
AccessType output(len);
|
||||||
|
auto out = output.begin();
|
||||||
label globalElemI = 0;
|
auto off = offsets.begin();
|
||||||
|
|
||||||
label offset = 0;
|
label offset = 0;
|
||||||
|
for (const T& sub : lists)
|
||||||
forAll(lst, lstI)
|
|
||||||
{
|
{
|
||||||
const T& sub = lst[lstI];
|
for (const auto& item : aop(sub))
|
||||||
|
|
||||||
forAll(aop(sub), elemI)
|
|
||||||
{
|
{
|
||||||
result[globalElemI++] = oop(aop(sub)[elemI], offset);
|
*out = oop(item, offset);
|
||||||
|
++out;
|
||||||
}
|
}
|
||||||
|
|
||||||
offset += sizes[lstI];
|
offset += *off;
|
||||||
|
++off;
|
||||||
}
|
}
|
||||||
return result;
|
|
||||||
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -93,12 +93,10 @@ SourceFiles
|
|||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
// Dummy access operator for ListListOps::combine()
|
//- Dummy access operator for ListListOps::combine()
|
||||||
template<class T>
|
template<class T>
|
||||||
class accessOp
|
struct accessOp
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
|
|
||||||
const T& operator()(const T& x) const
|
const T& operator()(const T& x) const
|
||||||
{
|
{
|
||||||
return x;
|
return x;
|
||||||
@ -106,54 +104,57 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Offset operator for ListListOps::combineOffset()
|
//- Offset operator for ListListOps::combineOffset()
|
||||||
template<class T>
|
template<class T>
|
||||||
class offsetOp
|
struct offsetOp
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
|
|
||||||
T operator()(const T& x, const label offset) const
|
T operator()(const T& x, const label offset) const
|
||||||
{
|
{
|
||||||
return x + offset;
|
return x + offset;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class ListListOps Declaration
|
Namespace ListListOps Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
namespace ListListOps
|
namespace ListListOps
|
||||||
{
|
{
|
||||||
|
//- Return the sizes of the sub-lists
|
||||||
//- Combines sublists into one big list
|
|
||||||
template<class AccessType, class T, class AccessOp>
|
|
||||||
AccessType combine(const List<T>&, AccessOp aop = accessOp<T>());
|
|
||||||
|
|
||||||
//- Gets sizes of sublists
|
|
||||||
template<class T, class AccessOp>
|
template<class T, class AccessOp>
|
||||||
labelList subSizes(const List<T>&, AccessOp aop = accessOp<T>());
|
labelList subSizes(const UList<T>& lists, AccessOp aop = accessOp<T>());
|
||||||
|
|
||||||
|
//- The total size of all sub-lists
|
||||||
|
template<class T, class AccessOp>
|
||||||
|
label sumSizes(const UList<T>& lists, AccessOp aop = accessOp<T>());
|
||||||
|
|
||||||
|
//- Combines sub-lists into a single list
|
||||||
|
template<class AccessType, class T, class AccessOp>
|
||||||
|
AccessType combine(const UList<T>& lists, AccessOp aop = accessOp<T>());
|
||||||
|
|
||||||
//- Like combine but also offsets sublists based on passed sizes
|
//- Like combine but also offsets sublists based on passed sizes
|
||||||
template<class AccessType, class T, class AccessOp, class OffsetOp>
|
template<class AccessType, class T, class AccessOp, class OffsetOp>
|
||||||
AccessType combineOffset
|
AccessType combineOffset
|
||||||
(
|
(
|
||||||
const List<T>&,
|
const UList<T>& lists,
|
||||||
const labelList& sizes,
|
const labelUList& offsets,
|
||||||
AccessOp aop,
|
AccessOp aop,
|
||||||
OffsetOp oop = offsetOp<T>()
|
OffsetOp oop = offsetOp<T>()
|
||||||
);
|
);
|
||||||
};
|
|
||||||
|
} // End namespace ListListOps
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
#ifdef NoRepository
|
#ifdef NoRepository
|
||||||
#include "ListListOps.C"
|
#include "ListListOps.C"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -27,6 +27,12 @@ InNamspace
|
|||||||
Description
|
Description
|
||||||
Various functions to operate on Lists.
|
Various functions to operate on Lists.
|
||||||
|
|
||||||
|
Namespace
|
||||||
|
Foam::ListOps
|
||||||
|
|
||||||
|
Description
|
||||||
|
Various utility functions to work on Lists.
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
ListOps.C
|
ListOps.C
|
||||||
ListOpsTemplates.C
|
ListOpsTemplates.C
|
||||||
@ -38,6 +44,8 @@ SourceFiles
|
|||||||
|
|
||||||
#include "FlatOutput.H"
|
#include "FlatOutput.H"
|
||||||
#include "labelList.H"
|
#include "labelList.H"
|
||||||
|
#include "HashSet.H"
|
||||||
|
#include "PackedBoolList.H"
|
||||||
#include "ops.H"
|
#include "ops.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -260,25 +268,6 @@ labelList findIndices
|
|||||||
label start=0
|
label start=0
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Opposite of findIndices: set values at indices to given value
|
|
||||||
template<class ListType>
|
|
||||||
void setValues
|
|
||||||
(
|
|
||||||
ListType& input,
|
|
||||||
const labelUList& indices,
|
|
||||||
typename ListType::const_reference val
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Opposite of findIndices: set values at indices to given value
|
|
||||||
template<class ListType>
|
|
||||||
ListType createWithValues
|
|
||||||
(
|
|
||||||
const label len,
|
|
||||||
typename ListType::const_reference initValue,
|
|
||||||
const labelUList& indices,
|
|
||||||
typename ListType::const_reference setValue
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Find index of max element (and larger than given element).
|
//- Find index of max element (and larger than given element).
|
||||||
// return -1 if not found. Linear search.
|
// return -1 if not found. Linear search.
|
||||||
template<class ListType>
|
template<class ListType>
|
||||||
@ -325,24 +314,6 @@ label findLower
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Helper class for list to append y onto the end of x
|
|
||||||
template<class T>
|
|
||||||
class ListAppendEqOp
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void operator()(List<T>& x, const List<T>& y) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//- Helper class for list to append unique elements of y onto the end of x
|
|
||||||
template<class T>
|
|
||||||
class ListUniqueEqOp
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void operator()(List<T>& x, const List<T>& y) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//- Reverse a list. First element becomes last element etc.
|
//- Reverse a list. First element becomes last element etc.
|
||||||
template<class ListType>
|
template<class ListType>
|
||||||
ListType reverseList(const ListType& input);
|
ListType reverseList(const ListType& input);
|
||||||
@ -364,6 +335,271 @@ template<template<typename> class ListType, class DataType>
|
|||||||
void inplaceRotateList(ListType<DataType>& list, label n);
|
void inplaceRotateList(ListType<DataType>& list, label n);
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Namespace ListOps Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
namespace ListOps
|
||||||
|
{
|
||||||
|
|
||||||
|
//- List helper to append y elements onto the end of x
|
||||||
|
template<class T>
|
||||||
|
struct appendEqOp
|
||||||
|
{
|
||||||
|
void operator()(List<T>& x, const List<T>& y) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
//- List helper to append y unique elements onto the end of x
|
||||||
|
template<class T>
|
||||||
|
struct uniqueEqOp
|
||||||
|
{
|
||||||
|
void operator()(List<T>& x, const List<T>& y) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//- Set various locations of the list with a specified value.
|
||||||
|
//
|
||||||
|
// \param list the list to modify
|
||||||
|
// \param locations where to apply the specified value
|
||||||
|
// An out-of-range index is silently ignored.
|
||||||
|
// \param val the value to set at the specified locations
|
||||||
|
template<class T>
|
||||||
|
void setValue
|
||||||
|
(
|
||||||
|
UList<T>& list,
|
||||||
|
const labelUList& locations,
|
||||||
|
const T& val
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Set various locations of the list with a specified value.
|
||||||
|
//
|
||||||
|
// \param list the list to modify
|
||||||
|
// \param locations where to apply the specified value
|
||||||
|
// An out-of-range index is silently ignored.
|
||||||
|
// \param val the value to set at the specified locations
|
||||||
|
template<class T>
|
||||||
|
void setValue
|
||||||
|
(
|
||||||
|
UList<T>& list,
|
||||||
|
const labelHashSet& locations,
|
||||||
|
const T& val
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Set various locations of the list with a specified value.
|
||||||
|
//
|
||||||
|
// \param list the list to modify
|
||||||
|
// \param locations where to apply the specified value
|
||||||
|
// An out-of-range index is silently ignored.
|
||||||
|
// \param val the value to set at the specified locations
|
||||||
|
template<class T>
|
||||||
|
void setValue
|
||||||
|
(
|
||||||
|
UList<T>& list,
|
||||||
|
const UList<bool>& locations,
|
||||||
|
const T& val
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Set various locations of the list with a specified value.
|
||||||
|
//
|
||||||
|
// \param list the list to modify
|
||||||
|
// \param locations where to apply the specified value
|
||||||
|
// An out-of-range index is silently ignored.
|
||||||
|
// \param val the value to set at the specified locations
|
||||||
|
template<class T>
|
||||||
|
void setValue
|
||||||
|
(
|
||||||
|
UList<T>& list,
|
||||||
|
const PackedBoolList& locations,
|
||||||
|
const T& val
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Create a List from a List of a dissimilar type, using the entire list.
|
||||||
|
// For example, convert a list of ints to floats, vectors etc.
|
||||||
|
//
|
||||||
|
// \param input the list input values.
|
||||||
|
// \param op the unary conversion operator, which can be used to convert
|
||||||
|
// to other types.
|
||||||
|
//
|
||||||
|
// \code
|
||||||
|
// auto neg = ListOps::create<label>
|
||||||
|
// (
|
||||||
|
// ints,
|
||||||
|
// std::negate<label>()
|
||||||
|
// );
|
||||||
|
//
|
||||||
|
// auto labels = ListOps::create<label>
|
||||||
|
// (
|
||||||
|
// ints,
|
||||||
|
// toLabel<int>()
|
||||||
|
// );
|
||||||
|
//
|
||||||
|
// auto vectors = ListOps::create<vector>
|
||||||
|
// (
|
||||||
|
// ints,
|
||||||
|
// [](const int& val){ return vector(1.5*val, 0, 0); }
|
||||||
|
// );
|
||||||
|
//
|
||||||
|
// \endcode
|
||||||
|
template<class T, class T2, class UnaryOperation>
|
||||||
|
List<T> create
|
||||||
|
(
|
||||||
|
const UList<T2>& input,
|
||||||
|
const UnaryOperation& op
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Create a List from an iterator range [first,last) of a dissimilar type.
|
||||||
|
// Uses std::distance for the size.
|
||||||
|
//
|
||||||
|
// \param first the begin of the iterator range
|
||||||
|
// \param last the end of the iterator range
|
||||||
|
// \param op the unary conversion operator, which can be used to convert
|
||||||
|
// to other types.
|
||||||
|
template<class T, class InputIterator, class UnaryOperation>
|
||||||
|
List<T> create
|
||||||
|
(
|
||||||
|
InputIterator first,
|
||||||
|
InputIterator last,
|
||||||
|
const UnaryOperation& op
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Create a List filled with default values and various locations with
|
||||||
|
//- another specified value.
|
||||||
|
//
|
||||||
|
// \param len the length of the list
|
||||||
|
// \param locations where to apply the specified value
|
||||||
|
// An out-of-range index is silently ignored.
|
||||||
|
// \param val the value to set at the specified locations
|
||||||
|
// \param deflt the initialization default value
|
||||||
|
template<class T>
|
||||||
|
List<T> createWithValue
|
||||||
|
(
|
||||||
|
const label len,
|
||||||
|
const labelUList& locations,
|
||||||
|
const T& val,
|
||||||
|
const T& deflt = T()
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Create a List filled with default values and various locations with
|
||||||
|
//- another specified value.
|
||||||
|
//
|
||||||
|
// \param len the length of the list
|
||||||
|
// \param locations where to apply the specified value
|
||||||
|
// An out-of-range index is silently ignored.
|
||||||
|
// \param val the value to set at the specified locations
|
||||||
|
// \param deflt the initialization default value
|
||||||
|
template<class T>
|
||||||
|
List<T> createWithValue
|
||||||
|
(
|
||||||
|
const label len,
|
||||||
|
const labelHashSet& locations,
|
||||||
|
const T& val,
|
||||||
|
const T& deflt = T()
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Create a List filled with default values and various locations with
|
||||||
|
//- another specified value.
|
||||||
|
//
|
||||||
|
// \param len the length of the list
|
||||||
|
// \param locations where to apply the specified value
|
||||||
|
// An out-of-range index is silently ignored.
|
||||||
|
// \param val the value to set at the specified locations
|
||||||
|
// \param deflt the initialization default value
|
||||||
|
template<class T>
|
||||||
|
List<T> createWithValue
|
||||||
|
(
|
||||||
|
const label len,
|
||||||
|
const UList<bool>& locations,
|
||||||
|
const T& val,
|
||||||
|
const T& deflt = T()
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Create a List filled with default values and various locations with
|
||||||
|
//- another specified value.
|
||||||
|
//
|
||||||
|
// \param len the length of the list
|
||||||
|
// \param locations where to apply the specified value
|
||||||
|
// An out-of-range index is silently ignored.
|
||||||
|
// \param val the value to set at the specified locations
|
||||||
|
// \param deflt the initialization default value
|
||||||
|
template<class T>
|
||||||
|
List<T> createWithValue
|
||||||
|
(
|
||||||
|
const label len,
|
||||||
|
const PackedBoolList& locations,
|
||||||
|
const T& val,
|
||||||
|
const T& deflt = T()
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Create a List filled with default values and one specified value,
|
||||||
|
//- which is copy assigned at the specified index
|
||||||
|
//
|
||||||
|
// \param len the length of the list
|
||||||
|
// \param index where to apply the specified value.
|
||||||
|
// An out-of-range index is silently ignored.
|
||||||
|
// \param val the value to copy assign at the specified index
|
||||||
|
// \param deflt the initialization default value
|
||||||
|
template<class T>
|
||||||
|
List<T> createWithValue
|
||||||
|
(
|
||||||
|
const label len,
|
||||||
|
const label index,
|
||||||
|
const T& val,
|
||||||
|
const T& deflt = T()
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Create a List filled with default values and one specified value,
|
||||||
|
//- which is move assigned at the specified index
|
||||||
|
//
|
||||||
|
// \param len the length of the list
|
||||||
|
// \param index where to apply the specified value.
|
||||||
|
// An out-of-range index is silently ignored.
|
||||||
|
// \param val the value to move assign at the specified index
|
||||||
|
// \param deflt the initialization default value
|
||||||
|
//
|
||||||
|
// For example,
|
||||||
|
// \code
|
||||||
|
// // Gather all unique points on master
|
||||||
|
//
|
||||||
|
// List<pointField> gatheredPoints(Pstream::nProcs());
|
||||||
|
// gatheredPoints[Pstream::myProcNo()] = pointField
|
||||||
|
// (
|
||||||
|
// mesh.points(),
|
||||||
|
// uniqueMeshPoints
|
||||||
|
// );
|
||||||
|
// ...
|
||||||
|
//
|
||||||
|
// // Or else
|
||||||
|
// auto gatheredPoints = ListOps::createWithValue<pointField>
|
||||||
|
// (
|
||||||
|
// Pstream::nProcs(),
|
||||||
|
// Pstream::myProcNo(),
|
||||||
|
// pointField(mesh.points(), uniqueMeshPoints)
|
||||||
|
// );
|
||||||
|
// ...
|
||||||
|
//
|
||||||
|
// \endcode
|
||||||
|
template<class T>
|
||||||
|
List<T> createWithValue
|
||||||
|
(
|
||||||
|
const label len,
|
||||||
|
const label index,
|
||||||
|
T&& val,
|
||||||
|
const T& deflt = T()
|
||||||
|
);
|
||||||
|
|
||||||
|
} // End namespace ListOps
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|||||||
@ -23,7 +23,9 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
#include "ListOps.H"
|
#include "ListOps.H"
|
||||||
|
#include "ListLoopM.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -558,36 +560,6 @@ Foam::labelList Foam::findIndices
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class ListType>
|
|
||||||
void Foam::setValues
|
|
||||||
(
|
|
||||||
ListType& input,
|
|
||||||
const labelUList& indices,
|
|
||||||
typename ListType::const_reference val
|
|
||||||
)
|
|
||||||
{
|
|
||||||
for (const label idx : indices)
|
|
||||||
{
|
|
||||||
input[idx] = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class ListType>
|
|
||||||
ListType Foam::createWithValues
|
|
||||||
(
|
|
||||||
const label len,
|
|
||||||
const typename ListType::const_reference initValue,
|
|
||||||
const labelUList& indices,
|
|
||||||
typename ListType::const_reference setValue
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ListType list(len, initValue);
|
|
||||||
setValues(list, indices, setValue);
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class ListType>
|
template<class ListType>
|
||||||
Foam::label Foam::findMax(const ListType& input, const label start)
|
Foam::label Foam::findMax(const ListType& input, const label start)
|
||||||
{
|
{
|
||||||
@ -736,51 +708,6 @@ Foam::label Foam::findLower
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void Foam::ListAppendEqOp<T>::operator()(List<T>& x, const List<T>& y) const
|
|
||||||
{
|
|
||||||
if (y.size())
|
|
||||||
{
|
|
||||||
label len = x.size();
|
|
||||||
if (len)
|
|
||||||
{
|
|
||||||
x.setSize(len + y.size());
|
|
||||||
for (const T& val : y)
|
|
||||||
{
|
|
||||||
x[len++] = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
x = y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void Foam::ListUniqueEqOp<T>::operator()(List<T>& x, const List<T>& y) const
|
|
||||||
{
|
|
||||||
if (y.size())
|
|
||||||
{
|
|
||||||
if (x.size())
|
|
||||||
{
|
|
||||||
for (const T& val : y)
|
|
||||||
{
|
|
||||||
if (!x.found(val))
|
|
||||||
{
|
|
||||||
x.append(val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
x = y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class ListType>
|
template<class ListType>
|
||||||
ListType Foam::reverseList(const ListType& input)
|
ListType Foam::reverseList(const ListType& input)
|
||||||
{
|
{
|
||||||
@ -859,4 +786,309 @@ void Foam::inplaceRotateList(ListType<DataType>& input, label n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * ListOps * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void Foam::ListOps::appendEqOp<T>::operator()
|
||||||
|
(
|
||||||
|
List<T>& x,
|
||||||
|
const List<T>& y
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (y.size())
|
||||||
|
{
|
||||||
|
label len = x.size();
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
|
x.resize(len + y.size());
|
||||||
|
for (const T& val : y)
|
||||||
|
{
|
||||||
|
x[len++] = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x = y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void Foam::ListOps::uniqueEqOp<T>::operator()
|
||||||
|
(
|
||||||
|
List<T>& x,
|
||||||
|
const List<T>& y
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (y.size())
|
||||||
|
{
|
||||||
|
if (x.size())
|
||||||
|
{
|
||||||
|
for (const T& val : y)
|
||||||
|
{
|
||||||
|
if (!x.found(val))
|
||||||
|
{
|
||||||
|
x.append(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x = y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void Foam::ListOps::setValue
|
||||||
|
(
|
||||||
|
UList<T>& list,
|
||||||
|
const labelUList& locations,
|
||||||
|
const T& val
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const label len = list.size();
|
||||||
|
|
||||||
|
for (const label index : locations)
|
||||||
|
{
|
||||||
|
// Range-checked
|
||||||
|
if (index >= 0 && index < len)
|
||||||
|
{
|
||||||
|
list[index] = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void Foam::ListOps::setValue
|
||||||
|
(
|
||||||
|
UList<T>& list,
|
||||||
|
const labelHashSet& locations,
|
||||||
|
const T& val
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const label len = list.size();
|
||||||
|
|
||||||
|
for (const label index : locations)
|
||||||
|
{
|
||||||
|
// Range-checked
|
||||||
|
if (index >= 0 && index < len)
|
||||||
|
{
|
||||||
|
list[index] = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void Foam::ListOps::setValue
|
||||||
|
(
|
||||||
|
UList<T>& list,
|
||||||
|
const UList<bool>& locations,
|
||||||
|
const T& val
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const label len = list.size();
|
||||||
|
const label count = locations.size();
|
||||||
|
const label end = min(count, len);
|
||||||
|
|
||||||
|
// The efficiency is modest
|
||||||
|
for (label index = 0; index < end; ++index)
|
||||||
|
{
|
||||||
|
if (locations[index])
|
||||||
|
{
|
||||||
|
list[index] = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void Foam::ListOps::setValue
|
||||||
|
(
|
||||||
|
UList<T>& list,
|
||||||
|
const PackedBoolList& locations,
|
||||||
|
const T& val
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Need improvements in PackedBoolList for more efficiency
|
||||||
|
|
||||||
|
const label len = list.size();
|
||||||
|
const label count = locations.count();
|
||||||
|
|
||||||
|
for (label index = 0, used = 0; index < len && used < count; ++index)
|
||||||
|
{
|
||||||
|
if (locations[index])
|
||||||
|
{
|
||||||
|
list[index] = val;
|
||||||
|
++used;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T, class T2, class UnaryOperation>
|
||||||
|
Foam::List<T> Foam::ListOps::create
|
||||||
|
(
|
||||||
|
const UList<T2>& input,
|
||||||
|
const UnaryOperation& op
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const label len = input.size();
|
||||||
|
|
||||||
|
List<T> output(len);
|
||||||
|
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
|
List_ACCESS(T, output, out);
|
||||||
|
List_CONST_ACCESS(T2, input, in);
|
||||||
|
|
||||||
|
for (label i = 0; i < len; ++i)
|
||||||
|
{
|
||||||
|
out[i] = op(in[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T, class InputIterator, class UnaryOperation>
|
||||||
|
Foam::List<T> Foam::ListOps::create
|
||||||
|
(
|
||||||
|
InputIterator first,
|
||||||
|
InputIterator last,
|
||||||
|
const UnaryOperation& op
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const label len = std::distance(first, last);
|
||||||
|
|
||||||
|
List<T> output(len);
|
||||||
|
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
|
List_ACCESS(T, output, out);
|
||||||
|
|
||||||
|
InputIterator in = first;
|
||||||
|
|
||||||
|
for (label i = 0; i < len; ++i)
|
||||||
|
{
|
||||||
|
out[i] = op(*in);
|
||||||
|
++in;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
Foam::List<T> Foam::ListOps::createWithValue
|
||||||
|
(
|
||||||
|
const label len,
|
||||||
|
const labelUList& locations,
|
||||||
|
const T& val,
|
||||||
|
const T& deflt
|
||||||
|
)
|
||||||
|
{
|
||||||
|
List<T> list(len, deflt);
|
||||||
|
ListOps::setValue(list, locations, val);
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
Foam::List<T> Foam::ListOps::createWithValue
|
||||||
|
(
|
||||||
|
const label len,
|
||||||
|
const labelHashSet& locations,
|
||||||
|
const T& val,
|
||||||
|
const T& deflt
|
||||||
|
)
|
||||||
|
{
|
||||||
|
List<T> list(len, deflt);
|
||||||
|
ListOps::setValue(list, locations, val);
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
Foam::List<T> Foam::ListOps::createWithValue
|
||||||
|
(
|
||||||
|
const label len,
|
||||||
|
const UList<bool>& locations,
|
||||||
|
const T& val,
|
||||||
|
const T& deflt
|
||||||
|
)
|
||||||
|
{
|
||||||
|
List<T> list(len, deflt);
|
||||||
|
ListOps::setValue(list, locations, val);
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
Foam::List<T> Foam::ListOps::createWithValue
|
||||||
|
(
|
||||||
|
const label len,
|
||||||
|
const PackedBoolList& locations,
|
||||||
|
const T& val,
|
||||||
|
const T& deflt
|
||||||
|
)
|
||||||
|
{
|
||||||
|
List<T> list(len, deflt);
|
||||||
|
ListOps::setValue(list, locations, val);
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
Foam::List<T> Foam::ListOps::createWithValue
|
||||||
|
(
|
||||||
|
const label len,
|
||||||
|
const label index,
|
||||||
|
const T& val,
|
||||||
|
const T& deflt
|
||||||
|
)
|
||||||
|
{
|
||||||
|
List<T> list(len, deflt);
|
||||||
|
|
||||||
|
// Range-checked
|
||||||
|
if (index >= 0 && index < len)
|
||||||
|
{
|
||||||
|
list[index] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
Foam::List<T> Foam::ListOps::createWithValue
|
||||||
|
(
|
||||||
|
const label len,
|
||||||
|
const label index,
|
||||||
|
T&& val,
|
||||||
|
const T& deflt
|
||||||
|
)
|
||||||
|
{
|
||||||
|
List<T> list(len, deflt);
|
||||||
|
|
||||||
|
// Range-checked
|
||||||
|
if (index >= 0 && index < len)
|
||||||
|
{
|
||||||
|
list[index] = std::move(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -88,13 +88,13 @@ inline Foam::PackedBoolList::PackedBoolList(const UList<bool>& lst)
|
|||||||
|
|
||||||
inline Foam::PackedBoolList::PackedBoolList(const labelUList& indices)
|
inline Foam::PackedBoolList::PackedBoolList(const labelUList& indices)
|
||||||
:
|
:
|
||||||
PackedBoolList(indices.size(), indices)
|
PackedBoolList((indices.size() ? indices.last() : 0), indices)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::PackedBoolList::PackedBoolList(const labelUIndList& indices)
|
inline Foam::PackedBoolList::PackedBoolList(const labelUIndList& indices)
|
||||||
:
|
:
|
||||||
PackedBoolList(indices.size(), indices)
|
PackedBoolList((indices.size() ? indices.last() : 0), indices)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -384,7 +384,7 @@ public:
|
|||||||
void writeEntry(const word& keyword, Ostream& os) const;
|
void writeEntry(const word& keyword, Ostream& os) const;
|
||||||
|
|
||||||
|
|
||||||
// Member operators
|
// Member Operators
|
||||||
|
|
||||||
//- Append a value at the end of the list
|
//- Append a value at the end of the list
|
||||||
inline PackedList<nBits>& append(const unsigned int val);
|
inline PackedList<nBits>& append(const unsigned int val);
|
||||||
@ -438,22 +438,32 @@ public:
|
|||||||
label index_;
|
label index_;
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct null - an end iterator
|
||||||
|
inline iteratorBase();
|
||||||
|
|
||||||
|
//- Construct from base list and position index
|
||||||
|
inline iteratorBase(const PackedList* lst, const label i);
|
||||||
|
|
||||||
|
|
||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
|
//- Limit index to the list size - avoid going past end()
|
||||||
|
// Eg, iter = iterator(list, Inf)
|
||||||
|
inline void bound();
|
||||||
|
|
||||||
//- Get value as unsigned, no range-checking
|
//- Get value as unsigned, no range-checking
|
||||||
inline unsigned int get() const;
|
inline unsigned int get() const;
|
||||||
|
|
||||||
//- Set value, returning true if changed, no range-checking
|
//- Set value, returning true if changed, no range-checking
|
||||||
inline bool set(unsigned int val);
|
inline bool set(unsigned int val);
|
||||||
|
|
||||||
|
//- Move backward through list
|
||||||
|
inline void prev();
|
||||||
|
|
||||||
// Constructors
|
//- Move forward through list
|
||||||
|
inline void next();
|
||||||
//- Construct null
|
|
||||||
inline iteratorBase();
|
|
||||||
|
|
||||||
//- Construct from base list and position index
|
|
||||||
inline iteratorBase(const PackedList* lst, const label i);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -534,15 +544,9 @@ public:
|
|||||||
//- Return value
|
//- Return value
|
||||||
inline unsigned int operator*() const;
|
inline unsigned int operator*() const;
|
||||||
|
|
||||||
//- Return value
|
|
||||||
inline unsigned int operator()() const;
|
|
||||||
|
|
||||||
//- Return iteratorBase for assigning values
|
//- Return iteratorBase for assigning values
|
||||||
inline iteratorBase& operator*();
|
inline iteratorBase& operator*();
|
||||||
|
|
||||||
//- Return iteratorBase for assigning values
|
|
||||||
inline iteratorBase& operator()();
|
|
||||||
|
|
||||||
inline iterator& operator++();
|
inline iterator& operator++();
|
||||||
inline iterator operator++(int);
|
inline iterator operator++(int);
|
||||||
|
|
||||||
@ -595,9 +599,6 @@ public:
|
|||||||
//- Return referenced value directly
|
//- Return referenced value directly
|
||||||
inline unsigned int operator*() const;
|
inline unsigned int operator*() const;
|
||||||
|
|
||||||
//- Return referenced value directly
|
|
||||||
inline unsigned int operator()() const;
|
|
||||||
|
|
||||||
inline const_iterator& operator++();
|
inline const_iterator& operator++();
|
||||||
inline const_iterator operator++(int);
|
inline const_iterator operator++(int);
|
||||||
|
|
||||||
|
|||||||
@ -294,8 +294,31 @@ inline Foam::PackedList<nBits>::iteratorBase::iteratorBase
|
|||||||
|
|
||||||
|
|
||||||
template<unsigned nBits>
|
template<unsigned nBits>
|
||||||
inline unsigned int
|
inline void Foam::PackedList<nBits>::iteratorBase::bound()
|
||||||
Foam::PackedList<nBits>::iteratorBase::get() const
|
{
|
||||||
|
if (list_ && index_ > list_->size_)
|
||||||
|
{
|
||||||
|
index_ = list_->size_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<unsigned nBits>
|
||||||
|
inline void Foam::PackedList<nBits>::iteratorBase::prev()
|
||||||
|
{
|
||||||
|
--index_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<unsigned nBits>
|
||||||
|
inline void Foam::PackedList<nBits>::iteratorBase::next()
|
||||||
|
{
|
||||||
|
++index_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<unsigned nBits>
|
||||||
|
inline unsigned int Foam::PackedList<nBits>::iteratorBase::get() const
|
||||||
{
|
{
|
||||||
const unsigned int seg = index_ / packing();
|
const unsigned int seg = index_ / packing();
|
||||||
const unsigned int off = index_ % packing();
|
const unsigned int off = index_ % packing();
|
||||||
@ -306,8 +329,7 @@ Foam::PackedList<nBits>::iteratorBase::get() const
|
|||||||
|
|
||||||
|
|
||||||
template<unsigned nBits>
|
template<unsigned nBits>
|
||||||
inline bool
|
inline bool Foam::PackedList<nBits>::iteratorBase::set(const unsigned int val)
|
||||||
Foam::PackedList<nBits>::iteratorBase::set(const unsigned int val)
|
|
||||||
{
|
{
|
||||||
const unsigned int seg = index_ / packing();
|
const unsigned int seg = index_ / packing();
|
||||||
const unsigned int off = index_ % packing();
|
const unsigned int off = index_ % packing();
|
||||||
@ -346,7 +368,7 @@ inline bool Foam::PackedList<nBits>::iteratorBase::operator==
|
|||||||
const iteratorBase& iter
|
const iteratorBase& iter
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return this->get() == iter.get();
|
return this->get() == iter.get(); // Compare values
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -356,7 +378,7 @@ inline bool Foam::PackedList<nBits>::iteratorBase::operator!=
|
|||||||
const iteratorBase& iter
|
const iteratorBase& iter
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return this->get() != iter.get();
|
return this->get() != iter.get(); // Compare values
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -366,8 +388,7 @@ inline void Foam::PackedList<nBits>::iteratorBase::operator=
|
|||||||
const iteratorBase& iter
|
const iteratorBase& iter
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const unsigned int val = iter.get();
|
this->set(iter.get()); // Set values
|
||||||
this->set(val);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -423,12 +444,7 @@ inline Foam::PackedList<nBits>::iterator::iterator
|
|||||||
:
|
:
|
||||||
iteratorBase(iter)
|
iteratorBase(iter)
|
||||||
{
|
{
|
||||||
// Avoid going past end()
|
this->bound();
|
||||||
// eg, iter = iterator(list, Inf)
|
|
||||||
if (this->index_ > this->list_->size_)
|
|
||||||
{
|
|
||||||
this->index_ = this->list_->size_;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -440,12 +456,7 @@ inline Foam::PackedList<nBits>::const_iterator::const_iterator
|
|||||||
:
|
:
|
||||||
iteratorBase(iter)
|
iteratorBase(iter)
|
||||||
{
|
{
|
||||||
// Avoid going past end()
|
this->bound();
|
||||||
// eg, iter = iterator(list, Inf)
|
|
||||||
if (this->index_ > this->list_->size_)
|
|
||||||
{
|
|
||||||
this->index_ = this->list_->size_;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -487,7 +498,7 @@ inline bool Foam::PackedList<nBits>::iterator::operator==
|
|||||||
const iteratorBase& iter
|
const iteratorBase& iter
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return this->index_ == iter.index_;
|
return this->index_ == iter.index_; // Compare positions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -497,7 +508,7 @@ inline bool Foam::PackedList<nBits>::iterator::operator!=
|
|||||||
const iteratorBase& iter
|
const iteratorBase& iter
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return this->index_ != iter.index_;
|
return this->index_ != iter.index_; // Compare positions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -507,7 +518,7 @@ inline bool Foam::PackedList<nBits>::const_iterator::operator==
|
|||||||
const iteratorBase& iter
|
const iteratorBase& iter
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return this->index_ == iter.index_;
|
return this->index_ == iter.index_; // Compare positions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -517,7 +528,7 @@ inline bool Foam::PackedList<nBits>::const_iterator::operator!=
|
|||||||
const iteratorBase& iter
|
const iteratorBase& iter
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return this->index_ != iter.index_;
|
return this->index_ != iter.index_; // Compare positions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -530,12 +541,7 @@ inline void Foam::PackedList<nBits>::iterator::operator=
|
|||||||
this->list_ = iter.list_;
|
this->list_ = iter.list_;
|
||||||
this->index_ = iter.index_;
|
this->index_ = iter.index_;
|
||||||
|
|
||||||
// Avoid going past end()
|
this->bound();
|
||||||
// eg, iter = iterator(list, Inf)
|
|
||||||
if (this->index_ > this->list_->size_)
|
|
||||||
{
|
|
||||||
this->index_ = this->list_->size_;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -548,14 +554,7 @@ inline void Foam::PackedList<nBits>::const_iterator::operator=
|
|||||||
this->list_ = iter.list_;
|
this->list_ = iter.list_;
|
||||||
this->index_ = iter.index_;
|
this->index_ = iter.index_;
|
||||||
|
|
||||||
// Avoid going past end()
|
this->bound();
|
||||||
// eg, iter = iterator(list, Inf)
|
|
||||||
if (this->index_ > this->list_->size_)
|
|
||||||
{
|
|
||||||
this->index_ = this->list_->size_;
|
|
||||||
}
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -563,7 +562,7 @@ template<unsigned nBits>
|
|||||||
inline typename Foam::PackedList<nBits>::iterator&
|
inline typename Foam::PackedList<nBits>::iterator&
|
||||||
Foam::PackedList<nBits>::iterator::operator++()
|
Foam::PackedList<nBits>::iterator::operator++()
|
||||||
{
|
{
|
||||||
++this->index_;
|
this->next();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -572,7 +571,7 @@ template<unsigned nBits>
|
|||||||
inline typename Foam::PackedList<nBits>::const_iterator&
|
inline typename Foam::PackedList<nBits>::const_iterator&
|
||||||
Foam::PackedList<nBits>::const_iterator::operator++()
|
Foam::PackedList<nBits>::const_iterator::operator++()
|
||||||
{
|
{
|
||||||
++this->index_;
|
this->next();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -581,8 +580,8 @@ template<unsigned nBits>
|
|||||||
inline typename Foam::PackedList<nBits>::iterator
|
inline typename Foam::PackedList<nBits>::iterator
|
||||||
Foam::PackedList<nBits>::iterator::operator++(int)
|
Foam::PackedList<nBits>::iterator::operator++(int)
|
||||||
{
|
{
|
||||||
iterator old = *this;
|
iterator old(*this);
|
||||||
++this->index_;
|
this->next();
|
||||||
return old;
|
return old;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -591,8 +590,8 @@ template<unsigned nBits>
|
|||||||
inline typename Foam::PackedList<nBits>::const_iterator
|
inline typename Foam::PackedList<nBits>::const_iterator
|
||||||
Foam::PackedList<nBits>::const_iterator::operator++(int)
|
Foam::PackedList<nBits>::const_iterator::operator++(int)
|
||||||
{
|
{
|
||||||
const_iterator old = *this;
|
const_iterator old(*this);
|
||||||
++this->index_;
|
this->next();
|
||||||
return old;
|
return old;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -601,7 +600,7 @@ template<unsigned nBits>
|
|||||||
inline typename Foam::PackedList<nBits>::iterator&
|
inline typename Foam::PackedList<nBits>::iterator&
|
||||||
Foam::PackedList<nBits>::iterator::operator--()
|
Foam::PackedList<nBits>::iterator::operator--()
|
||||||
{
|
{
|
||||||
--this->index_;
|
this->prev();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -610,7 +609,7 @@ template<unsigned nBits>
|
|||||||
inline typename Foam::PackedList<nBits>::const_iterator&
|
inline typename Foam::PackedList<nBits>::const_iterator&
|
||||||
Foam::PackedList<nBits>::const_iterator::operator--()
|
Foam::PackedList<nBits>::const_iterator::operator--()
|
||||||
{
|
{
|
||||||
--this->index_;
|
this->prev();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -619,8 +618,8 @@ template<unsigned nBits>
|
|||||||
inline typename Foam::PackedList<nBits>::iterator
|
inline typename Foam::PackedList<nBits>::iterator
|
||||||
Foam::PackedList<nBits>::iterator::operator--(int)
|
Foam::PackedList<nBits>::iterator::operator--(int)
|
||||||
{
|
{
|
||||||
iterator old = *this;
|
iterator old(*this);
|
||||||
--this->index_;
|
this->prev();
|
||||||
return old;
|
return old;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -629,8 +628,8 @@ template<unsigned nBits>
|
|||||||
inline typename Foam::PackedList<nBits>::const_iterator
|
inline typename Foam::PackedList<nBits>::const_iterator
|
||||||
Foam::PackedList<nBits>::const_iterator::operator--(int)
|
Foam::PackedList<nBits>::const_iterator::operator--(int)
|
||||||
{
|
{
|
||||||
const_iterator old = *this;
|
const_iterator old(*this);
|
||||||
--this->index_;
|
this->prev();
|
||||||
return old;
|
return old;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -643,14 +642,6 @@ Foam::PackedList<nBits>::iterator::operator*()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<unsigned nBits>
|
|
||||||
inline typename Foam::PackedList<nBits>::iteratorBase&
|
|
||||||
Foam::PackedList<nBits>::iterator::operator()()
|
|
||||||
{
|
|
||||||
return static_cast<iteratorBase&>(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<unsigned nBits>
|
template<unsigned nBits>
|
||||||
inline unsigned int
|
inline unsigned int
|
||||||
Foam::PackedList<nBits>::const_iterator::operator*() const
|
Foam::PackedList<nBits>::const_iterator::operator*() const
|
||||||
@ -659,14 +650,6 @@ Foam::PackedList<nBits>::const_iterator::operator*() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<unsigned nBits>
|
|
||||||
inline unsigned int
|
|
||||||
Foam::PackedList<nBits>::const_iterator::operator()() const
|
|
||||||
{
|
|
||||||
return this->get();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<unsigned nBits>
|
template<unsigned nBits>
|
||||||
inline typename Foam::PackedList<nBits>::iterator
|
inline typename Foam::PackedList<nBits>::iterator
|
||||||
Foam::PackedList<nBits>::begin()
|
Foam::PackedList<nBits>::begin()
|
||||||
@ -785,7 +768,6 @@ inline void Foam::PackedList<nBits>::resize
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Mask off the (new) final partial segment
|
// Mask off the (new) final partial segment
|
||||||
{
|
{
|
||||||
const unsigned int off = size_ % packing();
|
const unsigned int off = size_ % packing();
|
||||||
@ -913,7 +895,7 @@ inline void Foam::PackedList<nBits>::clearStorage()
|
|||||||
template<unsigned nBits>
|
template<unsigned nBits>
|
||||||
inline void Foam::PackedList<nBits>::shrink()
|
inline void Foam::PackedList<nBits>::shrink()
|
||||||
{
|
{
|
||||||
// Any uneed space allocated?
|
// Any unneeded space allocated?
|
||||||
const label len = packedLength();
|
const label len = packedLength();
|
||||||
if (len < StorageList::size())
|
if (len < StorageList::size())
|
||||||
{
|
{
|
||||||
|
|||||||
@ -213,10 +213,10 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Null constructor
|
//- Null constructor
|
||||||
inline UList();
|
inline constexpr UList() noexcept;
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
inline UList(T* __restrict__ v, label size);
|
inline UList(T* __restrict__ v, label size) noexcept;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|||||||
@ -30,7 +30,7 @@ License
|
|||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
inline Foam::UList<T>::UList()
|
inline constexpr Foam::UList<T>::UList() noexcept
|
||||||
:
|
:
|
||||||
size_(0),
|
size_(0),
|
||||||
v_(nullptr)
|
v_(nullptr)
|
||||||
@ -38,7 +38,7 @@ inline Foam::UList<T>::UList()
|
|||||||
|
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
inline Foam::UList<T>::UList(T* __restrict__ v, label size)
|
inline Foam::UList<T>::UList(T* __restrict__ v, label size) noexcept
|
||||||
:
|
:
|
||||||
size_(size),
|
size_(size),
|
||||||
v_(v)
|
v_(v)
|
||||||
|
|||||||
@ -288,7 +288,7 @@ inline bool operator==(const edge& a, const edge& b);
|
|||||||
inline bool operator!=(const edge& a, const edge& b);
|
inline bool operator!=(const edge& a, const edge& b);
|
||||||
|
|
||||||
|
|
||||||
//- Hash specialization for hashing edges - a commutative hash value.
|
//- Hash specialization for hashing edges as a commutative hash value.
|
||||||
// Hash incrementally.
|
// Hash incrementally.
|
||||||
template<>
|
template<>
|
||||||
inline unsigned Hash<edge>::operator()(const edge& e, unsigned seed) const
|
inline unsigned Hash<edge>::operator()(const edge& e, unsigned seed) const
|
||||||
@ -310,7 +310,7 @@ inline unsigned Hash<edge>::operator()(const edge& e, unsigned seed) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Hash specialization for hashing edges - a commutative hash value.
|
//- Hash specialization for hashing edges as a commutative hash value.
|
||||||
// Hash incrementally.
|
// Hash incrementally.
|
||||||
template<>
|
template<>
|
||||||
inline unsigned Hash<edge>::operator()(const edge& e) const
|
inline unsigned Hash<edge>::operator()(const edge& e) const
|
||||||
|
|||||||
@ -394,13 +394,10 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//- Hash specialization to offset faces in ListListOps::combineOffset
|
//- Specialization to offset faces, used in ListListOps::combineOffset
|
||||||
template<>
|
template<>
|
||||||
class offsetOp<face>
|
struct offsetOp<face>
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
inline face operator()
|
inline face operator()
|
||||||
(
|
(
|
||||||
const face& x,
|
const face& x,
|
||||||
|
|||||||
@ -128,13 +128,10 @@ template<>
|
|||||||
inline bool contiguous<labelledTri>() {return true;}
|
inline bool contiguous<labelledTri>() {return true;}
|
||||||
|
|
||||||
|
|
||||||
//- Hash specialization to offset faces in ListListOps::combineOffset
|
//- Specialization to offset faces, used in ListListOps::combineOffset
|
||||||
template<>
|
template<>
|
||||||
class offsetOp<labelledTri>
|
struct offsetOp<labelledTri>
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
inline labelledTri operator()
|
inline labelledTri operator()
|
||||||
(
|
(
|
||||||
const labelledTri& x,
|
const labelledTri& x,
|
||||||
|
|||||||
@ -246,8 +246,8 @@ inline bool operator==(const triFace& a, const triFace& b);
|
|||||||
inline bool operator!=(const triFace& a, const triFace& b);
|
inline bool operator!=(const triFace& a, const triFace& b);
|
||||||
|
|
||||||
|
|
||||||
//- Hash specialization for hashing triFace - a commutative hash value.
|
//- Hash specialization for triFace as a commutative hash value.
|
||||||
// Hash incrementally.
|
// Hashes incrementally.
|
||||||
template<>
|
template<>
|
||||||
inline unsigned Hash<triFace>::operator()(const triFace& t, unsigned seed) const
|
inline unsigned Hash<triFace>::operator()(const triFace& t, unsigned seed) const
|
||||||
{
|
{
|
||||||
@ -262,7 +262,7 @@ inline unsigned Hash<triFace>::operator()(const triFace& t, unsigned seed) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Hash specialization for hashing triFace - a commutative hash value.
|
//- Hash specialization for triFace as a commutative hash value.
|
||||||
template<>
|
template<>
|
||||||
inline unsigned Hash<triFace>::operator()(const triFace& t) const
|
inline unsigned Hash<triFace>::operator()(const triFace& t) const
|
||||||
{
|
{
|
||||||
@ -270,13 +270,10 @@ inline unsigned Hash<triFace>::operator()(const triFace& t) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Hash specialization to offset faces in ListListOps::combineOffset
|
//- Specialization to offset faces, used in ListListOps::combineOffset
|
||||||
template<>
|
template<>
|
||||||
class offsetOp<triFace>
|
struct offsetOp<triFace>
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
inline triFace operator()
|
inline triFace operator()
|
||||||
(
|
(
|
||||||
const triFace& x,
|
const triFace& x,
|
||||||
|
|||||||
@ -205,13 +205,7 @@ void Foam::mapDistributePolyMesh::distributePointIndices(labelList& lst) const
|
|||||||
// Construct boolList from selected elements
|
// Construct boolList from selected elements
|
||||||
boolList isSelected
|
boolList isSelected
|
||||||
(
|
(
|
||||||
createWithValues<boolList>
|
ListOps::createWithValue<bool>(nOldPoints(), lst, true, false)
|
||||||
(
|
|
||||||
nOldPoints(),
|
|
||||||
false,
|
|
||||||
lst,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Distribute
|
// Distribute
|
||||||
@ -227,13 +221,7 @@ void Foam::mapDistributePolyMesh::distributeFaceIndices(labelList& lst) const
|
|||||||
// Construct boolList from selected elements
|
// Construct boolList from selected elements
|
||||||
boolList isSelected
|
boolList isSelected
|
||||||
(
|
(
|
||||||
createWithValues<boolList>
|
ListOps::createWithValue<bool>(nOldFaces(), lst, true, false)
|
||||||
(
|
|
||||||
nOldFaces(),
|
|
||||||
false,
|
|
||||||
lst,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Distribute
|
// Distribute
|
||||||
@ -249,13 +237,7 @@ void Foam::mapDistributePolyMesh::distributeCellIndices(labelList& lst) const
|
|||||||
// Construct boolList from selected elements
|
// Construct boolList from selected elements
|
||||||
boolList isSelected
|
boolList isSelected
|
||||||
(
|
(
|
||||||
createWithValues<boolList>
|
ListOps::createWithValue<bool>(nOldCells(), lst, true, false)
|
||||||
(
|
|
||||||
nOldCells(),
|
|
||||||
false,
|
|
||||||
lst,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Distribute
|
// Distribute
|
||||||
@ -271,12 +253,12 @@ void Foam::mapDistributePolyMesh::distributePatchIndices(labelList& lst) const
|
|||||||
// Construct boolList from selected elements
|
// Construct boolList from selected elements
|
||||||
boolList isSelected
|
boolList isSelected
|
||||||
(
|
(
|
||||||
createWithValues<boolList>
|
ListOps::createWithValue<bool>
|
||||||
(
|
(
|
||||||
oldPatchStarts().size(), // nOldPatches
|
oldPatchStarts().size(), // nOldPatches
|
||||||
false,
|
|
||||||
lst,
|
lst,
|
||||||
true
|
true, // set value
|
||||||
|
false // default value
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -1413,12 +1413,12 @@ Foam::label Foam::snappyRefineDriver::shellRefine
|
|||||||
|
|
||||||
// mark list to remove any refined faces
|
// mark list to remove any refined faces
|
||||||
meshRefiner_.userFaceData()[0].first() = meshRefinement::REMOVE;
|
meshRefiner_.userFaceData()[0].first() = meshRefinement::REMOVE;
|
||||||
meshRefiner_.userFaceData()[0].second() = createWithValues<labelList>
|
meshRefiner_.userFaceData()[0].second() = ListOps::createWithValue<label>
|
||||||
(
|
(
|
||||||
mesh.nFaces(),
|
mesh.nFaces(),
|
||||||
-1,
|
|
||||||
meshRefiner_.intersectedFaces(),
|
meshRefiner_.intersectedFaces(),
|
||||||
0
|
0, // set value
|
||||||
|
-1 // default value
|
||||||
);
|
);
|
||||||
|
|
||||||
// Determine the maximum refinement level over all volume refinement
|
// Determine the maximum refinement level over all volume refinement
|
||||||
|
|||||||
@ -1007,7 +1007,7 @@ void Foam::AMIInterpolation<SourcePatch, TargetPatch>::update
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Send data back to originating procs. Note that contributions
|
// Send data back to originating procs. Note that contributions
|
||||||
// from different processors get added (ListAppendEqOp)
|
// from different processors get added (ListOps::appendEqOp)
|
||||||
|
|
||||||
mapDistributeBase::distribute
|
mapDistributeBase::distribute
|
||||||
(
|
(
|
||||||
@ -1019,7 +1019,7 @@ void Foam::AMIInterpolation<SourcePatch, TargetPatch>::update
|
|||||||
map.subMap(),
|
map.subMap(),
|
||||||
false, // has flip
|
false, // has flip
|
||||||
tgtAddress_,
|
tgtAddress_,
|
||||||
ListAppendEqOp<label>(),
|
ListOps::appendEqOp<label>(),
|
||||||
flipOp(), // flip operation
|
flipOp(), // flip operation
|
||||||
labelList()
|
labelList()
|
||||||
);
|
);
|
||||||
@ -1034,7 +1034,7 @@ void Foam::AMIInterpolation<SourcePatch, TargetPatch>::update
|
|||||||
map.subMap(),
|
map.subMap(),
|
||||||
false,
|
false,
|
||||||
tgtWeights_,
|
tgtWeights_,
|
||||||
ListAppendEqOp<scalar>(),
|
ListOps::appendEqOp<scalar>(),
|
||||||
flipOp(),
|
flipOp(),
|
||||||
scalarList()
|
scalarList()
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1084,13 +1084,7 @@ Foam::triSurface Foam::distributedTriSurfaceMesh::subsetMesh
|
|||||||
{
|
{
|
||||||
const boolList include
|
const boolList include
|
||||||
(
|
(
|
||||||
createWithValues<boolList>
|
ListOps::createWithValue<bool>(s.size(), newToOldFaces, true, false)
|
||||||
(
|
|
||||||
s.size(),
|
|
||||||
false,
|
|
||||||
newToOldFaces,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
newToOldPoints.setSize(s.points().size());
|
newToOldPoints.setSize(s.points().size());
|
||||||
|
|||||||
@ -1266,13 +1266,7 @@ Foam::triSurface Foam::isoSurface::subsetMesh
|
|||||||
{
|
{
|
||||||
const boolList include
|
const boolList include
|
||||||
(
|
(
|
||||||
createWithValues<boolList>
|
ListOps::createWithValue<bool>(s.size(), newToOldFaces, true, false)
|
||||||
(
|
|
||||||
s.size(),
|
|
||||||
false,
|
|
||||||
newToOldFaces,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
newToOldPoints.setSize(s.points().size());
|
newToOldPoints.setSize(s.points().size());
|
||||||
|
|||||||
@ -1236,13 +1236,7 @@ Foam::triSurface Foam::isoSurfaceCell::subsetMesh
|
|||||||
{
|
{
|
||||||
const boolList include
|
const boolList include
|
||||||
(
|
(
|
||||||
createWithValues<boolList>
|
ListOps::createWithValue<bool>(s.size(), newToOldFaces, true, false)
|
||||||
(
|
|
||||||
s.size(),
|
|
||||||
false,
|
|
||||||
newToOldFaces,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
newToOldPoints.setSize(s.points().size());
|
newToOldPoints.setSize(s.points().size());
|
||||||
|
|||||||
Reference in New Issue
Block a user