Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
LitteralExpressionImpl.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/* LitteralExpressionImpl.h (C) 2000-2022 */
9/* */
10/* Implémentation d'une expression littérale contenant un scalaire. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_EXPR_LITTERALEXPRESSIONIMPL_H
13#define ARCANE_EXPR_LITTERALEXPRESSIONIMPL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17
18#include "arcane/datatype/ScalarVariant.h"
19
20#include "arcane/expr/ExpressionImpl.h"
21#include "arcane/expr/Expression.h"
22#include "arcane/expr/ExpressionResult.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane
28{
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
33class LitteralOperator;
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
41: public ExpressionImpl
42{
43 public:
44
45 explicit LitteralExpressionImpl (const ScalarVariant& value);
46
47 public:
48
49 virtual void assign(IExpressionImpl*) {}
50 virtual void assign(IExpressionImpl*, IntegerConstArrayView) {}
51 virtual void apply(ExpressionResult* result);
52 virtual Integer vectorSize() const { return 0; }
53
54 private:
55
56 ScalarVariant m_value;
57};
58
59/*---------------------------------------------------------------------------*/
60/*---------------------------------------------------------------------------*/
65{
66 public:
67
68 virtual ~LitteralOperator() {}
69
70 public:
71
72 virtual void evaluate(ExpressionResult* res, ScalarVariant& a)=0;
73};
74
75/*---------------------------------------------------------------------------*/
76/*---------------------------------------------------------------------------*/
77
78template<typename T>
80: public LitteralOperator
81{
82 public:
83
84 void evaluate(ExpressionResult* res, ScalarVariant& a) override
85 {
86 // allocation du résultat en fonction du type du variant
87 res->allocate(a.type());
88
89 // recuperation des valeurs des operandes
91 res->data()->value(res_val);
92 T a_val;
93 a.value(a_val);
94
95 Integer size = res->data()->size();
96 for( Integer i=0 ; i<size ; ++i)
97 res_val[i] = a_val;
98 }
99};
100
101/*---------------------------------------------------------------------------*/
102/*---------------------------------------------------------------------------*/
103
104} // End namespace Arcane
105
106/*---------------------------------------------------------------------------*/
107/*---------------------------------------------------------------------------*/
108
109#endif
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.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Implementation d'une expression litterale contenant un scalaire.
virtual Integer vectorSize() const
Nombre d'éléments du vecteur.
Operateur de cast generique pour les litteraux.
Type de base polymorphe pour les scalaires (dimension 0).
Vue constante d'un tableau de type T.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-