Yet Another eXchange Tool 0.11.1
|
#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_arithmetic_util.h"
#include "xt_arithmetic_long.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_idxstripes_internal.h"
#include "xt_stripe_util.h"
#include "xt/xt_mpi.h"
#include "xt_idxlist_unpack.h"
#include "xt_cover.h"
#include "core/core.h"
#include "core/ppm_xfuncs.h"
#include "ensure_array_size.h"
#include "instr.h"
#include "xt_config_internal.h"
#include "xt_mergesort_base.h"
#include "xt_idxstripes_pos_ext_map.h"
#include "xt_heapsort_base.h"
Go to the source code of this file.
Classes | |
struct | Xt_stripes_sort |
struct | Xt_idxstripes_ |
struct | extended_gcd |
struct | Xt_stripes_lookup |
struct | int_vec |
struct | unmatched_tail |
Macros | |
#define | MIN(a, b) (((a)<(b))?(a):(b)) |
#define | MAX(a, b) (((a)>(b))?(a):(b)) |
#define | SORT_TYPE struct Xt_stripes_sort |
#define | SORT_TYPE_SUFFIX stripes_sort |
#define | XT_SORTFUNC_DECL static |
#define | SORT_TYPE_CMP_LT(a, b, ...) ((a).range.min < (b).range.min) |
#define | SORT_TYPE_CMP_LE(a, b, ...) ((a).range.min <= (b).range.min) |
#define | SORT_TYPE_CMP_EQ(a, b, ...) ((a).range.min == (b).range.min) |
#define | XT_IDXSTRIPES_POS_EXT_MAP_COUNT |
#define | SORT_TYPE int |
#define | SORT_TYPE_SUFFIX stripe_by_min |
#define | SORT_TYPE_CMP_LT(u, v, i, j) |
#define | XT_SORT_EXTRA_ARGS_DECL |
#define | XT_SORT_EXTRA_ARGS_PASS , pfx_removed, stripes |
#define | XT_SORTFUNC_DECL static |
Typedefs | |
typedef struct Xt_idxstripes_ * | Xt_idxstripes |
Enumerations | |
enum | idxstripes_flag_bits { stripes_sort_bit = 0 , stripes_do_overlap_bit = 2 , stripes_some_have_zero_stride_bit , stripes_intersect_bit } |
enum | idxstripes_flag_mask { stripes_do_overlap_mask = 1 << stripes_do_overlap_bit , stripes_some_have_zero_stride_mask = 1 << stripes_some_have_zero_stride_bit , stripes_intersect_mask = 1 << stripes_intersect_bit } |
Functions | |
static void | idxstripes_delete (Xt_idxlist data) |
static size_t | idxstripes_get_pack_size (Xt_idxlist data, MPI_Comm comm) |
static void | idxstripes_pack (Xt_idxlist data, void *buffer, int buffer_size, int *position, MPI_Comm comm) |
static Xt_idxlist | idxstripes_copy (Xt_idxlist idxlist) |
static Xt_idxlist | idxstripes_sorted_copy (Xt_idxlist idxlist, Xt_config config) |
static void | idxstripes_get_indices (Xt_idxlist idxlist, Xt_int *indices) |
static const Xt_int * | idxstripes_get_indices_const (Xt_idxlist idxlist) |
static int | idxstripes_get_num_index_stripes (Xt_idxlist idxlist) |
static void | idxstripes_get_index_stripes (Xt_idxlist idxlist, struct Xt_stripe *restrict stripes, size_t num_stripes_alloc) |
static int | idxstripes_get_index_at_position (Xt_idxlist idxlist, int position, Xt_int *index) |
static int | idxstripes_get_indices_at_positions (Xt_idxlist idxlist, const int *positions, int num, Xt_int *index, Xt_int undef_idx) |
static int | idxstripes_get_pos_exts_of_index_stripes (Xt_idxlist idxlist, int num_stripes, const struct Xt_stripe stripes[num_stripes], int *num_ext, struct Xt_pos_ext **pos_ext, int single_match_only, Xt_config config) |
static int | idxstripes_get_position_of_index (Xt_idxlist idxlist, Xt_int index, int *position) |
static int | idxstripes_get_position_of_index_off (Xt_idxlist idxlist, Xt_int index, int *position, int offset) |
static Xt_int | idxstripes_get_min_index (Xt_idxlist idxlist) |
static Xt_int | idxstripes_get_max_index (Xt_idxlist idxlist) |
static int | idxstripes_get_sorting (Xt_idxlist idxlist) |
void | xt_idxstripes_initialize (void) |
void | xt_idxstripes_finalize (void) |
static Xt_idxlist | idxstripes_aggregate (Xt_idxstripes idxstripes, const char *caller) |
Xt_idxlist | xt_idxstripes_congeal (struct Xt_stripes_alloc stripes_alloc) |
static struct Xt_stripes_alloc | idxstripes_alloc (size_t num_stripes) |
struct Xt_stripes_alloc | xt_idxstripes_alloc (size_t num_stripes) |
Xt_idxlist | xt_idxstripes_new (struct Xt_stripe const *stripes, int num_stripes) |
Xt_idxlist | xt_idxstripes_from_idxlist_new (Xt_idxlist idxlist_src) |
Xt_idxlist | xt_idxstripes_prealloc_new (const struct Xt_stripe *stripes, int num_stripes) |
Xt_idxlist | xt_idxstripes_unpack (void *buffer, int buffer_size, int *position, MPI_Comm comm) |
static Xt_idxlist | compute_intersection_fallback (Xt_idxstripes idxstripes_src, Xt_idxstripes idxstripes_dst, Xt_config config) |
static struct extended_gcd | extended_gcd (Xt_int a, Xt_int b) |
static struct Xt_stripe | get_stripe_intersection (struct Xt_stripe stripe_a, struct Xt_stripe stripe_b) |
static Xt_idxlist | idxstripes_compute_intersection (Xt_idxstripes idxstripes_src, Xt_idxstripes idxstripes_dst) |
Xt_idxlist | xt_idxstripes_get_intersection (Xt_idxlist idxlist_src, Xt_idxlist idxlist_dst, Xt_config config) |
static bool | stripe_contains_index (struct Xt_stripe stripe, Xt_int idx) |
PPM_DSO_INTERNAL Xt_idxlist | xt_idxstripes_get_idxvec_intersection (Xt_idxlist idxlist_src, Xt_idxlist idxlist_dst, Xt_config XT_UNUSED(config)) |
static Xt_int | stripe_min (struct Xt_stripe stripe, int pfx_remove) |
static int | stripe_min_cmp_lt (const struct Xt_stripe a, const struct Xt_stripe b, const int pfx_remove_a, const int pfx_remove_b) |
static Xt_int | retrieve_min (size_t num_src_stripes, const struct Xt_stripe *src_stripes, int *src_permutation, int *pfx_removed) |
Xt_idxlist | xt_idxstripes_sort_new (size_t num_src_stripes, const struct Xt_stripe src_stripes[], Xt_config config) |
static Xt_idxlist | idxstripes_order_invert (Xt_idxlist idxlist) |
const struct Xt_stripe * | xt_idxstripes_get_index_stripes_const (Xt_idxlist idxlist) |
size_t | xt_idxstripes_get_num_index_stripes (Xt_idxlist idxlist) |
static void | append_ext (struct Xt_pos_ext pos_ext, struct Xt_pos_ext_vec *restrict result) |
static void | create_stripes_lookup (struct Xt_stripes_lookup *restrict db, Xt_idxstripes idxstripes) |
static void | destroy_stripes_lookup (struct Xt_stripes_lookup *restrict db) |
static size_t | bsearch_stripes_sort (size_t n, const struct Xt_stripes_sort a[n], Xt_int min_key) |
static void | find_candidates (struct Xt_stripe query, const struct Xt_stripes_lookup *restrict db, struct int_vec *candidates, bool single_match_only, struct Xt_pos_ext_vec *restrict cover, Xt_config config) |
static struct Xt_idxstripes_ * | expand_zero_stripes (size_t num_stripes, const struct Xt_stripe *restrict stripes) |
static size_t | idxstripes_get_pos_exts_of_index_stripe (struct Xt_stripe query, const struct Xt_stripes_lookup *restrict db, struct Xt_pos_ext_vec *restrict result, struct Xt_pos_ext_vec *restrict cover, bool single_match_only, size_t num_candidates, int *restrict candidates) |
static size_t | conditional_pos_ext_insert (struct Xt_stripe query, struct Xt_pos_ext pos_ext2add, const struct Xt_stripes_lookup *restrict db, struct Xt_pos_ext_vec *restrict result, struct Xt_pos_ext_vec *restrict cover, size_t num_candidates, int *restrict candidates) |
static struct unmatched_tail | idxstripes_complex_get_pos_exts_of_index_stripe (struct Xt_stripe query, const struct Xt_stripes_lookup *restrict stripes_lookup, struct Xt_pos_ext_vec *restrict result, struct Xt_pos_ext_vec *restrict cover, bool single_match_only, size_t num_candidates, int *restrict candidates) |
static size_t | pos_ext_insert (struct Xt_stripe query, struct Xt_pos_ext pos_ext2add, const struct Xt_stripes_lookup *stripes_lookup, struct Xt_pos_ext_vec *restrict result, struct Xt_pos_ext_vec *restrict cover, bool single_match_only, size_t num_candidates, int *restrict candidates) |
Variables | |
static const struct xt_idxlist_vtable | idxstripes_vtable |
static MPI_Datatype | stripe_dt |
Definition in file xt_idxstripes.c.
#define MAX | ( | a, | |
b | |||
) | (((a)>(b))?(a):(b)) |
Definition at line 78 of file xt_idxstripes.c.
#define MIN | ( | a, | |
b | |||
) | (((a)<(b))?(a):(b)) |
Definition at line 77 of file xt_idxstripes.c.
#define SORT_TYPE struct Xt_stripes_sort |
Definition at line 258 of file xt_idxstripes.c.
#define SORT_TYPE int |
Definition at line 258 of file xt_idxstripes.c.
#define SORT_TYPE_CMP_EQ | ( | a, | |
b, | |||
... | |||
) | ((a).range.min == (b).range.min) |
Definition at line 263 of file xt_idxstripes.c.
#define SORT_TYPE_CMP_LE | ( | a, | |
b, | |||
... | |||
) | ((a).range.min <= (b).range.min) |
Definition at line 262 of file xt_idxstripes.c.
#define SORT_TYPE_CMP_LT | ( | a, | |
b, | |||
... | |||
) | ((a).range.min < (b).range.min) |
Definition at line 261 of file xt_idxstripes.c.
#define SORT_TYPE_CMP_LT | ( | u, | |
v, | |||
i, | |||
j | |||
) |
Definition at line 261 of file xt_idxstripes.c.
#define SORT_TYPE_SUFFIX stripes_sort |
Definition at line 259 of file xt_idxstripes.c.
#define SORT_TYPE_SUFFIX stripe_by_min |
Definition at line 259 of file xt_idxstripes.c.
#define XT_IDXSTRIPES_POS_EXT_MAP_COUNT |
Definition at line 526 of file xt_idxstripes.c.
#define XT_SORT_EXTRA_ARGS_DECL |
Definition at line 1077 of file xt_idxstripes.c.
#define XT_SORT_EXTRA_ARGS_PASS , pfx_removed, stripes |
Definition at line 1079 of file xt_idxstripes.c.
#define XT_SORTFUNC_DECL static |
Definition at line 260 of file xt_idxstripes.c.
#define XT_SORTFUNC_DECL static |
Definition at line 260 of file xt_idxstripes.c.
typedef struct Xt_idxstripes_* Xt_idxstripes |
Definition at line 209 of file xt_idxstripes.c.
enum idxstripes_flag_bits |
structure of flags:
Enumerator | |
---|---|
stripes_sort_bit | |
stripes_do_overlap_bit | |
stripes_some_have_zero_stride_bit | |
stripes_intersect_bit |
Definition at line 230 of file xt_idxstripes.c.
enum idxstripes_flag_mask |
Enumerator | |
---|---|
stripes_do_overlap_mask | |
stripes_some_have_zero_stride_mask | |
stripes_intersect_mask |
Definition at line 239 of file xt_idxstripes.c.
|
inlinestatic |
Definition at line 1426 of file xt_idxstripes.c.
|
inlinestatic |
Definition at line 1510 of file xt_idxstripes.c.
|
static |
Definition at line 532 of file xt_idxstripes.c.
|
static |
Definition at line 1974 of file xt_idxstripes.c.
|
inlinestatic |
|
inlinestatic |
|
static |
Definition at line 1721 of file xt_idxstripes.c.
|
inlinestatic |
Definition at line 585 of file xt_idxstripes.c.
|
static |
Definition at line 1535 of file xt_idxstripes.c.
|
static |
Definition at line 609 of file xt_idxstripes.c.
|
static |
Definition at line 284 of file xt_idxstripes.c.
|
static |
|
static |
Definition at line 2102 of file xt_idxstripes.c.
|
static |
Definition at line 860 of file xt_idxstripes.c.
|
static |
Definition at line 1037 of file xt_idxstripes.c.
|
static |
Definition at line 459 of file xt_idxstripes.c.
|
static |
Definition at line 1276 of file xt_idxstripes.c.
|
static |
Definition at line 1236 of file xt_idxstripes.c.
|
static |
|
static |
Definition at line 1305 of file xt_idxstripes.c.
|
static |
|
static |
Definition at line 2082 of file xt_idxstripes.c.
|
static |
Definition at line 2076 of file xt_idxstripes.c.
|
static |
Definition at line 1261 of file xt_idxstripes.c.
|
static |
Definition at line 470 of file xt_idxstripes.c.
|
static |
Definition at line 1875 of file xt_idxstripes.c.
|
static |
Definition at line 1761 of file xt_idxstripes.c.
|
static |
|
static |
|
static |
|
static |
Definition at line 1167 of file xt_idxstripes.c.
|
static |
Definition at line 485 of file xt_idxstripes.c.
|
static |
Definition at line 1189 of file xt_idxstripes.c.
|
static |
Definition at line 1853 of file xt_idxstripes.c.
struct Xt_stripes_alloc xt_idxstripes_alloc | ( | size_t | num_stripes | ) |
Definition at line 367 of file xt_idxstripes.c.
Xt_idxlist xt_idxstripes_congeal | ( | struct Xt_stripes_alloc | stripes_alloc | ) |
Definition at line 277 of file xt_idxstripes.c.
void xt_idxstripes_finalize | ( | void | ) |
Definition at line 204 of file xt_idxstripes.c.
Xt_idxlist xt_idxstripes_from_idxlist_new | ( | Xt_idxlist | idxlist_src | ) |
Creates an index list that is built up of stripes of indices by converting another index list into stripes.
[in] | idxlist_src | list to convert into stripes |
Definition at line 417 of file xt_idxstripes.c.
PPM_DSO_INTERNAL Xt_idxlist xt_idxstripes_get_idxvec_intersection | ( | Xt_idxlist | idxlist_src, |
Xt_idxlist | idxlist_dst, | ||
Xt_config | XT_UNUSEDconfig | ||
) |
const struct Xt_stripe * xt_idxstripes_get_index_stripes_const | ( | Xt_idxlist | idxlist | ) |
Xt_idxlist xt_idxstripes_get_intersection | ( | Xt_idxlist | idxlist_src, |
Xt_idxlist | idxlist_dst, | ||
Xt_config | config | ||
) |
Definition at line 960 of file xt_idxstripes.c.
size_t xt_idxstripes_get_num_index_stripes | ( | Xt_idxlist | idxlist | ) |
void xt_idxstripes_initialize | ( | void | ) |
Definition at line 175 of file xt_idxstripes.c.
Xt_idxlist xt_idxstripes_new | ( | struct Xt_stripe const * | stripes, |
int | num_stripes | ||
) |
Generates an index list that is built up of stripes of indices.
[in] | stripes | array defining the stripes |
[in] | num_stripes | number of stripes |
Definition at line 394 of file xt_idxstripes.c.
Xt_idxlist xt_idxstripes_prealloc_new | ( | const struct Xt_stripe * | stripes, |
int | num_stripes | ||
) |
Generates an index list that is built up of stripes of indices. Does not copy the stripes. Ownership of the stripes remains with the caller and the underlying object must not be free'd before calling the destructor for the returned index list object.
[in] | stripes | array defining the stripes |
[in] | num_stripes | number of stripes |
Definition at line 436 of file xt_idxstripes.c.
Xt_idxlist xt_idxstripes_sort_new | ( | size_t | num_stripes, |
const struct Xt_stripe | stripes[], | ||
Xt_config | config | ||
) |
Generates an index list that is built up of stripes of indices. Copies and sorts the stripes and their contained indices, i.e. the indices in the resulting list are sorted by value.
[in] | num_stripes | number of stripes |
[in] | stripes | array defining the stripes |
Definition at line 1108 of file xt_idxstripes.c.
Xt_idxlist xt_idxstripes_unpack | ( | void * | buffer, |
int | buffer_size, | ||
int * | position, | ||
MPI_Comm | comm | ||
) |
|
static |
Definition at line 143 of file xt_idxstripes.c.
|
static |
Definition at line 167 of file xt_idxstripes.c.