3.4
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
dumux
common
optionalscalar.hh
Go to the documentation of this file.
1
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
// vi: set et ts=4 sw=4 sts=4:
3
/*****************************************************************************
4
* See the file COPYING for full copying permissions. *
5
* *
6
* This program is free software: you can redistribute it and/or modify *
7
* it under the terms of the GNU General Public License as published by *
8
* the Free Software Foundation, either version 3 of the License, or *
9
* (at your option) any later version. *
10
* *
11
* This program is distributed in the hope that it will be useful, *
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14
* GNU General Public License for more details. *
15
* *
16
* You should have received a copy of the GNU General Public License *
17
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
18
*****************************************************************************/
24
#ifndef DUMUX_COMMON_OPTIONAL_SCALAR_HH
25
#define DUMUX_COMMON_OPTIONAL_SCALAR_HH
26
27
#include <limits>
28
#include <cmath>
29
30
namespace
Dumux
{
31
37
template
<
class
T>
38
struct
OptionalScalar
39
{
40
static_assert
(std::numeric_limits<T>::has_quiet_NaN,
"T has to be able to represent a quiet NaN!"
);
41
42
OptionalScalar
() =
default
;
43
44
OptionalScalar
(T
value
)
45
: value_(
value
)
46
{}
47
48
T
value
()
const
49
{
return
value_; }
50
51
explicit
operator
bool()
const
52
{
53
using
std::isnan;
54
return
!isnan(value_);
55
}
56
private
:
57
T value_ = std::numeric_limits<T>::quiet_NaN();
58
};
59
60
}
// namespace Dumux
61
62
#endif
Dumux
Definition:
adapt.hh:29
Dumux::OptionalScalar
A type for an optional scalar (contains either a valid number or NaN)
Definition:
optionalscalar.hh:39
Dumux::OptionalScalar::OptionalScalar
OptionalScalar(T value)
Definition:
optionalscalar.hh:44
Dumux::OptionalScalar::value
T value() const
Definition:
optionalscalar.hh:48
Dumux::OptionalScalar::OptionalScalar
OptionalScalar()=default
Generated by
1.9.3