Arcane  v3.16.0.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
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
40class LitteralExpressionImpl
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
90 ArrayView<T> res_val;
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
Vue modifiable d'un tableau d'un type T.
constexpr const_pointer data() const noexcept
Pointeur sur le début de la vue.
Type de base polymorphe d'une expression.
Interface pour les différentes implémentations d'une expression.
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).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
ConstArrayView< Integer > IntegerConstArrayView
Equivalent C d'un tableau à une dimension d'entiers.
Definition UtilsTypes.h:573