Arcane  v3.14.10.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
27ARCANE_BEGIN_NAMESPACE
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32class IVariable;
33class VariableOperator;
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
37
39: public ExpressionImpl
40{
41 public:
42
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 */
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
74template<class T>
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
127ARCANE_END_NAMESPACE
128
129/*---------------------------------------------------------------------------*/
130/*---------------------------------------------------------------------------*/
131
132#endif
virtual eDataType dataType() const =0
Type de la donnée gérée par la variable (Real, Integer, ...)
virtual Integer nbElement() const =0
Nombre d'éléments de la variable.
Operateur binaire generique pour les expressions.
Vue modifiable d'un tableau d'un type T.
constexpr const_pointer data() const noexcept
Pointeur sur le début de la vue.
Vue constante d'un tableau de type T.