Loading...
Searching...
No Matches
DynamicList.C
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2017-2023 OpenCFD Ltd.
9-------------------------------------------------------------------------------
10License
11 This file is part of OpenFOAM.
12
13 OpenFOAM is free software: you can redistribute it and/or modify it
14 under the terms of the GNU General Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
17
18 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25
26\*---------------------------------------------------------------------------*/
27
28#include "DynamicList.H"
29
30// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
31
32template<class T, int SizeMin>
33Foam::label Foam::DynamicList<T, SizeMin>::removeElements
34(
35 const labelRange& slice
36)
37{
38 if (!slice.good())
39 {
40 // No-op
41 return 0;
42 }
43
44 // Note: already checked for valid begin_value before
45 if (slice.end_value() >= this->size())
46 {
47 // Remove entire tail
48 this->resize(slice.begin_value());
49 }
50 else
51 {
52 // Move all trailing elements down into space previously
53 // occupied by the slice. Truncate after
54 std::move
55 (
56 this->begin(slice.end_value()),
57 this->end(),
58 this->begin(slice.begin_value())
59 );
60
61 this->resize(this->size() - slice.size());
62 }
63
64 return slice.size();
65}
66
67
68template<class T, int SizeMin>
69Foam::label Foam::DynamicList<T, SizeMin>::subsetElements
70(
71 const labelRange& slice
72)
73{
74 if (slice.begin_value() > 0)
75 {
76 // Move elements down.
77 // Since begin_value > 0, the initial destination is non-overlapping
78 std::move
79 (
80 this->begin(slice.begin_value()),
81 this->begin(slice.end_value()),
82 this->begin()
83 );
84 }
85
86 // Don't need min size, since slice size was already checked before
87 resize(slice.size());
88 return this->size();
89}
90
91
92// ************************************************************************* //
patchWriters resize(patchIds.size())