Yet Another eXchange Tool  0.9.0
Classes | Macros | Typedefs | Functions | Variables
xt_idxvec.c File Reference
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "xt/xt_core.h"
#include "xt/xt_idxlist.h"
#include "xt_idxlist_internal.h"
#include "xt/xt_idxempty.h"
#include "xt/xt_idxvec.h"
#include "xt_idxvec_internal.h"
#include "xt/xt_idxstripes.h"
#include "xt/xt_mpi.h"
#include "xt_idxlist_unpack.h"
#include "core/ppm_xfuncs.h"
#include "core/core.h"
#include "xt_stripe_util.h"
#include "xt/quicksort.h"
#include "instr.h"
Include dependency graph for xt_idxvec.c:

Go to the source code of this file.

Classes

struct  Xt_idxvec_
 

Macros

#define MIN(a, b)   (((a)<(b))?(a):(b))
 
#define MAX(a, b)   ((a) >= (b) ? (a) : (b))
 

Typedefs

typedef struct Xt_idxvec_Xt_idxvec
 

Functions

static void idxvec_delete (Xt_idxlist data)
 
static size_t idxvec_get_pack_size (Xt_idxlist data, MPI_Comm comm)
 
static void idxvec_pack (Xt_idxlist data, void *buffer, int buffer_size, int *position, MPI_Comm comm)
 
static Xt_idxlist idxvec_copy (Xt_idxlist idxlist)
 
static void idxvec_get_indices (Xt_idxlist idxlist, Xt_int *indices)
 
static Xt_int const * idxvec_get_indices_const (Xt_idxlist idxlist)
 
static void idxvec_get_index_stripes (Xt_idxlist idxlist, struct Xt_stripe **stripes, int *num_stripes)
 
static int idxvec_get_index_at_position (Xt_idxlist idxlist, int position, Xt_int *index)
 
static int idxvec_get_indices_at_positions (Xt_idxlist idxlist, const int *positions, int num, Xt_int *index, Xt_int undef_idx)
 
static int idxvec_get_position_of_index (Xt_idxlist idxlist, Xt_int index, int *position)
 
static int idxvec_get_position_of_index_off (Xt_idxlist idxlist, Xt_int index, int *position, int offset)
 
static int idxvec_get_positions_of_indices (Xt_idxlist idxlist, const Xt_int *indices, int num_indices, int *positions, int single_match_only)
 
static Xt_int idxvec_get_min_index (Xt_idxlist idxlist)
 
static Xt_int idxvec_get_max_index (Xt_idxlist idxlist)
 
Xt_idxlist xt_idxvec_new (const Xt_int *idxvec, int num_indices)
 
Xt_idxlist xt_idxvec_prealloc_new (const Xt_int *idxvec, int num_indices)
 
static size_t decode_stripe (struct Xt_stripe stripe, Xt_int *sorted_vector, int *sorted_vec_pos, int pos_offset)
 
static void generate_sorted_vector_from_stripes (const struct Xt_stripe stripes[], int num_stripes_, Xt_idxvec idxvec)
 
Xt_idxlist xt_idxvec_from_stripes_new (const struct Xt_stripe stripes[], int num_stripes)
 
Xt_idxlist xt_idxvec_unpack (void *buffer, int buffer_size, int *position, MPI_Comm comm)
 
static const Xt_intget_sorted_vector (Xt_idxvec idxvec)
 
Xt_idxlist xt_idxvec_get_intersection (Xt_idxlist idxlist_src, Xt_idxlist idxlist_dst)
 
static int idxvec_get_indices_at_positions (Xt_idxlist idxlist, const int *restrict positions, int num_pos_, Xt_int *index, Xt_int undef_idx)
 
static bool idx_vec_is_sorted (Xt_int const *idx, size_t n)
 

Variables

static const struct xt_idxlist_vtable idxvec_vtable
 

Detailed Description

Author
Jörg Behrens behre.nosp@m.ns@d.nosp@m.krz.d.nosp@m.e Moritz Hanke hanke.nosp@m.@dkr.nosp@m.z.de Thomas Jahns jahns.nosp@m.@dkr.nosp@m.z.de

Definition in file xt_idxvec.c.

Macro Definition Documentation

◆ MAX

#define MAX (   a,
 
)    ((a) >= (b) ? (a) : (b))

Definition at line 231 of file xt_idxvec.c.

◆ MIN

#define MIN (   a,
 
)    (((a)<(b))?(a):(b))

Definition at line 72 of file xt_idxvec.c.

