Arcane  v3.16.8.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-2025 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-2025 */
9/* */
10/* Implémentation d'une expression littérale contenant un scalaire. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_EXPR_LITTERALEXPRESSIONIMPL_H
13#define ARCANE_CORE_EXPR_LITTERALEXPRESSIONIMPL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/datatype/ScalarVariant.h"
18
19#include "arcane/expr/ExpressionImpl.h"
20#include "arcane/expr/Expression.h"
21#include "arcane/expr/ExpressionResult.h"
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
39class LitteralExpressionImpl
40: public ExpressionImpl
41{
42 public:
43
44 explicit LitteralExpressionImpl (const ScalarVariant& value);
45
46 public:
47
48 virtual void assign(IExpressionImpl*) {}
49 virtual void assign(IExpressionImpl*, IntegerConstArrayView) {}
50 virtual void apply(ExpressionResult* result);
51 virtual Integer vectorSize() const { return 0; }
52
53 private:
54
55 ScalarVariant m_value;
56};
57
58/*---------------------------------------------------------------------------*/
59/*---------------------------------------------------------------------------*/
64{
65 public:
66
67 virtual ~LitteralOperator() {}
68
69 public:
70
71 virtual void evaluate(ExpressionResult* res, ScalarVariant& a)=0;
72};
73
74/*---------------------------------------------------------------------------*/
75/*---------------------------------------------------------------------------*/
76
77template<typename T>
79: public LitteralOperator
80{
81 public:
82
83 void evaluate(ExpressionResult* res, ScalarVariant& a) override
84 {
85 // allocation du résultat en fonction du type du variant
86 res->allocate(a.type());
87
88 // recuperation des valeurs des operandes
89 ArrayView<T> res_val;
90 res->data()->value(res_val);
91 T a_val;
92 a.value(a_val);
93
94 Integer size = res->data()->size();
95 for( Integer i=0 ; i<size ; ++i)
96 res_val[i] = a_val;
97 }
98};
99
100/*---------------------------------------------------------------------------*/
101/*---------------------------------------------------------------------------*/
102
103} // End namespace Arcane
104
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
107
108#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