Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
WhereExpressionImpl.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* WhereExpressionImpl.h (C) 2000-2004 */
9/* */
10/* Implémentation d'une expression conditionnelle. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_EXPR_WHEREEXPRESSIONIMPL_H
13#define ARCANE_EXPR_WHEREEXPRESSIONIMPL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17
18#include "arcane/expr/BadOperandException.h"
19#include "arcane/expr/ExpressionImpl.h"
20#include "arcane/expr/ExpressionResult.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25ARCANE_BEGIN_NAMESPACE
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30class WhereOperator;
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
38class ARCANE_EXPR_EXPORT WhereExpressionImpl
39: public ExpressionImpl
40{
41 public:
45
46 public:
47 virtual void assign(IExpressionImpl*) {}
48 virtual void assign(IExpressionImpl*, IntegerConstArrayView) {}
49 virtual void apply(ExpressionResult* result);
50 virtual Integer vectorSize() const { return 0; }
51
52 private:
56};
57
58/*---------------------------------------------------------------------------*/
59/*---------------------------------------------------------------------------*/
60
65{
66 public:
67 virtual ~WhereOperator(){}
68 virtual void evaluate(ExpressionResult* res,
69 ArrayVariant* test,
72};
73
74/*---------------------------------------------------------------------------*/
75/*---------------------------------------------------------------------------*/
76
77template<class T>
79: public WhereOperator
80{
81 public:
82 virtual ~WhereOperatorT() {}
83 virtual void evaluate(ExpressionResult* res,
84 ArrayVariant* test,
87 {
88 // verification de la validite de l'operation
89 if (test->type() != ArrayVariant::TBool)
90 throw BadOperandException("WhereOperatorT::evaluate");
91
92 Integer size = res->size();
93 if (size != test->size())
94 throw BadOperandException("WhereOperatorT::evaluate");
95
96 if (iftrue->type() || iffalse->type())
97 throw BadOperandException("WhereOperatorT::evaluate");
98
99 // allocation du résultat en fonction du type du résultat du if
100 res->allocate(iftrue->type());
101
102 // recuperation des valeurs des operandes
104 test->value(test_val);
106 res->data()->value(res_val);
108 iftrue->value(iftrue_val);
110 iffalse->value(iffalse_val);
111
112 Integer false_i = 0;
113 Integer true_i = 0;
114 for (Integer i=0 ; i<size ; ++i)
115 test_val[i] ? res_val[i] = iftrue_val[true_i++]
116 : res_val[i] = iffalse_val[false_i++];
117 }
118};
119
120/*---------------------------------------------------------------------------*/
121/*---------------------------------------------------------------------------*/
122
123ARCANE_END_NAMESPACE
124
125/*---------------------------------------------------------------------------*/
126/*---------------------------------------------------------------------------*/
127
128#endif
Type de base polymorphe pour les tableaux (dimension 1).
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.
Référence à une expression.
Definition Expression.h:43
Interface pour les différentes implémentations d'une expression.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Implementation d'une expression binaire.
virtual Integer vectorSize() const
Nombre d'éléments du vecteur.
Expression m_iffalse
Expression évaluée lorsque le test est negatif.
Expression m_iftrue
Expression évaluée lorsque le test est positif.
Expression m_test
Expression de test.
Operateur generique pour les expressions conditionnnelle.
Vue constante d'un tableau de type T.