15#include <Static_Int_Lists.h>
16#include <TRUSTArrays.h>
20template <
typename _SIZE_>
23 index_.resize_array(0);
24 valeurs_.resize_array(0);
34template <
typename _SIZE_>
40 index_.resize_array(nb_listes + 1);
43 for (
int_t i = 0; i < nb_listes; i++)
45 assert(sizes[i] >= 0);
46 index_[i+1] = index_[i] + sizes[i];
48 const int_t somme_sizes = index_[nb_listes];
49 valeurs_.resize_array(somme_sizes);
58template <
typename _SIZE_>
61 assert(data.
size_array() == valeurs_.size_array());
62 valeurs_.inject_array(data);
67template <
typename _SIZE_>
68static bool check_index_data(
const ArrOfInt_T<_SIZE_>& index,
const ArrOfInt_T<_SIZE_>& data)
75 for (_SIZE_ i = 0; i < n; i++)
76 if (index[i+1] < index[i])
87template <
typename _SIZE_>
90 assert(check_index_data(index, data));
100template <
typename _SIZE_>
103 const int_t i_debut = (num_liste < 0) ? 0 : num_liste;
104 const int_t i_fin = (num_liste < 0) ? index_.size_array() - 1 : num_liste + 1;
107 for (
int_t i = i_debut; i < i_fin; i++)
109 const int_t index = index_[i];
110 const int_t size = index_[i+1] - index;
111 valeurs_liste.
ref_array(valeurs_, index, size);
119template <
typename _SIZE_>
124 const int_t index = index_[i];
128template <
typename _SIZE_>
132 os << index_ << tspace;
133 os << valeurs_ << tspace;
138template <
typename _SIZE_>
149template <
typename _SIZE_>
154 os <<
"sizes of lists : ";
165 for (
int_t j=0; j<sz; ++j)
166 os << valeurs_[(index_[i]+j)] <<
" ";
173template <
typename _SIZE_>
176 const int nb_lists = src.
size();
177 index_.resize_array(nb_lists + 1, RESIZE_OPTIONS::NOCOPY_NOINIT);
180 for (
int i = 0; i < nb_lists; i++)
182 idx += src[i].size_array();
186 valeurs_.resize_array(idx, RESIZE_OPTIONS::NOCOPY_NOINIT);
188 for (
int i = 0; i < nb_lists; i++)
192 valeurs_.inject_array(a, sz, idx , 0 );
Class defining operators and methods for all reading operation in an input flow (file,...
Classe de base des flux de sortie.
Cette classe permet de stocker des listes d'entiers accessibles en temps constant.
void set(const ArrsOfInt_t &src)
Sortie & ecrire(Sortie &os) const
void copy_list_to_array(int_t i_liste, ArrOfInt_t &array) const
copie la i-ieme liste dans le tableau fourni Le tableau array doit etre resizable.
void set_index_data(const ArrOfInt_t &index, const ArrOfInt_t &data)
remplace index et data.
ArrsOfInt_T< _SIZE_ > ArrsOfInt_t
void reset()
detruit toutes les listes
int_t get_list_size(int_t i_liste) const
renvoie le nombre d'elements de la liste i
void trier_liste(int_t i)
tri par ordre croissant des valeurs de la i-ieme liste.
void set_list_sizes(const ArrOfInt_t &sizes)
detruit les listes existantes et en cree de nouvelles.
int_t get_nb_lists() const
renvoie le nombre de listes stockees
Entree & readOn(Entree &is)
ArrOfInt_T< _SIZE_ > ArrOfInt_t
Sortie & printOn(Sortie &os) const
void set_data(const ArrOfInt_t &data)
remplace les valeurs stockes par toutes les listes par celles du tableau data.
_SIZE_ size_array() const
virtual void ref_array(TRUSTArray &, _SIZE_ start=0, _SIZE_ sz=-1)
TRUSTArray & inject_array(const TRUSTArray &source, _SIZE_ nb_elements=-1, _SIZE_ first_element_dest=0, _SIZE_ first_element_source=0)
void resize_array(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)