STYLE: IOobject/regIOobject - noexcept methods, isolate local functions

- local writeHeaderEntry helper was not marked as file-scope static.

- use do/while to simplify handling of padding spaces

ENH: IOobject - copy construct, resetting name and local component

- when copying with a new local component, this is simpler than
  constructing from all of the components, which was previously the
  only possibility for setting a new local component.
This commit is contained in:
Mark Olesen
2022-05-03 10:33:31 +02:00
parent 0e01e530a8
commit cb6f908798
11 changed files with 143 additions and 117 deletions

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2016-2021 OpenCFD Ltd.
Copyright (C) 2016-2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -312,8 +312,8 @@ Foam::IOobject::IOobject
const word& name,
const fileName& instance,
const objectRegistry& registry,
readOption ro,
writeOption wo,
readOption rOpt,
writeOption wOpt,
bool registerObject,
bool globalObject
)
@ -323,11 +323,11 @@ Foam::IOobject::IOobject
note_(),
instance_(instance),
local_(),
rOpt_(ro),
wOpt_(wo),
rOpt_(rOpt),
wOpt_(wOpt),
registerObject_(registerObject),
globalObject_(globalObject),
objState_(GOOD),
objState_(objectState::GOOD),
sizeofLabel_(static_cast<unsigned char>(sizeof(label))),
sizeofScalar_(static_cast<unsigned char>(sizeof(scalar))),
@ -349,8 +349,8 @@ Foam::IOobject::IOobject
const fileName& instance,
const fileName& local,
const objectRegistry& registry,
readOption ro,
writeOption wo,
readOption rOpt,
writeOption wOpt,
bool registerObject,
bool globalObject
)
@ -360,11 +360,11 @@ Foam::IOobject::IOobject
note_(),
instance_(instance),
local_(local),
rOpt_(ro),
wOpt_(wo),
rOpt_(rOpt),
wOpt_(wOpt),
registerObject_(registerObject),
globalObject_(globalObject),
objState_(GOOD),
objState_(objectState::GOOD),
sizeofLabel_(static_cast<unsigned char>(sizeof(label))),
sizeofScalar_(static_cast<unsigned char>(sizeof(scalar))),
@ -384,8 +384,8 @@ Foam::IOobject::IOobject
(
const fileName& path,
const objectRegistry& registry,
readOption ro,
writeOption wo,
readOption rOpt,
writeOption wOpt,
bool registerObject,
bool globalObject
)
@ -395,11 +395,11 @@ Foam::IOobject::IOobject
note_(),
instance_(),
local_(),
rOpt_(ro),
wOpt_(wo),
rOpt_(rOpt),
wOpt_(wOpt),
registerObject_(registerObject),
globalObject_(globalObject),
objState_(GOOD),
objState_(objectState::GOOD),
sizeofLabel_(static_cast<unsigned char>(sizeof(label))),
sizeofScalar_(static_cast<unsigned char>(sizeof(scalar))),
@ -471,14 +471,27 @@ Foam::IOobject::IOobject
Foam::IOobject::IOobject
(
const IOobject& io,
readOption ro,
writeOption wo
const word& name,
const fileName& local
)
:
IOobject(io, name)
{
local_ = local;
}
Foam::IOobject::IOobject
(
const IOobject& io,
readOption rOpt,
writeOption wOpt
)
:
IOobject(io)
{
rOpt_ = ro;
wOpt_ = wo;
rOpt_ = rOpt;
wOpt_ = wOpt;
}
@ -589,7 +602,7 @@ Foam::fileName Foam::IOobject::globalFilePath
void Foam::IOobject::setBad(const string& s)
{
if (objState_ != GOOD)
if (objState_ != objectState::GOOD)
{
FatalErrorInFunction
<< "Recurrent failure for object " << s
@ -602,7 +615,7 @@ void Foam::IOobject::setBad(const string& s)
<< "Broken object " << s << info() << endl;
}
objState_ = BAD;
objState_ = objectState::BAD;
}

View File

