DUNE-ACFEM (unstable)

sign.hh
1 #ifndef __DUNE_ACFEM_EXPRESSIONS_SIGN_HH__
2 #define __DUNE_ACFEM_EXPRESSIONS_SIGN_HH__
3 
4 #include <ostream>
5 
6 namespace 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.80.0 (Apr 27, 22:29, 2024)