3.4
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
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
30namespace Dumux {
31
37template<class T>
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
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 }
56private:
57 T value_ = std::numeric_limits<T>::quiet_NaN();
58};
59
60} // namespace Dumux
61
62#endif
Definition: adapt.hh:29
A type for an optional scalar (contains either a valid number or NaN)
Definition: optionalscalar.hh:39
OptionalScalar(T value)
Definition: optionalscalar.hh:44
T value() const
Definition: optionalscalar.hh:48