Arcane  v3.14.10.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
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/*---------------------------------------------------------------------------*/
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
89 res->data()->value(res_val);
92 var_res.data()->value(var_val);
94
95 for( Integer i=0 ; i<size ; ++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
113 res->data()->value(res_val);
116 var_res.data()->value(var_val);
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
Exception sur les opérandes des opérations des expressions.
Classe de base de l'implémentation d'une expression.
Type de base polymorphe d'une expression.
Interface pour les différentes implémentations d'une expression.
Interface d'une variable.
Definition IVariable.h:54
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Operateur binaire generique pour les expressions.
Vue constante d'un tableau de type T.