Typedef Documentation

◆ Xt_idxvec

typedef struct Xt_idxvec_* Xt_idxvec

Definition at line 142 of file xt_idxvec.c.

Function Documentation

◆ decode_stripe()

static size_t decode_stripe ( struct Xt_stripe  stripe,
Xt_int sorted_vector,
int *  sorted_vec_pos,
int  pos_offset 
)
static

Definition at line 209 of file xt_idxvec.c.

Here is the caller graph for this function:

◆ generate_sorted_vector_from_stripes()

static void generate_sorted_vector_from_stripes ( const struct Xt_stripe  stripes[],
int  num_stripes_,
Xt_idxvec  idxvec 
)
static

Definition at line 234 of file xt_idxvec.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_sorted_vector()

static const Xt_int* get_sorted_vector ( Xt_idxvec  idxvec)
static

Definition at line 455 of file xt_idxvec.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ idx_vec_is_sorted()

static bool idx_vec_is_sorted ( Xt_int const *  idx,
size_t  n 
)
static

Definition at line 680 of file xt_idxvec.c.

Here is the caller graph for this function:

◆ idxvec_copy()

static Xt_idxlist idxvec_copy ( Xt_idxlist  idxlist)
static

Definition at line 547 of file xt_idxvec.c.

Here is the call graph for this function:

◆ idxvec_delete()

static void idxvec_delete ( Xt_idxlist  data)
static

Definition at line 388 of file xt_idxvec.c.

◆ idxvec_get_index_at_position()

static int idxvec_get_index_at_position ( Xt_idxlist  idxlist,
int  position,
Xt_int index 
)
static

Definition at line 583 of file xt_idxvec.c.

◆ idxvec_get_index_stripes()

static void idxvec_get_index_stripes ( Xt_idxlist  idxlist,
struct Xt_stripe **  stripes,
int *  num_stripes 
)
static

Definition at line 572 of file xt_idxvec.c.

Here is the call graph for this function:

◆ idxvec_get_indices()

static void idxvec_get_indices ( Xt_idxlist  idxlist,
Xt_int indices 
)
static

Definition at line 555 of file xt_idxvec.c.

◆ idxvec_get_indices_at_positions() [1/2]

static int idxvec_get_indices_at_positions ( Xt_idxlist  idxlist,
const int *  positions,
int  num,
Xt_int index,
Xt_int  undef_idx 
)
static

◆ idxvec_get_indices_at_positions() [2/2]

static int idxvec_get_indices_at_positions ( Xt_idxlist  idxlist,
const int *restrict  positions,
int  num_pos_,
Xt_int index,
Xt_int  undef_idx 
)
static

Definition at line 596 of file xt_idxvec.c.

◆ idxvec_get_indices_const()

static Xt_int const * idxvec_get_indices_const ( Xt_idxlist  idxlist)
static

Definition at line 564 of file xt_idxvec.c.

◆ idxvec_get_max_index()

static Xt_int idxvec_get_max_index ( Xt_idxlist  idxlist)
static

Definition at line 819 of file xt_idxvec.c.

◆ idxvec_get_min_index()

static Xt_int idxvec_get_min_index ( Xt_idxlist  idxlist)
static

Definition at line 806 of file xt_idxvec.c.

Here is the call graph for this function:

◆ idxvec_get_pack_size()

static size_t idxvec_get_pack_size ( Xt_idxlist  data,
MPI_Comm  comm 
)
static

Definition at line 396 of file xt_idxvec.c.

◆ idxvec_get_position_of_index()

static int idxvec_get_position_of_index ( Xt_idxlist  idxlist,
Xt_int  index,
int *  position 
)
static

Definition at line 675 of file xt_idxvec.c.

Here is the call graph for this function:

◆ idxvec_get_position_of_index_off()

static int idxvec_get_position_of_index_off ( Xt_idxlist  idxlist,
Xt_int  index,
int *  position,
int  offset 
)
static
Todo:
check datatype of variables lb, ub and middle

Definition at line 624 of file xt_idxvec.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ idxvec_get_positions_of_indices()

static int idxvec_get_positions_of_indices ( Xt_idxlist  idxlist,
const Xt_int indices,
int  num_indices,
int *  positions,
int  single_match_only 
)
static
Todo:
try linear scan of sorted data instead (requires performance test first)

Definition at line 690 of file xt_idxvec.c.

Here is the call graph for this function:

◆ idxvec_pack()

