ENH: improve objectRegistry functionality (issue #322)
-
Recursive searching for objects within a registry is now optional (previous it was always done).
A recursive search effectively blocks the construction of sub-sub-registries if their names are 'masked' by some parent level sub-registry with the same name! (BUG)
-
Recursive search is now turned OFF by default, which makes it consistent with dictionary and probably causes the least number of surprises.
Various new convenience methods added:
lookupObjectRef()
-
returns a non-const reference. For example,
volScalarField& U = mesh().lookupObjectRef<volScalarField>("U");
Instead of
volScalarField& U = const_cast<volScalarField&> ( mesh().lookupObject<volScalarField>("U") );
-- lookupObjectPtr()
-
returns a const pointer, and nullptr on failure. For example,
const volScalarField* Uptr = mesh().lookupObjectPtr<volScalarField>("U"); if (Uptr) { const volScalarField& U = *Uptr; ... }
Instead of
if (mesh().foundObject<volScalarField>("U")) { const volScalarField& U = mesh().lookupObject<volScalarField>("U"); ... }
-- lookupObjectRefPtr()
-
returns a non-const pointer, and nullptr on failure. For example,
volScalarField* Uptr = mesh().lookupObjectRefPtr<volScalarField>("U"); if (Uptr) { volScalarField& U = *Uptr; // use as reference (*Uptr) = ...; // or use directly }
Instead of
if (mesh().foundObject<volScalarField>("U")) { volScalarField& U = const_cast<volScalarField&> ( mesh().lookupObject<volScalarField>("U") ); }
-- sortedNames()
-
now works with template parameters and with regular expression matching as well. For example,
wordList names = mesh().sortedNames(); wordList fields = mesh().sortedName<volScalarField>();
Instead of
wordList names = mesh().sortedNames(); wordList fields = mesh().names<volScalarField>(); Foam::sort(fields);
--