Arcane
v3.15.3.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
VariableExpressionImpl.h
1
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2
//-----------------------------------------------------------------------------
3
// Copyright 2000-2024 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
#error "VariableExpression are no longer available. Do not include this file"
8
/*---------------------------------------------------------------------------*/
9
/* VariableExpressionImpl.h (C) 2000-2024 */
10
/* */
11
/* Expression traitant une variable. */
12
/*---------------------------------------------------------------------------*/
13
#ifndef ARCANE_VARIABLEEXPRESSIONIMPL_H
14
#define ARCANE_VARIABLEEXPRESSIONIMPL_H
15
/*---------------------------------------------------------------------------*/
16
/*---------------------------------------------------------------------------*/
17
18
19
#include "arcane/expr/ExpressionImpl.h"
20
#include "arcane/expr/Expression.h"
21
#include "arcane/expr/ExpressionResult.h"
22
#include "arcane/expr/BadOperandException.h"
23
24
/*---------------------------------------------------------------------------*/
25
/*---------------------------------------------------------------------------*/
26
27
ARCANE_BEGIN_NAMESPACE
28
29
/*---------------------------------------------------------------------------*/
30
/*---------------------------------------------------------------------------*/
31
32
class
IVariable;
33
class
VariableOperator;
34
35
/*---------------------------------------------------------------------------*/
36
/*---------------------------------------------------------------------------*/
37
38
class
VariableExpressionImpl
39
:
public
ExpressionImpl
40
{
41
public
:
42
43
VariableExpressionImpl
(
IVariable
*
var
);
44
45
public
:
46
47
virtual
void
assign(
IExpressionImpl
*
expr
);
48
virtual
void
assign(
IExpressionImpl
*,
IntegerConstArrayView
indices
);
49
virtual
void
apply(
ExpressionResult
*
result
);
50
virtual
Integer vectorSize()
const
;
51
52
private
:
53
IVariable
* m_variable;
54
VariableOperator
* m_op;
55
};
56
57
/*---------------------------------------------------------------------------*/
58
/*---------------------------------------------------------------------------*/
59
/*!
60
* \brief Operateur binaire generique pour les expressions.
61
*/
62
class
VariableOperator
63
{
64
public
:
65
virtual
~VariableOperator
() {}
66
public
:
67
virtual
void
assign(
ExpressionResult
*
res
,
IVariable
*
var
)=0;
68
virtual
void
evaluate(
ExpressionResult
*
res
,
IVariable
*
var
)=0;
69
};
70
71
/*---------------------------------------------------------------------------*/
72
/*---------------------------------------------------------------------------*/
73
74
template
<
class
T>
75
class
VariableOperatorT
76
:
public
VariableOperator
77
{
78
public
:
79
virtual
~VariableOperatorT
() {}
80
public
:
81
virtual
void
assign(
ExpressionResult
*
res
,
IVariable
*
var
)
82
{
83
// Notons que la taille de la variable peut être plus importante
84
// que celle du résultat suivant les indices retenus (cf WhereExpression)
85
Integer size =
res
->size();
86
87
// recuperation des valeurs du resultat et de la variable
88
ArrayView<T>
res_val
;
89
res
->data()->value(
res_val
);
90
ExpressionResult
var_res
(
var
);
91
ArrayView<T>
var_val
;
92
var_res
.data()->value(
var_val
);
93
IntegerConstArrayView
res_indices
=
res
->indices();
94
95
for
( Integer i=0 ; i<size ; ++i)
96
var_val
[
res_indices
[i]] =
res_val
[i];
97
}
98
99
virtual
void
evaluate(
ExpressionResult
*
res
,
IVariable
*
var
)
100
{
101
// Notons que la taille de la variable peut être plus importante
102
// que celle du résultat suivant les indices retenus (cf WhereExpression)
103
Integer size =
res
->size();
104
if
(size >
var
->nbElement())
105
throw
BadOperandException
(
"VariableOperatorT::evaluate"
);
106
107
// allocation du résultat en fonction du type de la variable
108
VariantBase::eType type = VariantBase::fromDataType(
var
->dataType());
109
res
->allocate(type);
110
111
// recuperation des valeurs des operandes
112
ArrayView<T>
res_val
;
113
res
->data()->value(
res_val
);
114
ExpressionResult
var_res
(
var
);
115
ArrayView<T>
var_val
;
116
var_res
.data()->value(
var_val
);
117
IntegerConstArrayView
res_indices
=
res
->indices();
118
119
for
( Integer i=0 ; i<size ; ++i)
120
res_val
[i] =
var_val
[
res_indices
[i]];
121
}
122
};
123
124
/*---------------------------------------------------------------------------*/
125
/*---------------------------------------------------------------------------*/
126
127
ARCANE_END_NAMESPACE
128
129
/*---------------------------------------------------------------------------*/
130
/*---------------------------------------------------------------------------*/
131
132
#endif
Arcane::IVariable
Definition
IVariable.h:56
Arcane::VariableExpressionImpl
Definition
VariableExpressionImpl.h:40
Arcane::VariableOperatorT
Definition
VariableExpressionImpl.h:77
Arcane::VariableOperator
Operateur binaire generique pour les expressions.
Definition
VariableExpressionImpl.h:63
Arccore::ConstArrayView
Vue constante d'un tableau de type T.
Definition
arccore/src/base/arccore/base/ArrayView.h:533
Arccore::Ref
Référence à une instance.
Definition
arccore/src/base/arccore/base/Ref.h:143
arcane
core
VariableExpressionImpl.h
Généré le Lundi 10 Février 2025 02:47:10 pour Arcane par
1.9.8