12#ifndef ARCANE_UTILS_MULTIARRAY2_H
13#define ARCANE_UTILS_MULTIARRAY2_H
17#include "arcane/utils/Array.h"
18#include "arcane/utils/MultiArray2View.h"
59template <
typename DataType>
64 using ConstReferenceType =
typename UniqueArray<DataType>::ConstReferenceType;
65 using ThatClass = MultiArray2<DataType>;
69 MultiArray2() =
default;
78 MultiArray2(
const ThatClass& rhs) =
delete;
79 ThatClass& operator=(
const ThatClass& rhs) =
delete;
100 explicit MultiArray2(
const MemoryAllocationOptions& allocation_options)
106 MultiArray2(
const MemoryAllocationOptions& allocation_options, ConstArrayView<Int32> sizes)
107 : MultiArray2(allocation_options)
114 ArrayView<DataType> operator[](
Integer i)
118 ConstArrayView<DataType> operator[](
Integer i)
const
218 if (new_sizes.
empty()) {
234 void _resize(ConstArrayView<Int32> ar)
240 for (
Integer i = 0; i < size1; ++i)
247 for (
Integer i = 0; i < size1; ++i)
258 SharedArray<DataType> new_buffer(
m_buffer.allocationOptions(), total_size);
261 if (old_size1 > size1)
264 for (
Integer i = 0; i < old_size1; ++i) {
267 if (old_size2 > size2)
269 ConstArrayView<DataType> cav(_value(i));
270 for (
Integer j = 0; j < old_size2; ++j)
271 new_buffer[index + j] = cav[j];
278 for (
Integer i2 = 0, index2 = 0; i2 < size1; ++i2) {
288 void _copy(
const MultiArray2<DataType>& rhs,
bool do_clone)
290 m_buffer = do_clone ? rhs.m_buffer.clone() : rhs.m_buffer;
291 m_indexes = do_clone ? rhs.m_indexes.clone() : rhs.m_indexes;
292 m_sizes = do_clone ? rhs.m_sizes.clone() : rhs.m_sizes;
294 void _copy(ConstMultiArray2View<DataType> aview)
317template <
typename DataType>
318class SharedMultiArray2
319:
public MultiArray2<DataType>
323 using ThatClass = SharedMultiArray2<DataType>;
327 SharedMultiArray2() =
default;
329 : MultiArray2<DataType>(sizes)
332 : MultiArray2<DataType>(
view)
334 SharedMultiArray2(
const SharedMultiArray2<DataType>& rhs)
335 : MultiArray2<DataType>(rhs,
false)
341 ThatClass& operator=(
const ThatClass& rhs)
344 this->_copy(rhs,
false);
352 void operator=(
const MultiArray2<DataType>& rhs) =
delete;
357 SharedMultiArray2<DataType>
clone()
const
359 return SharedMultiArray2<DataType>(this->
constView());
372template <
typename DataType>
373class UniqueMultiArray2
374:
public MultiArray2<DataType>
378 using ThatClass = UniqueMultiArray2<DataType>;
382 UniqueMultiArray2() =
default;
384 : MultiArray2<DataType>(sizes)
390 : MultiArray2<DataType>(allocation_options)
394 : MultiArray2<DataType>(allocation_options, sizes)
397 : MultiArray2<DataType>(
view)
400 : MultiArray2<DataType>(rhs,
true)
402 UniqueMultiArray2(
const UniqueMultiArray2<DataType>& rhs)
403 : MultiArray2<DataType>(rhs,
true)
410 this->_copy(rhs,
true);
419 ThatClass& operator=(
const UniqueMultiArray2<DataType>& rhs)
422 this->_copy(rhs,
true);
425 ThatClass& operator=(
const MultiArray2<DataType>& rhs) =
delete;
430 UniqueMultiArray2<DataType>
clone()
const
432 return UniqueMultiArray2<DataType>(this->
constView());
439template <
typename DataType> SharedMultiArray2<DataType>::
440SharedMultiArray2(
const UniqueMultiArray2<DataType>& rhs)
441: MultiArray2<DataType>(rhs, true)
450 this->_copy(rhs,
true);
Integer size() const
Nombre d'éléments du vecteur.
Vue modifiable d'un tableau d'un type T.
const T * data() const
Accès à la racine du tableau hors toute protection.
Vue constante d'un tableau de type T.
constexpr bool empty() const noexcept
true si le tableau est vide (size()==0)
Vue constante sur un MultiArray2.
Interface d'un allocateur pour la mémoire.
Options pour configurer les allocations.
Vue modifiable sur un MultiArray2.
Classe de base des tableau 2D à taille multiple.
void clear()
Supprime les éléments du tableau.
void resize(ConstArrayView< Int32 > new_sizes)
Retaille le tableau avec comme nouvelles tailles new_sizes.
MultiArray2(const MultiArray2< DataType > &rhs, bool do_clone)
Constructeur de recopie. Méthode temporaire à supprimer une fois le constructeur et opérateur de reco...
void fill(const DataType &v)
Remplit les éléments du tableau avec la valeur v.
SharedArray< Int32 > m_sizes
MultiArray2View< DataType > view()
Vue modifiable du tableau.
JaggedSmallSpan< const DataType > constSpan() const
Vue constante du tableau.
ConstArrayView< Int32 > dim2Sizes() const
Tableau du nombre d'éléments suivant la deuxième dimension.
JaggedSmallSpan< const DataType > span() const
Vue constante du tableau.
JaggedSmallSpan< DataType > span()
Vue modifiable du tableau.
SharedArray< Int32 > m_indexes
ConstMultiArray2View< DataType > constView() const
Vue constante du tableau.
SharedArray< Pointer > m_buffer
Int32 totalNbElement() const
Nombre total d'éléments.
Int32 dim1Size() const
Nombre d'éléments suivant la première dimension.
ConstArrayView< DataType > viewAsArray() const
Vue du tableau sous forme de tableau 1D.
ArrayView< DataType > viewAsArray()
Vue du tableau sous forme de tableau 1D.
Vecteur 1D de données avec sémantique par référence.
Tableau 2D à taille multiple avec sémantique par référence.
SharedMultiArray2< DataType > clone() const
Clone le tableau.
Tableau 2D à taille multiple avec sémantique par valeur.
UniqueMultiArray2< DataType > clone() const
Clone le tableau.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
std::int32_t Int32
Type entier signé sur 32 bits.