DUNE-ACFEM (unstable)

sign.hh
1#ifndef __DUNE_ACFEM_EXPRESSIONS_SIGN_HH__
2#define __DUNE_ACFEM_EXPRESSIONS_SIGN_HH__
3
4#include <ostream>
5
6namespace Dune {
7
8 namespace ACFem {
9
10 namespace Expressions {
11
27 template<bool nonSingular, bool semiPositive, bool semiNegative,
28 std::ptrdiff_t offset = 0>
30 {
31 static constexpr bool isNonSingular = nonSingular;
32 static constexpr bool isSemiPositive = semiPositive;
33 static constexpr bool isSemiNegative = semiNegative;
34 static constexpr bool isZero = !isNonSingular && isSemiPositive && isSemiNegative;
35 static constexpr bool isNonZero = nonSingular;
36 static constexpr bool isPositive = isNonZero && isSemiPositive;
37 static constexpr bool isNegative = isNonZero && isSemiNegative;
38 static constexpr std::ptrdiff_t reference = offset;
39 using Sign = ExpressionSign;
40 };
41
43 template<bool nonSingular, bool semiPositive, bool semiNegative, ssize_t offset>
45 {
47 out << "{";
48 Sign::isSemiPositive && out << "(>=" << Sign::reference << ")";
49 Sign::isSemiNegative && out << "(<=" << Sign::reference << ")";
50 Sign::isZero && out << "(==" << Sign::reference << ")";
51 Sign::isNonZero && out << "(!=" << Sign::reference << ")";
52 Sign::isNonSingular && out << "(!/" << Sign::reference << ")";
53 Sign::isPositive && out << "(>" << Sign::reference << ")";
54 Sign::isNegative && out << "(<" << Sign::reference << ")";
55 out << "}";
56 return out;
57 };
58
59 } // Expressions::
60
61 using Expressions::ExpressionSign;
62
72
73 } // ACFem::
74
75} // Dune::
76
77#endif // __DUNE_ACFEM_EXPRESSIONS_SIGN_HH__
std::ostream & operator<<(std::ostream &out, TypeString< T > &&t)
Output operator for TypePrint tag-structure.
Definition: ostream.hh:39
A class mainting the sign of an expression during operations.
Definition: sign.hh:30
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Jul 15, 22:36, 2024)