Yet Another eXchange Tool 0.11.4
|
#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) |
#define | MAX(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, ...) |
#define | SORT_TYPE_CMP_LE(a, b, ...) |
#define | SORT_TYPE_CMP_EQ(a, b, ...) |
#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 ) |
Definition at line 78 of file xt_idxstripes.c.
#define MIN | ( | a, | |
b ) |
Definition at line 77 of file xt_idxstripes.c.
#define SORT_TYPE struct Xt_stripes_sort |
Definition at line 264 of file xt_idxstripes.c.
#define SORT_TYPE int |
Definition at line 264 of file xt_idxstripes.c.
#define SORT_TYPE_CMP_EQ | ( | a, | |
b, | |||
... ) |
Definition at line 269 of file xt_idxstripes.c.
#define SORT_TYPE_CMP_LE | ( | a, | |
b, | |||
... ) |
Definition at line 268 of file xt_idxstripes.c.
#define SORT_TYPE_CMP_LT | ( | a, | |
b, | |||
... ) |
Definition at line 267 of file xt_idxstripes.c.
#define SORT_TYPE_CMP_LT | ( | u, | |
v, | |||
i, | |||
j ) |
Definition at line 267 of file xt_idxstripes.c.
#define SORT_TYPE_SUFFIX stripes_sort |
Definition at line 265 of file xt_idxstripes.c.
#define SORT_TYPE_SUFFIX stripe_by_min |
Definition at line 265 of file xt_idxstripes.c.
#define XT_IDXSTRIPES_POS_EXT_MAP_COUNT |
Definition at line 532 of file xt_idxstripes.c.
#define XT_SORT_EXTRA_ARGS_DECL |
Definition at line 1083 of file xt_idxstripes.c.
#define XT_SORT_EXTRA_ARGS_PASS , pfx_removed, stripes |
Definition at line 1085 of file xt_idxstripes.c.
#define XT_SORTFUNC_DECL static |
Definition at line 266 of file xt_idxstripes.c.
#define XT_SORTFUNC_DECL static |
Definition at line 266 of file xt_idxstripes.c.
typedef struct Xt_idxstripes_* Xt_idxstripes |
Definition at line 215 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 236 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 245 of file xt_idxstripes.c.
|
inlinestatic |
Definition at line 1432 of file xt_idxstripes.c.
|
inlinestatic |
Definition at line 1516 of file xt_idxstripes.c.
|
static |
Definition at line 538 of file xt_idxstripes.c.
|
static |
Definition at line 1980 of file xt_idxstripes.c.
|
inlinestatic |
|
inlinestatic |
|
static |
Definition at line 1727 of file xt_idxstripes.c.
|
static |
Definition at line 1541 of file xt_idxstripes.c.
|
static |
Definition at line 615 of file xt_idxstripes.c.
|
static |
Definition at line 290 of file xt_idxstripes.c.
|
static |
|
static |
Definition at line 2108 of file xt_idxstripes.c.
|
static |
Definition at line 866 of file xt_idxstripes.c.
|
static |
Definition at line 1043 of file xt_idxstripes.c.
|
static |
Definition at line 465 of file xt_idxstripes.c.
|
static |
Definition at line 1282 of file xt_idxstripes.c.
|
static |
Definition at line 1242 of file xt_idxstripes.c.
|
static |
|
static |
Definition at line 1311 of file xt_idxstripes.c.
|
static |
|
static |
Definition at line 2088 of file xt_idxstripes.c.
|
static |
Definition at line 2082 of file xt_idxstripes.c.
|
static |
Definition at line 1267 of file xt_idxstripes.c.
|
static |
Definition at line 476 of file xt_idxstripes.c.
|
static |
Definition at line 1881 of file xt_idxstripes.c.
|
static |
Definition at line 1767 of file xt_idxstripes.c.
|
static |
|
static |
|
static |
|
static |
Definition at line 1173 of file xt_idxstripes.c.
|
static |
Definition at line 491 of file xt_idxstripes.c.
|
static |
Definition at line 1195 of file xt_idxstripes.c.
|
static |
Definition at line 1859 of file xt_idxstripes.c.
struct Xt_stripes_alloc xt_idxstripes_alloc | ( | size_t | num_stripes | ) |
Definition at line 373 of file xt_idxstripes.c.
Xt_idxlist xt_idxstripes_congeal | ( | struct Xt_stripes_alloc | stripes_alloc | ) |
Definition at line 283 of file xt_idxstripes.c.
void xt_idxstripes_finalize | ( | void | ) |
Definition at line 210 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 423 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 966 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 400 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 442 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 |
[in] | config | custom configuration parameters |
Definition at line 1114 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.