Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
Expression.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* Expression.h (C) 2000-2025 */
9/* */
10/* Reference to an expression. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_EXPR_EXPRESSION_H
13#define ARCANE_CORE_EXPR_EXPRESSION_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/datatype/ScalarVariant.h"
18
19#include "arcane/expr/IExpressionImpl.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30class IExpressionImpl;
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35
43class ARCANE_EXPR_EXPORT Expression
44{
45 public:
46
48 Expression();
49
51
52 explicit Expression(Real v);
53
58 Expression(const Expression& expr);
59
60 void operator=(const Expression& expr);
61 virtual ~Expression();
62
63 public:
64
65 void assign(const Expression& expr);
66 void assign(const Expression& expr, const Array<Integer>& indices);
67 void assign(Real val);
68
69 void apply(ExpressionResult* result);
70
71 void dumpIf(const Expression& test_expr, Array<Expression>& exprs);
72 void dumpIf(const Expression& test_expr);
73
74 IExpressionImpl* operator->() const;
75
76 Expression operator-();
77 Expression inverse();
78
79 Expression acos();
80 Expression asin();
81 Expression atan();
82 Expression ceil();
83 Expression cos();
84 Expression cosh();
85 Expression exp();
86 Expression fabs();
87 Expression floor();
88 Expression log();
89 Expression log10();
90 Expression sin();
91 Expression sinh();
92 Expression sqrt();
93 Expression tan();
94 Expression tanh();
95
96 Expression operator+(Expression ex1);
97 Expression operator-(Expression ex1);
98 Expression operator*(Expression ex1);
99 Expression operator/(Expression ex1);
100
101 Expression eq(Expression ex1);
102 Expression lt(Expression ex1);
103 Expression gt(Expression ex1);
104 Expression lte(Expression ex1);
105 Expression gte(Expression ex1);
106
107 Expression eor(Expression ex1);
108 Expression eand(Expression ex1);
109
110 Expression operator+(Real a)
111 {
112 return this->operator+(literal(a));
113 }
114 Expression operator-(Real a)
115 {
116 return this->operator-(literal(a));
117 }
118 Expression operator*(Real a)
119 {
120 return this->operator*(literal(a));
121 }
122 Expression operator/(Real a)
123 {
124 return this->operator/(literal(a));
125 }
126
127 Expression eq(Real a)
128 {
129 return this->eq(literal(a));
130 }
131 Expression lt(Real a)
132 {
133 return this->lt(literal(a));
134 }
135 Expression gt(Real a)
136 {
137 return this->gt(literal(a));
138 }
139 Expression lte(Real a)
140 {
141 return this->lte(literal(a));
142 }
143 Expression gte(Real a)
144 {
145 return this->gte(literal(a));
146 }
147
148 Expression eand(Real a)
149 {
150 return this->eand(literal(a));
151 }
152 Expression eor(Real a)
153 {
154 return this->eor(literal(a));
155 }
156
157 Expression ifelse(Expression ex1, Expression ex2);
158 Expression ifelse(Real ex1, Real ex2)
159 {
160 return this->ifelse(literal(ex1), literal(ex2));
161 }
162 Expression ifelse(Expression ex1, Real ex2)
163 {
164 return this->ifelse(ex1, literal(ex2));
165 }
166 Expression ifelse(Real ex1, Expression ex2)
167 {
168 return this->ifelse(literal(ex1), ex2);
169 }
170
171 Expression minimum(Expression v);
172 Expression minimum(Real v)
173 {
174 return this->minimum(literal(v));
175 }
176
177 Expression maximum(Expression v);
178 Expression maximum(Real v)
179 {
180 return this->maximum(literal(v));
181 }
182
183 Expression pow(Expression v);
184 Expression pow(Real v)
185 {
186 return this->pow(literal(v));
187 }
188
189 Expression literal(Real v);
190
191 void setTrace(bool v);
192
193 unsigned long vectorSize();
194
195 private:
196
197 IExpressionImpl* m_expression;
198};
199
200/*---------------------------------------------------------------------------*/
201/*---------------------------------------------------------------------------*/
202
203} // namespace Arcane
204
205/*---------------------------------------------------------------------------*/
206/*---------------------------------------------------------------------------*/
207
208#endif
Base class for 1D data vectors.
Polymorphic base type of an expression.
Expression()
Default constructor.
Definition Expression.cc:37
Interface for the different implementations of an expression.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
double Real
Type representing a real number.