16#ifndef MD_Vector_std_tools_TPP_included
17#define MD_Vector_std_tools_TPP_included
19enum class VECT_ITEMS_TYPE { READ , WRITE , ADD , MAX };
20enum class VECT_BLOCS_TYPE { READ , WRITE , ADD };
23template<
typename _TYPE_, VECT_ITEMS_TYPE _ITEM_TYPE_>
26template<
typename _TYPE_>
29 vect_items_generic<_TYPE_,VECT_ITEMS_TYPE::READ>(line_size,voisins,list,vect,buffers);
32template<
typename _TYPE_>
35 vect_items_generic<_TYPE_,VECT_ITEMS_TYPE::WRITE>(line_size,voisins,list,vect,buffers);
38template<
typename _TYPE_>
41 vect_items_generic<_TYPE_,VECT_ITEMS_TYPE::ADD>(line_size,voisins,list,vect,buffers);
44template<
typename _TYPE_>
47 vect_items_generic<_TYPE_,VECT_ITEMS_TYPE::MAX>(line_size,voisins,list,vect,buffers);
50template<
typename _TYPE_>
53 assert(line_size > 0);
54 _TYPE_ *data = vect.
addr();
59 for (
int i_voisin = 0; i_voisin < nb_voisins; i_voisin++)
62 const int idx_end_of_list = index[i_voisin + 1];
64 const int nb_elems = (idx_end_of_list - idx) * line_size;
66 _TYPE_ *bufptr = buffer.
addr();
68 while (idx < idx_end_of_list)
71 int premier_item_bloc = items_to_process[idx++];
72 const int bloc_size = 1;
74 assert(premier_item_bloc >= 0 && bloc_size > 0 && (premier_item_bloc + bloc_size) * line_size <= vect.
size_array());
75 _TYPE_ *vectptr = data + premier_item_bloc * line_size;
77 assert(bufptr + line_size * bloc_size - buffer.
addr() <= buffer.
size_array());
78 for (
int j = 0; j < bloc_size; j++)
80 _TYPE_ dest = *vectptr;
84 for (
int k = line_size; k; k--)
85 *(vectptr++) = *(bufptr++);
97template<
typename _TYPE_, VECT_BLOCS_TYPE _ITEM_TYPE_>
98extern void vect_blocs_generic(
const int line_size,
const ArrOfInt& voisins,
const Static_Int_Lists& list,
const ArrOfInt& nb_items_par_voisin,
TRUSTArray<_TYPE_>& vect,
Schema_Comm_Vecteurs& buffers);
100template<
typename _TYPE_>
101inline void read_from_vect_blocs(
const int line_size,
const ArrOfInt& voisins,
const Static_Int_Lists& list,
const ArrOfInt& nb_items_par_voisin,
TRUSTArray<_TYPE_>& vect,
Schema_Comm_Vecteurs& buffers)
103 vect_blocs_generic<_TYPE_,VECT_BLOCS_TYPE::READ>(line_size,voisins,list,nb_items_par_voisin,vect,buffers);
106template<
typename _TYPE_>
107inline void write_to_vect_blocs(
const int line_size,
const ArrOfInt& voisins,
const Static_Int_Lists& list,
const ArrOfInt& nb_items_par_voisin,
TRUSTArray<_TYPE_>& vect,
Schema_Comm_Vecteurs& buffers)
109 vect_blocs_generic<_TYPE_,VECT_BLOCS_TYPE::WRITE>(line_size,voisins,list,nb_items_par_voisin,vect,buffers);
112template<
typename _TYPE_>
113inline void add_to_vect_blocs(
const int line_size,
const ArrOfInt& voisins,
const Static_Int_Lists& list,
const ArrOfInt& nb_items_par_voisin,
TRUSTArray<_TYPE_>& vect,
Schema_Comm_Vecteurs& buffers)
115 vect_blocs_generic<_TYPE_,VECT_BLOCS_TYPE::ADD>(line_size,voisins,list,nb_items_par_voisin,vect,buffers);
TRUSTArray< _TYPE_ > & get_next_area_template(int pe, int array_size)
const ArrOfInt_t & get_index() const
int_t get_nb_lists() const
renvoie le nombre de listes stockees
const ArrOfInt_t & get_data() const
Represents a an array of int/int64/double/... values.
_SIZE_ size_array() const