Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MultiArray2View.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/* MultiArray2View.h (C) 2000-2025 */
9/* */
10/* Vue d'un tableau 2D à taille multiple. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_MULTIARRAY2VIEW_H
13#define ARCANE_UTILS_MULTIARRAY2VIEW_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/utils/ArrayView.h"
19
20#include <type_traits>
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30/*!
31 * \brief Vue modifiable sur un MultiArray2.
32 */
33template <class DataType>
35{
36 public:
37
38 //! Vue sur la tableau \a buf
40 : m_buffer(buf)
41 , m_indexes(indexes)
42 , m_sizes(sizes)
43 {}
44 //! Vue vide
45 MultiArray2View() = default;
46
47 public:
48
49 //! Nombre d'éléments de la première dimension.
50 Int32 dim1Size() const { return m_sizes.size(); }
51 /*!
52 * \brief Nombre d'éléments de la première dimension.
53 * \deprecated Utiliser dim1Size() à la place.
54 */
55 ARCANE_DEPRECATED_122 Int32 size() const { return dim1Size(); }
56 //! Nombre d'éléments de la deuxième dimension
57 ConstArrayView<Int32> dim2Sizes() const { return m_sizes; }
58 //! Nombre total d'éléments dans le tableau.
59 Int32 totalNbElement() const { return m_buffer.size(); }
60
61 public:
62
63 //! \a i-ème élément du tableau
65 {
66 return ArrayView<DataType>(this->m_sizes[i], &this->m_buffer[this->m_indexes[i]]);
67 }
68 //! \a i-ème élément du tableau
70 {
71 return ConstArrayView<DataType>(this->m_sizes[i], this->m_buffer.data() + (this->m_indexes[i]));
72 }
73
74 private:
75
76 ArrayView<DataType> m_buffer;
77 ConstArrayView<Int32> m_indexes;
79};
80
81/*---------------------------------------------------------------------------*/
82/*---------------------------------------------------------------------------*/
83/*!
84 * \brief Vue constante sur un MultiArray2.
85 */
86template <class DataType>
88{
89 private:
90
91 friend class MultiArray2<DataType>;
92
93 public:
94
95 //! Vue sur la tableau \a buf
98 : m_buffer(buf)
99 , m_indexes(indexes)
100 , m_sizes(sizes)
101 {}
102 //! Vue vide
104
105 public:
106
107 //! Nombre d'éléments de la première dimension.
108 Int32 dim1Size() const { return m_sizes.size(); }
109 /*!
110 * \brief Nombre d'éléments de la première dimension.
111 * \deprecated Utiliser dim1Size() à la place.
112 */
113 ARCANE_DEPRECATED_122 Int32 size() const { return dim1Size(); }
114 //! Nombre d'éléments de la deuxième dimension
115 ConstArrayView<Int32> dim2Sizes() const { return m_sizes; }
116 //! Nombre total d'éléments dans le tableau.
117 Int32 totalNbElement() const { return m_buffer.size(); }
118
119 public:
120
121 //! \a i-ème élément du tableau
123 {
124 return ConstArrayView<DataType>(this->m_sizes[i], this->m_buffer.data() + (this->m_indexes[i]));
125 }
126
127 private:
128
130 ConstArrayView<Int32> m_indexes;
131 ConstArrayView<Int32> m_sizes;
132};
133
134/*---------------------------------------------------------------------------*/
135/*---------------------------------------------------------------------------*/
136/*!
137 * \brief Vue sur un MultiArray2.
138 *
139 * Les instances de cette classe sont créées par appel à MultiArray2::span()
140 * ou MultiArray2::constSpan().
141 */
142template <class DataType>
144{
145 private:
146
147 friend class MultiArray2<std::remove_cv_t<DataType>>;
148
149 public:
150
151 //! Vue vide
152 JaggedSmallSpan() = default;
153
154 private:
155
156 //! Vue sur la tableau \a buf
157 JaggedSmallSpan(SmallSpan<DataType> buf, SmallSpan<const Int32> indexes,
158 SmallSpan<const Int32> sizes)
159 : m_buffer(buf)
160 , m_indexes(indexes)
161 , m_sizes(sizes)
162 {}
163
164 public:
165
166 //! Nombre d'éléments de la première dimension.
167 constexpr ARCCORE_HOST_DEVICE Int32 dim1Size() const { return m_sizes.size(); }
168 //! Nombre d'éléments de la deuxième dimension
169 constexpr ARCCORE_HOST_DEVICE SmallSpan<const Int32> dim2Sizes() const { return m_sizes; }
170 //! Nombre total d'éléments dans le tableau.
171 constexpr ARCCORE_HOST_DEVICE Int32 totalNbElement() const { return m_buffer.size(); }
172
173 public:
174
175 //! \a i-ème élément du tableau
176 constexpr ARCCORE_HOST_DEVICE SmallSpan<DataType> operator[](Int32 i) const
177 {
178 return m_buffer.subSpan(m_indexes[i], m_sizes[i]);
179 }
180
181 private:
182
183 SmallSpan<DataType> m_buffer;
184 SmallSpan<const Int32> m_indexes;
186};
187
188/*---------------------------------------------------------------------------*/
189/*---------------------------------------------------------------------------*/
190
191} // namespace Arcane
192
193/*---------------------------------------------------------------------------*/
194/*---------------------------------------------------------------------------*/
195
196#endif
Déclarations des types utilisés dans Arcane.
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
ARCANE_DEPRECATED_122 Int32 size() const
Nombre d'éléments de la première dimension.
ConstMultiArray2View()=default
Vue vide.
Int32 totalNbElement() const
Nombre total d'éléments dans le tableau.
Int32 dim1Size() const
Nombre d'éléments de la première dimension.
ConstMultiArray2View(ConstArrayView< DataType > buf, ConstArrayView< Int32 > indexes, ConstArrayView< Int32 > sizes)
Vue sur la tableau buf.
ConstArrayView< Int32 > dim2Sizes() const
Nombre d'éléments de la deuxième dimension.
ConstArrayView< DataType > operator[](Int32 i) const
i-ème élément du tableau
constexpr __host__ __device__ Int32 totalNbElement() const
Nombre total d'éléments dans le tableau.
JaggedSmallSpan()=default
Vue vide.
constexpr __host__ __device__ Int32 dim1Size() const
Nombre d'éléments de la première dimension.
constexpr __host__ __device__ SmallSpan< DataType > operator[](Int32 i) const
i-ème élément du tableau
constexpr __host__ __device__ SmallSpan< const Int32 > dim2Sizes() const
Nombre d'éléments de la deuxième dimension.
MultiArray2View(ArrayView< DataType > buf, ConstArrayView< Int32 > indexes, ConstArrayView< Int32 > sizes)
Vue sur la tableau buf.
ConstArrayView< DataType > operator[](Int32 i) const
i-ème élément du tableau
ArrayView< DataType > operator[](Int32 i)
i-ème élément du tableau
Int32 totalNbElement() const
Nombre total d'éléments dans le tableau.
Int32 dim1Size() const
Nombre d'éléments de la première dimension.
ARCANE_DEPRECATED_122 Int32 size() const
Nombre d'éléments de la première dimension.
MultiArray2View()=default
Vue vide.
ConstArrayView< Int32 > dim2Sizes() const
Nombre d'éléments de la deuxième dimension.
Classe de base des tableau 2D à taille multiple.
Definition MultiArray2.h:61
Vue d'un tableau d'éléments de type T.
Definition Span.h:673
constexpr __host__ __device__ SmallSpan< T, DynExtent > subSpan(Int32 abegin, Int32 asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
Definition Span.h:756
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int32_t Int32
Type entier signé sur 32 bits.