void idxvec_pack ( Xt_idxlist  data,
void *  buffer,
int  buffer_size,
int *  position,
MPI_Comm  comm 
)
static

Definition at line 408 of file xt_idxvec.c.

◆ xt_idxvec_from_stripes_new()

Xt_idxlist xt_idxvec_from_stripes_new ( const struct Xt_stripe  stripes[],
int  num_stripes 
)

Definition at line 352 of file xt_idxvec.c.

Here is the call graph for this function:

◆ xt_idxvec_get_intersection()

Xt_idxlist xt_idxvec_get_intersection ( Xt_idxlist  idxlist_src,
Xt_idxlist  idxlist_dst 
)

Definition at line 492 of file xt_idxvec.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ xt_idxvec_new()

Xt_idxlist xt_idxvec_new ( const Xt_int idxlist,
int  num_indices 
)

generates a new index list based on an index vector

Parameters
[in]idxlistarray containing the global indices
[in]num_indicesnumber of indices in idxlist
Returns
returns a Xt_idxlist

Definition at line 163 of file xt_idxvec.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ xt_idxvec_prealloc_new()

Xt_idxlist xt_idxvec_prealloc_new ( const Xt_int idxvec,
int  num_indices 
)

Definition at line 192 of file xt_idxvec.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ xt_idxvec_unpack()

Xt_idxlist xt_idxvec_unpack ( void *  buffer,
int  buffer_size,
int *  position,
MPI_Comm  comm 
)

Definition at line 423 of file xt_idxvec.c.

Here is the call graph for this function:

Variable Documentation

◆ idxvec_vtable

const struct xt_idxlist_vtable idxvec_vtable
static
Initial value:
= {
.delete = idxvec_delete,
.get_pack_size = idxvec_get_pack_size,
.pack = idxvec_pack,
.copy = idxvec_copy,
.get_indices = idxvec_get_indices,
.get_indices_const = idxvec_get_indices_const,
.get_index_stripes = idxvec_get_index_stripes,
.get_index_at_position = idxvec_get_index_at_position,
.get_indices_at_positions = idxvec_get_indices_at_positions,
.get_position_of_index = idxvec_get_position_of_index,
.get_positions_of_indices = idxvec_get_positions_of_indices,
.get_position_of_index_off = idxvec_get_position_of_index_off,
.get_positions_of_indices_off = NULL,
.get_min_index = idxvec_get_min_index,
.get_max_index = idxvec_get_max_index,
.get_bounding_box = NULL,
.idxlist_pack_code = VECTOR,
}
@ VECTOR
static Xt_int idxvec_get_min_index(Xt_idxlist idxlist)
Definition: xt_idxvec.c:806
static int idxvec_get_position_of_index(Xt_idxlist idxlist, Xt_int index, int *position)
Definition: xt_idxvec.c:675
static void idxvec_delete(Xt_idxlist data)
Definition: xt_idxvec.c:388
static int idxvec_get_positions_of_indices(Xt_idxlist idxlist, const Xt_int *indices, int num_indices, int *positions, int single_match_only)
Definition: xt_idxvec.c:690
static void idxvec_get_indices(Xt_idxlist idxlist, Xt_int *indices)
Definition: xt_idxvec.c:555
static void idxvec_get_index_stripes(Xt_idxlist idxlist, struct Xt_stripe **stripes, int *num_stripes)
Definition: xt_idxvec.c:572
static Xt_idxlist idxvec_copy(Xt_idxlist idxlist)
Definition: xt_idxvec.c:547
static int idxvec_get_index_at_position(Xt_idxlist idxlist, int position, Xt_int *index)
Definition: xt_idxvec.c:583
static void idxvec_pack(Xt_idxlist data, void *buffer, int buffer_size, int *position, MPI_Comm comm)
Definition: xt_idxvec.c:408
static size_t idxvec_get_pack_size(Xt_idxlist data, MPI_Comm comm)
Definition: xt_idxvec.c:396
static int idxvec_get_indices_at_positions(Xt_idxlist idxlist, const int *positions, int num, Xt_int *index, Xt_int undef_idx)
static int idxvec_get_position_of_index_off(Xt_idxlist idxlist, Xt_int index, int *position, int offset)
Definition: xt_idxvec.c:624
static Xt_int const * idxvec_get_indices_const(Xt_idxlist idxlist)
Definition: xt_idxvec.c:564
static Xt_int idxvec_get_max_index(Xt_idxlist idxlist)
Definition: xt_idxvec.c:819

Definition at line 120 of file xt_idxvec.c.