103 int * position,
int offset);
120 .get_indices_at_positions = NULL,
122 .get_positions_of_indices = NULL,
124 .get_positions_of_indices_off = NULL,
127 .get_bounding_box = NULL,
147 if (num_idxlists > 1)
149 Xt_idxlist_collection collectionlist
150 =
xmalloc(
sizeof (*collectionlist)
151 + (
size_t)num_idxlists *
sizeof (collectionlist->
idxlists[0]));
163 assert(num_indices <= INT_MAX);
169 else if (num_idxlists == 1)
185 free(collectionlist);
194 size_t size_idxlists = 0;
196 xt_mpi_call(MPI_Pack_size(2, MPI_INT, comm, &size_header), comm);
202 return (
size_t)size_header + size_idxlists;
213 buffer_size, position, comm), comm);
225 xt_mpi_call(MPI_Unpack(buffer, buffer_size, position,
226 &num_lists, 1, MPI_INT, comm), comm);
228 Xt_idxlist_collection collectionlist
229 =
xmalloc(
sizeof (*collectionlist)
230 + (
size_t)num_lists *
sizeof (collectionlist->
idxlists[0]));
236 for (
int i = 0; i < collectionlist->
num_idxlists; ++i) {
242 assert(num_indices <= INT_MAX);
271 for (
int i = 0; i < collectionlist->
num_idxlists; ++i) {
306 size_t temp_stripes_array_size = 0;
307 int num_temp_stripes = 0;
312 temp_stripes_array_size = (size_t)num_temp_stripes;
315 for (
int i = 1; i < collectionlist->
num_idxlists; ++i) {
318 int curr_num_stripes;
324 num_temp_stripes + curr_num_stripes);
326 memcpy(temp_stripes + num_temp_stripes, curr_stripes,
327 (
size_t)curr_num_stripes *
sizeof(*curr_stripes));
331 num_temp_stripes += curr_num_stripes;
335 (
size_t)num_temp_stripes *
sizeof(*temp_stripes));
336 *num_stripes = num_temp_stripes;
345 for (
int i = 0; i < collectionlist->
num_idxlists; ++i) {
360 int * position,
int offset) {
364 int curr_num_indices = 0;
366 int idxlist_offsets = 0;
373 idxlist_offsets += curr_num_indices;
375 }
while (idxlist_offsets + curr_num_indices <= offset &&
378 offset -= idxlist_offsets;
382 index, position, offset)) {
383 *position += idxlist_offsets;
410 die(
"idxlist_collection_get_min_index empty collection");
429 die(
"idxlist_collection_get_max_index empty collection");
Xt_idxlist xt_idxlist_unpack(void *buffer, int buffer_size, int *position, MPI_Comm comm)
int xt_idxlist_get_num_indices(Xt_idxlist idxlist)
base definitions header file
static void idxlist_collection_get_index_stripes(Xt_idxlist idxlist, struct Xt_stripe **stripes, int *num_stripes)
static const struct xt_idxlist_vtable idxlist_collection_vtable
Xt_idxlist xt_idxlist_collection_get_intersection(Xt_idxlist XT_UNUSED(idxlist_src), Xt_idxlist XT_UNUSED(idxlist_dst))
add versions of standard API functions not returning on error
Xt_idxlist xt_idxlist_collection_unpack(void *buffer, int buffer_size, int *position, MPI_Comm comm)
void xt_idxlist_get_indices(Xt_idxlist idxlist, Xt_int *indices)
void xt_idxlist_delete(Xt_idxlist idxlist)
struct Xt_idxlist_collection_ * Xt_idxlist_collection
int xt_idxlist_get_position_of_index_off(Xt_idxlist idxlist, Xt_int index, int *position, int offset)
void xt_idxlist_get_index_stripes(Xt_idxlist idxlist, struct Xt_stripe **stripes, int *num_stripes)
Xt_int xt_idxlist_get_min_index(Xt_idxlist idxlist)
#define xrealloc(ptr, size)
Xt_idxlist xt_idxlist_collection_new(Xt_idxlist *idxlists, int num_idxlists)
int xt_idxlist_get_index_at_position(Xt_idxlist idxlist, int position, Xt_int *index)
Xt_idxlist xt_idxempty_new(void)
static int idxlist_collection_get_position_of_index_off(Xt_idxlist idxlist, Xt_int index, int *position, int offset)
Provide non-public declarations common to all index lists.
static void idxlist_collection_get_indices(Xt_idxlist idxlist, Xt_int *indices)
static Xt_int idxlist_collection_get_min_index(Xt_idxlist idxlist)
Xt_int xt_idxlist_get_max_index(Xt_idxlist idxlist)
struct Xt_idxlist_ * Xt_idxlist
static void Xt_idxlist_init(Xt_idxlist idxlist, const struct xt_idxlist_vtable *vtable, int num_indices)
#define ENSURE_ARRAY_SIZE(arrayp, curr_array_size, req_size)
static const Xt_int * idxlist_collection_get_indices_const(Xt_idxlist idxlist)
static Xt_idxlist idxlist_collection_copy(Xt_idxlist idxlist)
void(* delete)(Xt_idxlist)
Xt_int * index_array_cache
static void idxlist_collection_delete(Xt_idxlist data)
Xt_idxlist xt_idxlist_copy(Xt_idxlist idxlist)
static size_t idxlist_collection_get_pack_size(Xt_idxlist data, MPI_Comm comm)
struct Xt_idxlist_ parent
size_t xt_idxlist_get_pack_size(Xt_idxlist idxlist, MPI_Comm comm)
static int idxlist_collection_get_index_at_position(Xt_idxlist idxlist, int position, Xt_int *index)
static Xt_int idxlist_collection_get_max_index(Xt_idxlist idxlist)
#define xt_mpi_call(call, comm)
static void idxlist_collection_pack(Xt_idxlist data, void *buffer, int buffer_size, int *position, MPI_Comm comm)
static int idxlist_collection_get_position_of_index(Xt_idxlist idxlist, Xt_int index, int *position)
void xt_idxlist_pack(Xt_idxlist idxlist, void *buffer, int buffer_size, int *position, MPI_Comm comm)