Path: blob/devel/elmergrid/src/metis-5.1.0/libmetis/gklib.c
3206 views
/*!1\file gklib.c2\brief Various helper routines generated using GKlib's templates34\date Started 4/12/20075\author George6\author Copyright 1997-2009, Regents of the University of Minnesota7\version\verbatim $Id: gklib.c 10395 2011-06-23 23:28:06Z karypis $ \endverbatim8*/91011#include "metislib.h"121314/*************************************************************************/15/*! BLAS routines */16/*************************************************************************/17GK_MKBLAS(i, idx_t, idx_t)18GK_MKBLAS(r, real_t, real_t)1920/*************************************************************************/21/*! Memory allocation routines */22/*************************************************************************/23GK_MKALLOC(i, idx_t)24GK_MKALLOC(r, real_t)25GK_MKALLOC(ikv, ikv_t)26GK_MKALLOC(rkv, rkv_t)2728/*************************************************************************/29/*! Priority queues routines */30/*************************************************************************/31#define key_gt(a, b) ((a) > (b))32GK_MKPQUEUE(ipq, ipq_t, ikv_t, idx_t, idx_t, ikvmalloc, IDX_MAX, key_gt)33GK_MKPQUEUE(rpq, rpq_t, rkv_t, real_t, idx_t, rkvmalloc, REAL_MAX, key_gt)34#undef key_gt3536/*************************************************************************/37/*! Random number generation routines */38/*************************************************************************/39GK_MKRANDOM(i, idx_t, idx_t)4041/*************************************************************************/42/*! Utility routines */43/*************************************************************************/44GK_MKARRAY2CSR(i, idx_t)4546/*************************************************************************/47/*! Sorting routines */48/*************************************************************************/49void isorti(size_t n, idx_t *base)50{51#define i_lt(a, b) ((*a) < (*b))52GK_MKQSORT(idx_t, base, n, i_lt);53#undef i_lt54}5556void isortd(size_t n, idx_t *base)57{58#define i_gt(a, b) ((*a) > (*b))59GK_MKQSORT(idx_t, base, n, i_gt);60#undef i_gt61}6263void rsorti(size_t n, real_t *base)64{65#define r_lt(a, b) ((*a) < (*b))66GK_MKQSORT(real_t, base, n, r_lt);67#undef r_lt68}6970void rsortd(size_t n, real_t *base)71{72#define r_gt(a, b) ((*a) > (*b))73GK_MKQSORT(real_t, base, n, r_gt);74#undef r_gt75}7677void ikvsorti(size_t n, ikv_t *base)78{79#define ikey_lt(a, b) ((a)->key < (b)->key)80GK_MKQSORT(ikv_t, base, n, ikey_lt);81#undef ikey_lt82}8384/* Sorts based both on key and val */85void ikvsortii(size_t n, ikv_t *base)86{87#define ikeyval_lt(a, b) ((a)->key < (b)->key || ((a)->key == (b)->key && (a)->val < (b)->val))88GK_MKQSORT(ikv_t, base, n, ikeyval_lt);89#undef ikeyval_lt90}9192void ikvsortd(size_t n, ikv_t *base)93{94#define ikey_gt(a, b) ((a)->key > (b)->key)95GK_MKQSORT(ikv_t, base, n, ikey_gt);96#undef ikey_gt97}9899void rkvsorti(size_t n, rkv_t *base)100{101#define rkey_lt(a, b) ((a)->key < (b)->key)102GK_MKQSORT(rkv_t, base, n, rkey_lt);103#undef rkey_lt104}105106void rkvsortd(size_t n, rkv_t *base)107{108#define rkey_gt(a, b) ((a)->key > (b)->key)109GK_MKQSORT(rkv_t, base, n, rkey_gt);110#undef rkey_gt111}112113void uvwsorti(size_t n, uvw_t *base)114{115#define uvwkey_lt(a, b) ((a)->u < (b)->u || ((a)->u == (b)->u && (a)->v < (b)->v))116GK_MKQSORT(uvw_t, base, n, uvwkey_lt);117#undef uvwkey_lt118}119120121122