Arcane  v3.16.0.0
Documentation développeur
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
38class 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/*---------------------------------------------------------------------------*/
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
Vue modifiable d'un tableau d'un type T.
constexpr const_pointer data() const noexcept
Pointeur sur le début de la vue.
Exception sur les opérandes des opérations des expressions.
Type de base polymorphe d'une expression.
Interface pour les différentes implémentations d'une expression.
Interface d'une variable.
Definition IVariable.h:56
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.
virtual Integer vectorSize() const
Nombre d'éléments du vecteur.
Operateur binaire generique pour les expressions.
Int32 Integer
Type représentant un entier.
ConstArrayView< Integer > IntegerConstArrayView
Equivalent C d'un tableau à une dimension d'entiers.
Definition UtilsTypes.h:573