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-2022 OpenCFD Ltd.
9 -------------------------------------------------------------------------------
10 License
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 #include "labelRange.H"
30 
31 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
32 
33 template<class T, int SizeMin>
35 (
36  const labelRange& slice
37 )
38 {
39  if (!slice.size())
40  {
41  // No-op
42  return 0;
43  }
44  else if (slice.end_value() >= this->size())
45  {
46  // Remove entire tail
47  this->resize(slice.begin_value());
48  }
49  else
50  {
51  // Copy (swap) down, from range rbegin() -> rend()
52  // followed by truncation
53  label j = slice.begin_value();
54  const label len = this->size();
55 
56  for (label i = slice.end_value(); i < len; ++i, ++j)
57  {
58  Foam::Swap(this->operator[](i), this->operator[](j));
59  }
60 
61  this->resize(this->size() - slice.size());
62  }
63 
64  return slice.size();
65 }
66 
67 
68 template<class T, int SizeMin>
70 (
71  const labelRange& slice
72 )
73 {
74  if (slice.begin_value() > 0)
75  {
76  // Copy (swap) down
77  label j = slice.begin_value();
78  const label len = slice.size();
79 
80  for (label i = 0; i < len; ++i, ++j)
81  {
82  Foam::Swap(this->operator[](i), this->operator[](j));
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 // ************************************************************************* //
void size(const label n)
Older name for setAddressableSize.
Definition: UList.H:118
patchWriters resize(patchIds.size())
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects...
Definition: DynamicList.H:51
void Swap(DynamicList< T, SizeMinA > &a, DynamicList< T, SizeMinB > &b)
Definition: DynamicList.H:647