@ -270,7 +270,7 @@ public:
return bannerEnabled_;
}
//- Enable/disable an output file banner
//- Enable/disable output file banner
// \return the previous value
static bool bannerEnabled(bool on) noexcept
{
@ -360,8 +360,8 @@ public:
const word& name,
const fileName& instance,
const objectRegistry& registry,
readOption r=NO_READ,
writeOption w=NO_WRITE,
readOption rOpt = NO_READ,
writeOption wOpt = NO_WRITE,
bool registerObject = true,
bool globalObject = false
);
@ -373,8 +373,8 @@ public:
const fileName& instance,
const fileName& local,
const objectRegistry& registry,
readOption r=NO_READ,
writeOption w=NO_WRITE,
readOption rOpt = NO_READ,
writeOption wOpt = NO_WRITE,
bool registerObject = true,
bool globalObject = false
);
@ -389,33 +389,24 @@ public:
(
const fileName& path,
const objectRegistry& registry,
readOption r=NO_READ,
writeOption w=NO_WRITE,
readOption rOpt = NO_READ,
writeOption wOpt = NO_WRITE,
bool registerObject = true,
bool globalObject = false
);
//- Copy construct, resetting registry
IOobject
(
const IOobject& io,
const objectRegistry& registry
);
IOobject(const IOobject& io, const objectRegistry& registry);
//- Copy construct, resetting name
IOobject
(
const IOobject& io,
const word& name
);
IOobject(const IOobject& io, const word& name);
//- Copy construct, resetting name and local component
IOobject(const IOobject& io, const word& name, const fileName& local);
//- Copy construct, resetting read/write options
IOobject(const IOobject& io, readOption rOpt, writeOption wOpt);
//- Copy construct, resetting io options
IOobject
(
const IOobject& io,
readOption,
writeOption
);
//- Clone
autoPtr<IOobject> clone() const
@ -440,7 +431,7 @@ public:
//- Return Time associated with the objectRegistry
const Time& time() const;
//- Return name
//- Return the object name
inline const word& name() const noexcept;
//- Return name of the class name read from header
@ -452,10 +443,10 @@ public:
//- Return the optional note
inline const string& note() const noexcept;
//- Return non-constant access to the optional note
//- Modifiable access to the optional note
inline string& note() noexcept;
//- Rename
//- Rename the object
virtual void rename(const word& newName)
{
name_ = newName;
@ -522,14 +513,19 @@ public:
//- Return member (name without the extension)
inline word member() const;
//- Return the Time::rootPath()
const fileName& rootPath() const;
//- Return the Time::caseName()
const fileName& caseName() const;
//- Read access to instance path component
inline const fileName& instance() const noexcept;
//- Write access to instance path component
inline fileName& instance() noexcept;
//- Read access to local path component
inline const fileName& local() const noexcept;
//- The complete path
@ -633,8 +629,10 @@ public:
// Error Handling
//- Did last readHeader() succeed?
inline bool good() const noexcept;
//- Did last readHeader() fail?
inline bool bad() const noexcept;
@ -650,6 +648,7 @@ public:
// Member Operators
//- Copy assignment, copies all values (except the registry)
void operator=(const IOobject& io);

View File

@ -227,13 +227,13 @@ inline Foam::fileName Foam::IOobject::objectPath() const
inline bool Foam::IOobject::good() const noexcept
{
return objState_ == GOOD;
return objState_ == objectState::GOOD;
}
inline bool Foam::IOobject::bad() const noexcept
{
return objState_ == BAD;
return objState_ == objectState::BAD;
}

View File

@ -128,16 +128,17 @@ bool Foam::IOobject::readHeader(dictionary& headerDict, Istream& is)
}
// Check stream is still OK
objState_ = (is.good() ? GOOD : BAD);
objState_ = (is.good() ? objectState::GOOD : objectState::BAD);
if (IOobject::debug)
{
Info<< " .... read - state: "
<< (objState_ == GOOD ? "good" : "bad") << endl;
<< (objState_ == objectState::GOOD ? "good" : "bad")
<< endl;
}
if (objState_ == BAD)
if (objState_ == objectState::BAD)
{
if
(

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2016-2021 OpenCFD Ltd.
Copyright (C) 2016-2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -36,24 +36,27 @@ License
namespace Foam
{
inline void writeSpaces(Ostream& os, label nSpaces)
// Like Ostream::writeEntry, but with fewer spaces
template<class T>
static inline void writeHeaderEntry
(
Ostream& os,
const word& key,
const T& value
)
{
if (nSpaces < 1)
{
nSpaces = 1;
}
while (nSpaces--)
os.indent();
os.write(key);
label padding = (12 - label(key.size()));
// Write padding spaces (always at least one)
do
{
os.write(char(token::SPACE));
}
}
while (--padding > 0);
// Similar to writeEntry, but with fewer spaces
template<class T>
inline void writeHeaderEntry(Ostream& os, const word& key, const T& value)
{
os << indent << key;
writeSpaces(os, 12 - label(key.size()));
os << value << char(token::END_STATEMENT) << nl;
}

View File

@ -107,8 +107,8 @@ Foam::IOobjectList::IOobjectList
const objectRegistry& db,
const fileName& instance,
const fileName& local,
IOobject::readOption r,
IOobject::writeOption w,
IOobject::readOption rOpt,
IOobject::writeOption wOpt,
bool registerObject
)
:
@ -131,8 +131,8 @@ Foam::IOobjectList::IOobjectList
newInstance,
local,
db,
r,
w,
rOpt,
wOpt,
registerObject
);

View File

@ -164,8 +164,8 @@ public:
const objectRegistry& db,
const fileName& instance,
const fileName& local = "",
IOobject::readOption r = IOobject::MUST_READ,
IOobject::writeOption w = IOobject::NO_WRITE,
IOobject::readOption rOpt = IOobject::MUST_READ,
IOobject::writeOption wOpt = IOobject::NO_WRITE,
bool registerObject = true
);

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
Copyright (C) 2021-2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -36,24 +36,27 @@ License
namespace Foam
{
inline void writeSpaces(Ostream& os, label nSpaces)
// Like Ostream::writeEntry, but with fewer spaces
template<class T>
static inline void writeHeaderEntry
(
Ostream& os,
const word& key,
const T& value
)
{
if (nSpaces < 1)
{
nSpaces = 1;
}
while (nSpaces--)
os.indent();
os.write(key);
label padding = (12 - label(key.size()));
// Write padding spaces (always at least one)
do
{
os.write(char(token::SPACE));
}
}
while (--padding > 0);
// Similar to writeEntry, but with fewer spaces
template<class T>
inline void writeHeaderEntry(Ostream& os, const word& key, const T& value)
{
os << indent << key;
writeSpaces(os, 12 - label(key.size()));
os << value << char(token::END_STATEMENT) << nl;
}

View File

@ -65,24 +65,20 @@ Foam::Ostream& Foam::Ostream::writeKeyword(const keyType& kw)
return *this;
}
label nSpaces = entryIndentation_ - label(kw.size());
label padding = (entryIndentation_ - label(kw.size()));
// Account for quotes surrounding pattern
if (kw.isPattern())
{
nSpaces -= 2;
padding -= 2;
}
// Could also increment by indentSize_ ...
if (nSpaces < 1)
{
nSpaces = 1;
}
while (nSpaces--)
// Write padding spaces (always at least one)
do
{
write(char(token::SPACE));
}
while (--padding > 0);
return *this;
}

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2018-2021 OpenCFD Ltd.
Copyright (C) 2018-2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -38,8 +38,8 @@ SourceFiles
\*---------------------------------------------------------------------------*/
#ifndef regIOobject_H
#define regIOobject_H
#ifndef Foam_regIOobject_H
#define Foam_regIOobject_H
#include "IOobject.H"
#include "refPtr.H"
@ -174,8 +174,13 @@ public:
//- Add file watch on object (if registered and READ_IF_MODIFIED)
virtual void addWatch();
//- Query the registered state (ie, has been checked in).
//- This is not necessarily the same as registerObject(),
//- which is just a stated preference.
inline bool registered() const noexcept;
//- Is this object owned by the registry?
inline bool ownedByRegistry() const;
inline bool ownedByRegistry() const noexcept;
//- Register object with its registry
//- and transfer ownership to the registry.
@ -223,18 +228,18 @@ public:
template<class Type>
inline static Type& store(tmp<Type>&& ptr);
//- Release ownership of this object from its registry
// \param unregister optionally set as non-registered
inline void release(const bool unregister = false);
//- Set object as \b not ownedByRegistry
// \param unregister optionally set as non-registered too
inline void release(const bool unregister = false) noexcept;
// Dependency Checking
//- Event number at last update.
inline label eventNo() const;
inline label eventNo() const noexcept;
//- Event number at last update.
inline label& eventNo();
inline label& eventNo() noexcept;
//- Return true if up-to-date with respect to given object
bool upToDate(const regIOobject&) const;
@ -318,11 +323,11 @@ public:
// \return index of watch
virtual label addWatch(const fileName&);
//- Return file-monitoring handles
inline const labelList& watchIndices() const;
//- Read access to file-monitoring handles
inline const labelList& watchIndices() const noexcept;
//- Return file-monitoring handles
inline labelList& watchIndices();
//- Write access to file-monitoring handles
inline labelList& watchIndices() noexcept;
//- Return true if the object's file (or files for objectRegistry)
//- have been modified. (modified state is cached by Time)

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
Copyright (C) 2018-2021 OpenCFD Ltd.
Copyright (C) 2018-2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -28,7 +28,13 @@ License
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
inline bool Foam::regIOobject::ownedByRegistry() const
inline bool Foam::regIOobject::registered() const noexcept
{
return registered_;
}
inline bool Foam::regIOobject::ownedByRegistry() const noexcept
{
return ownedByRegistry_;
}
@ -172,7 +178,7 @@ inline Type& Foam::regIOobject::store(tmp<Type>&& ptr)
}
inline void Foam::regIOobject::release(const bool unregister)
inline void Foam::regIOobject::release(const bool unregister) noexcept
{
ownedByRegistry_ = false;
if (unregister)
@ -182,24 +188,24 @@ inline void Foam::regIOobject::release(const bool unregister)
}
inline Foam::label Foam::regIOobject::eventNo() const
inline Foam::label Foam::regIOobject::eventNo() const noexcept
{
return eventNo_;
}
inline Foam::label& Foam::regIOobject::eventNo()
inline Foam::label& Foam::regIOobject::eventNo() noexcept
{
return eventNo_;
}
inline const Foam::labelList& Foam::regIOobject::watchIndices() const
inline const Foam::labelList& Foam::regIOobject::watchIndices() const noexcept
{
return watchIndices_;
}
inline Foam::labelList& Foam::regIOobject::watchIndices()
inline Foam::labelList& Foam::regIOobject::watchIndices() noexcept
{
return watchIndices_;
}