12#ifndef ARCANE_UTILS_MULTIARRAY2_H
13#define ARCANE_UTILS_MULTIARRAY2_H
17#include "arcane/utils/Array.h"
18#include "arcane/utils/MultiArray2View.h"
55template<
typename DataType>
82 : m_buffer(
aview.m_buffer), m_indexes(
aview.m_indexes), m_sizes(
aview.m_sizes)
86 ArrayView<DataType> operator[](Integer i)
88 return ArrayView<DataType>(m_sizes[i],m_buffer.data() + (m_indexes[i]));
90 ConstArrayView<DataType> operator[](Integer i)
const
92 return ConstArrayView<DataType>(m_sizes[i],m_buffer.data()+ (m_indexes[i]));
118 DataType& at(Integer i,Integer
j)
120 return m_buffer[m_indexes[i]+
j];
122 void setAt(Integer i,Integer j,ConstReferenceType v)
124 return m_buffer.setAt(m_indexes[i]+j,v);
128 Integer
dim1Size()
const {
return m_indexes.size(); }
160 return m_buffer.view();
166 return m_buffer.constView();
184 void _resize(IntegerConstArrayView ar)
186 Integer size1 = ar.size();
188 Integer total_size = 0;
189 for( Integer i=0; i<size1; ++i )
194 if (total_size==totalNbElement() && size1==m_indexes.size()){
196 for( Integer i=0; i<size1; ++i )
197 if (m_sizes[i]!=ar[i]){
208 Integer old_size1 = m_indexes.size();
210 SharedArray<DataType> new_buffer(total_size);
216 for( Integer i=0; i<old_size1; ++i ){
218 Integer old_size2 = m_sizes[i];
221 ConstArrayView<DataType> cav(_value(i));
222 for( Integer j=0; j<old_size2; ++j )
223 new_buffer[index+j] = cav[j];
226 m_buffer = new_buffer;
228 m_indexes.resize(size1);
229 m_sizes.resize(size1);
230 for( Integer i2=0, index2=0; i2<size1; ++i2 ){
232 m_indexes[i2] = index2;
240 void _copy(
const MultiArray2<DataType>& rhs,
bool do_clone)
242 m_buffer = do_clone ? rhs.m_buffer.clone() : rhs.m_buffer;
243 m_indexes = do_clone ? rhs.m_indexes.clone() : rhs.m_indexes;
244 m_sizes = do_clone ? rhs.m_sizes.clone() : rhs.m_sizes;
246 void _copy(ConstMultiArray2View<DataType> aview)
248 m_buffer = aview.m_buffer;
249 m_indexes = aview.m_indexes;
250 m_sizes = aview.m_sizes;
268template<
typename DataType>
287 this->_copy(
rhs,
false);
314template<
typename DataType>
334 this->_copy(
rhs,
true);
342 this->_copy(
rhs,
true);
363template<
typename DataType> SharedMultiArray2<DataType>::
364SharedMultiArray2(
const UniqueMultiArray2<DataType>& rhs)
365: MultiArray2<DataType>(rhs,true){}
370template<
typename DataType>
void SharedMultiArray2<DataType>::
371operator=(
const UniqueMultiArray2<DataType>& rhs)
373 this->_copy(rhs,
true);
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Classe de base des tableau 2D à taille multiple.
SharedArray< Integer > m_sizes
Tableau des tailles de la deuxième dimension.
void clear()
Supprime les éléments du tableau.
Integer totalNbElement() const
Nombre total d'éléments.
void resize(IntegerConstArrayView 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< Integer > m_indexes
Tableau des indices dans m_buffer du premièr élément de la deuxième dimension.
MultiArray2View< DataType > view()
Vue modifiable du tableau.
IntegerConstArrayView dim2Sizes() const
Tableau du nombre d'éléments suivant la deuxième dimension.
ConstMultiArray2View< DataType > constView() const
Vue constante du tableau.
Integer dim1Size() const
Nombre d'éléments suivant la première dimension.
SharedArray< DataType > m_buffer
Valeurs.
MultiArray2< DataType > clone()
Clone le tableau.
ConstArrayView< DataType > viewAsArray() const
Vue du tableau sous forme de tableau 1D.
ArrayView< DataType > viewAsArray()
Vue du tableau sous forme de tableau 1D.
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.
Vue constante d'un tableau de type T.
Int32 Integer
Type représentant un entier.