13#ifndef ARCANE_DATATYPE_REALARRAYVARIANT_H
14#define ARCANE_DATATYPE_REALARRAYVARIANT_H
18#include "arcane/utils/Array.h"
19#include "arcane/utils/ArrayView.h"
20#include "arcane/utils/Real2.h"
21#include "arcane/utils/Real3.h"
22#if defined(ARCANE_HAS_ACCELERATOR_API)
23#include "arcane/utils/NumArray.h"
42 static const Integer MAX_SIZE = 9;
44 RealArrayVariant() =
default;
52#if defined(ARCANE_HAS_ACCELERATOR_API)
53 template<
typename LayoutType>
55 : RealArrayVariant(v.mdspan())
57 template<
typename LayoutType>
62 template<
typename LayoutType>
68 RealArrayVariant(
Real2 r)
70 _setValue(
reinterpret_cast<Real*
>(&r), 2);
72 RealArrayVariant(
Real3 r)
74 _setValue(
reinterpret_cast<Real*
>(&r), 3);
77 RealArrayVariant& operator=(
const RealArrayVariant& rhs) =
default;
83 RealArrayVariant& operator=(
Real2 r)
85 _setValue(
reinterpret_cast<Real*
>(&r), 2);
88 RealArrayVariant& operator=(
Real3 r)
90 _setValue(
reinterpret_cast<Real*
>(&r), 3);
96 ARCANE_ASSERT(index < m_nb_value, (
"Index out of range"));
97 return m_value[index];
101 ARCANE_ASSERT(index < m_nb_value, (
"Index out of range"));
102 return m_value[index];
106 ARCANE_ASSERT(index < m_nb_value, (
"Index out of range"));
107 return m_value[index];
111 ARCANE_ASSERT(index < m_nb_value, (
"Index out of range"));
112 return m_value[index];
115 Int32 size()
const {
return m_nb_value; }
116 Real* data() {
return m_value; }
117 const Real* data()
const {
return m_value; }
119 operator Real2()
const {
return Real2(m_value[0], m_value[1]); }
120 operator Real3()
const {
return Real3(m_value[0], m_value[1], m_value[2]); }
122#if defined(ARCANE_HAS_ACCELERATOR_API)
126 for(
Integer i=0, n=m_nb_value; i<n; ++i )
134 Real m_value[MAX_SIZE];
135 Int32 m_nb_value = 0;
139 void _setValue(
const Real* v,
Int32 nb_value)
141 m_nb_value = nb_value;
142 ARCANE_ASSERT(nb_value <= MAX_SIZE, (
"Size is too large"));
143 for (
Integer i = 0 ; i < nb_value; ++i)
ConstArrayView< T > constView() const
Vue constante sur ce tableau.
Vue constante d'un tableau de type T.
constexpr const_pointer data() const noexcept
Pointeur sur la mémoire allouée.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Classe de base des vues multi-dimensionnelles.
constexpr __host__ __device__ Int32 extent0() const
Valeur de la première dimension.
Tableaux multi-dimensionnels pour les types numériques accessibles sur accélérateurs.
Classe gérant un vecteur de réel de dimension 2.
Classe gérant un vecteur de réel de dimension 3.
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
double Real
Type représentant un réel.
std::int32_t Int32
Type entier signé sur 32 bits.