diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C index 1054d4da37..e909848e8f 100644 --- a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C +++ b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2016-2019 OpenCFD Ltd. + Copyright (C) 2016-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -46,7 +46,7 @@ void Foam::dimensioned::initialize(Istream& is, const bool checkDims) is.putBack(nextToken); } - scalar mult(1.0); + scalar mult{1}; if (nextToken == token::BEGIN_SQR) { @@ -128,7 +128,11 @@ Foam::dimensioned::dimensioned(const dimensionSet& dims) template -Foam::dimensioned::dimensioned(const dimensionSet& dims, const zero) +Foam::dimensioned::dimensioned +( + const dimensionSet& dims, + const Foam::zero +) : name_("0"), dimensions_(dims), @@ -139,13 +143,26 @@ Foam::dimensioned::dimensioned(const dimensionSet& dims, const zero) template Foam::dimensioned::dimensioned ( - const word& name, - const dimensioned& dt + const dimensionSet& dims, + const Foam::one ) : - name_(name), - dimensions_(dt.dimensions_), - value_(dt.value_) + name_("1"), + dimensions_(dims), + value_(pTraits::one) +{} + + +template +Foam::dimensioned::dimensioned +( + const dimensionSet& dims, + const Type& val +) +: + name_(::Foam::name(val)), + dimensions_(dims), + value_(val) {} @@ -163,6 +180,19 @@ Foam::dimensioned::dimensioned {} +template +Foam::dimensioned::dimensioned +( + const word& name, + const dimensioned& dt +) +: + name_(name), + dimensions_(dt.dimensions_), + value_(dt.value_) +{} + + template Foam::dimensioned::dimensioned ( @@ -490,7 +520,7 @@ Foam::Istream& Foam::dimensioned::read(Istream& is, const bool readName) } // Read dimensionSet + multiplier - scalar mult(1.0); + scalar mult{1}; dimensions_.read(is, mult); // Read value @@ -510,7 +540,7 @@ Foam::dimensioned::read(Istream& is, const dictionary& readSet) is >> name_; // Read dimensionSet + multiplier - scalar mult(1.0); + scalar mult{1}; dimensions_.read(is, mult, readSet); // Read value @@ -533,7 +563,7 @@ Foam::Istream& Foam::dimensioned::read is >> name_; // Read dimensionSet + multiplier - scalar mult(1.0); + scalar mult{1}; dimensions_.read(is, mult, readSet); // Read value @@ -561,7 +591,7 @@ void Foam::dimensioned::writeEntry } // The dimensions - scalar mult(1.0); + scalar mult{1}; dimensions_.write(os, mult); // The value @@ -777,7 +807,7 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const dimensioned& dt) os << dt.name() << token::SPACE; // The dimensions - scalar mult(1.0); + scalar mult{1}; dt.dimensions().write(os, mult); // The value diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H index cfab0f339e..4744218e54 100644 --- a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H +++ b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H @@ -48,7 +48,8 @@ SourceFiles namespace Foam { -// Forward declarations +// Forward Declarations +class one; class zero; class dictionary; class primitiveEntry; @@ -58,7 +59,6 @@ template class dimensioned; template Istream& operator>>(Istream& is, dimensioned& dt); - /*---------------------------------------------------------------------------*\ Class dimensioned Declaration \*---------------------------------------------------------------------------*/ @@ -130,7 +130,10 @@ public: explicit dimensioned(const dimensionSet& dims); //- A dimensioned Zero, named "0" - explicit dimensioned(const dimensionSet& dims, const zero); + explicit dimensioned(const dimensionSet& dims, const Foam::zero); + + //- A dimensioned pTraits::one, named "1" + explicit dimensioned(const dimensionSet& dims, const Foam::one); //- Implicit construct dimensionless from given value. dimensioned(const Type& val) @@ -140,8 +143,8 @@ public: value_(val) {} - //- Copy construct dimensioned Type with a new name - dimensioned(const word& name, const dimensioned& dt); + //- Construct dimensioned from given value + dimensioned(const dimensionSet& dims, const Type& val); //- Construct from components (name, dimensions, value). dimensioned @@ -151,6 +154,9 @@ public: const Type& val ); + //- Copy construct dimensioned Type with a new name + dimensioned(const word& name, const dimensioned& dt); + //- Construct from primitive entry with given name. // The entry may contain optional name and dimensions. // \verbatim @@ -234,7 +240,7 @@ public: // Static Member Functions //- Construct dimensioned from dictionary, with default value. - //- FatalIOError if there are excess tokens. + // FatalIOError if there are excess tokens. static dimensioned getOrDefault ( const word& name, diff --git a/src/OpenFOAM/primitives/one/one.H b/src/OpenFOAM/primitives/one/one.H index ed60d1fb2f..a869fa31fc 100644 --- a/src/OpenFOAM/primitives/one/one.H +++ b/src/OpenFOAM/primitives/one/one.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2017 OpenCFD Ltd. + Copyright (C) 2017-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -28,8 +28,9 @@ Class Foam::one Description - A class representing the concept of 1 (one), which can be used to avoid - manipulating objects that are known to be \em one at compile-time. + A class representing the concept of 1 (one) that can be used to avoid + manipulating objects known to be \em one at compile-time. + It is also used for tagged dispatch. SourceFiles oneI.H @@ -49,7 +50,7 @@ SeeAlso namespace Foam { -// Forward declarations +// Forward Declarations class one; class Istream; class Ostream; @@ -61,13 +62,14 @@ class Ostream; class one { public: + typedef one value_type; - // Forward declarations + // Forward Declarations class minus; class null; - //- Null constructible + //- Default construct constexpr one() noexcept {} //- Construct from Istream consumes no content. @@ -75,19 +77,19 @@ public: //- Return 1 for label - inline constexpr operator label() const noexcept + constexpr operator label() const noexcept { return 1; } //- Return 1 for float - inline constexpr operator float() const noexcept + constexpr operator float() const noexcept { return 1; } //- Return 1 for double - inline constexpr operator double() const noexcept + constexpr operator double() const noexcept { return 1; } @@ -99,14 +101,15 @@ public: \*---------------------------------------------------------------------------*/ //- A class representing the concept of -1. -// Note that this class must never be derived from 'one', since this could +// \note this class must never be derived from Foam::one, since this could // potentially mask its behaviour. class one::minus { public: + typedef minus value_type; - //- Null constructible + //- Default construct constexpr minus() noexcept {} //- Construct from Istream consumes no content. @@ -114,19 +117,19 @@ public: //- Return -1 for label - inline constexpr operator label() const noexcept + constexpr operator label() const noexcept { return -1; } //- Return -1 for float - inline constexpr operator float() const noexcept + constexpr operator float() const noexcept { return -1; } //- Return -1 for double - inline constexpr operator double() const noexcept + constexpr operator double() const noexcept { return -1; } @@ -137,15 +140,16 @@ public: Class one::null Declaration \*---------------------------------------------------------------------------*/ -//- A one class with a null output adapter. +//- A Foam::one class with a null output adapter. class one::null : public one { public: + typedef null value_type; - //- Null constructible + //- Default construct constexpr null() noexcept {} //- Construct from Istream consumes no content. @@ -155,6 +159,9 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +//- Global one (1) +static constexpr const one One; + // IOstream Operators //- Read from Istream consumes no content. @@ -182,6 +189,7 @@ inline constexpr Ostream& operator<<(Ostream& os, const one::null&) noexcept // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Global Operators, Functions #include "oneI.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/primitives/zero/zero.H b/src/OpenFOAM/primitives/zero/zero.H index 4bac8e7fa8..8e64dc00ad 100644 --- a/src/OpenFOAM/primitives/zero/zero.H +++ b/src/OpenFOAM/primitives/zero/zero.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2017-2019 OpenCFD Ltd. + Copyright (C) 2017-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -28,8 +28,9 @@ Class Foam::zero Description - A class representing the concept of 0 (zero), which can be used to avoid - manipulating objects that are known to be \em zero at compile-time. + A class representing the concept of 0 (zero) that can be used to avoid + manipulating objects known to be \em zero at compile-time. + It is also used for tagged dispatch. SourceFiles zero.C @@ -50,7 +51,7 @@ SeeAlso namespace Foam { -// Forward declarations +// Forward Declarations class zero; class Istream; class Ostream; @@ -62,12 +63,13 @@ class Ostream; class zero { public: + typedef zero value_type; - // Forward declarations + // Forward Declarations class null; - //- Null constructible + //- Default construct constexpr zero() noexcept {} //- Construct from Istream consumes no content. @@ -75,25 +77,25 @@ public: //- Return false (0) for bool - inline constexpr operator bool() const noexcept + constexpr operator bool() const noexcept { return false; } //- Return 0 for label - inline constexpr operator label() const noexcept + constexpr operator label() const noexcept { return 0; } //- Return 0 for float - inline constexpr operator float() const noexcept + constexpr operator float() const noexcept { return 0; } //- Return 0 for double - inline constexpr operator double() const noexcept + constexpr operator double() const noexcept { return 0; } @@ -110,6 +112,7 @@ class zero::null public zero { public: + typedef null value_type; //- A static zero::null for dereferencing as a dummy element @@ -125,7 +128,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -//- Global zero +//- Global zero (0) static constexpr const zero Zero; // IOstream Operators @@ -149,6 +152,7 @@ inline constexpr Ostream& operator<<(Ostream& os, const zero::null&) noexcept // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Global Operators, Functions #include "zeroI.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //