PtrListDetailIO.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) 2018 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 "PtrListDetail.H"
29 #include "error.H"
30 #include "Ostream.H"
31 
32 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
33 
34 template<class T>
36 (
37  Ostream& os,
38  const bool trimNull
39 ) const
40 {
41  const label len = this->size();
42 
43  // The (output) size and start delimiter
44  os << nl << indent << (trimNull ? this->count() : len) << nl
45  << indent << token::BEGIN_LIST << incrIndent << nl;
46 
47  // Contents
48  for (label i=0; i < len; ++i)
49  {
50  const T* ptr = (*this)[i];
51  if (ptr)
52  {
53  os << *ptr << nl;
54  }
55  else if (!trimNull)
56  {
58  << "cannot dereference nullptr at index " << i
59  << " in range [0," << len << ")"
60  << abort(FatalError);
61  }
62  }
63 
64  // End delimiter
65  os << decrIndent << indent << token::END_LIST << nl;
66 
67  os.check(FUNCTION_NAME);
68  return os;
69 }
70 
71 
72 // ************************************************************************* //
Foam::incrIndent
Ostream & incrIndent(Ostream &os)
Increment the indent level.
Definition: Ostream.H:346
error.H
Foam::FatalError
error FatalError
os
OBJstream os(runTime.globalPath()/outputName)
PtrListDetail.H
Foam::decrIndent
Ostream & decrIndent(Ostream &os)
Decrement the indent level.
Definition: Ostream.H:353
Foam::abort
errorManip< error > abort(error &err)
Definition: errorManip.H:144
T
const volScalarField & T
Definition: createFieldRefs.H:2
Foam::indent
Ostream & indent(Ostream &os)
Indent stream.
Definition: Ostream.H:339
Foam::Detail::PtrListDetail::write
Ostream & write(Ostream &os, const bool trimNull=false) const
Write output, optionally silently trimming nullptrs.
Definition: PtrListDetailIO.C:36
Ostream.H
FatalErrorInFunction
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:453
Foam::nl
constexpr char nl
Definition: Ostream.H:404
Foam::BitOps::count
unsigned int count(const UList< bool > &bools, const bool val=true)
Count number of 'true' entries.
Definition: BitOps.H:77
FUNCTION_NAME
#define FUNCTION_NAME
Definition: messageStream.H:295
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:56