PtrListDetailI.H
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) 2018-2023 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 // * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * //
29 
30 template<class T>
32 :
33  List<T*>()
34 {}
35 
36 
37 template<class T>
39 :
40  List<T*>(len, static_cast<T*>(nullptr))
41 {}
42 
43 
44 template<class T>
46 (
47  const UList<T*>& list
48 )
49 :
50  List<T*>(list)
51 {}
52 
53 
54 template<class T>
56 (
57  const PtrListDetail<T>& list
58 )
59 :
60  List<T*>(static_cast<const List<T*>&>(list))
61 {}
62 
63 
64 template<class T>
66 (
67  PtrListDetail<T>&& list
68 ) noexcept
69 :
70  List<T*>(std::move(static_cast<List<T*>&>(list)))
71 {}
72 
73 
74 template<class T>
76 (
77  PtrListDetail<T>& list,
78  bool reuse
79 )
80 :
81  List<T*>(static_cast<List<T*>&>(list), reuse)
82 {}
83 
84 
85 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
86 
87 template<class T>
88 inline const T* Foam::Detail::PtrListDetail<T>::get(const label i) const
89 {
90  return (i >= 0 && i < this->size()) ? (*this)[i] : nullptr;
91 }
92 
93 
94 template<class T>
95 inline T* Foam::Detail::PtrListDetail<T>::get(const label i)
96 {
97  return (i >= 0 && i < this->size()) ? (*this)[i] : nullptr;
98 }
99 
100 
101 template<class T>
103 (
104  const label n
106 {
108 }
109 
110 
111 template<class T>
112 inline void Foam::Detail::PtrListDetail<T>::resize(const label newLen)
113 {
114  if (newLen <= 0)
115  {
116  List<T*>::clear();
117  }
118  else if (newLen != List<T*>::size())
119  {
120  // Truncate or extend. Any new elements are initialized to nullptr.
121  List<T*>::resize(newLen, static_cast<T*>(nullptr));
122  }
123 }
124 
125 
126 template<class T>
127 inline void Foam::Detail::PtrListDetail<T>::resize_null(const label newLen)
128 {
129  if (newLen <= 0)
130  {
131  List<T*>::clear();
132  }
133  else
134  {
136  List<T*>::operator=(static_cast<T*>(nullptr));
137  }
138 }
139 
140 
141 template<class T>
143 {
144  const label idx = this->find_first_not();
145 
146  if (idx >= 0)
147  {
149  << "Element " << idx << " is null" << nl
150  << abort(FatalError);
151  }
152 }
153 
154 
155 // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
156 
157 template<class T>
159 (
160  const PtrListDetail<T>& list
161 )
162 {
163  List<T*>::operator=(list); // shallow copy
164 }
165 
166 
167 template<class T>
169 (
170  PtrListDetail<T>&& list
171 )
172 {
173  List<T*>::transfer(list);
174 }
175 
176 
177 template<class T>
178 inline void Foam::Detail::PtrListDetail<T>::operator=(std::nullptr_t)
179 {
180  List<T*>::operator=(static_cast<T*>(nullptr));
181 }
182 
183 
184 // ************************************************************************* //
patchWriters resize(patchIds.size())
error FatalError
Error stream (stdout output on all processes), with additional &#39;FOAM FATAL ERROR&#39; header text and sta...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:598
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition: BitOps.H:56
constexpr char nl
The newline &#39;\n&#39; character (0x0a)
Definition: Ostream.H:50
A rudimentary list of pointers used for PtrList, UPtrList, etc. This class is considered implementati...
Definition: PtrListDetail.H:57
void checkNonNull() const
FatalError if any null exists in the list.
patchWriters clear()
errorManip< error > abort(error &err)
Definition: errorManip.H:139
A 1D vector of objects of type <T>, where the size of the vector is known and can be used for subscri...
Definition: HashTable.H:105
const direction noexcept
Definition: Scalar.H:258
void operator=(const PtrListDetail< T > &list)
Copy assignment (shallow copies addresses)
const volScalarField & T
void setAddressableSize(const label n) noexcept
Set addressed size to be inconsistent with allocated storage.
void resize(const label newLen)
Reset size of list.
const T * get(const label i) const
Return const pointer to element or nullptr for out-of-range access.
label n
constexpr PtrListDetail() noexcept
Default construct.
void resize_null(const label newLen)
Set the list to the given size and set all entries to nullptr.