Cloned library METIS with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

120 lines
3.2 KiB

/*!
\file gklib.c
\brief Various helper routines generated using GKlib's templates
\date Started 4/12/2007
\author George
\author Copyright 1997-2009, Regents of the University of Minnesota
\version\verbatim $Id: gklib.c 10395 2011-06-23 23:28:06Z karypis $ \endverbatim
*/
#include "metislib.h"
/*************************************************************************/
/*! BLAS routines */
/*************************************************************************/
GK_MKBLAS(i, idx_t, idx_t)
GK_MKBLAS(r, real_t, real_t)
/*************************************************************************/
/*! Memory allocation routines */
/*************************************************************************/
GK_MKALLOC(i, idx_t)
GK_MKALLOC(r, real_t)
GK_MKALLOC(ikv, ikv_t)
GK_MKALLOC(rkv, rkv_t)
/*************************************************************************/
/*! Priority queues routines */
/*************************************************************************/
#define key_gt(a, b) ((a) > (b))
GK_MKPQUEUE(ipq, ipq_t, ikv_t, idx_t, idx_t, ikvmalloc, IDX_MAX, key_gt)
GK_MKPQUEUE(rpq, rpq_t, rkv_t, real_t, idx_t, rkvmalloc, REAL_MAX, key_gt)
#undef key_gt
/*************************************************************************/
/*! Random number generation routines */
/*************************************************************************/
GK_MKRANDOM(i, idx_t, idx_t)
/*************************************************************************/
/*! Utility routines */
/*************************************************************************/
GK_MKARRAY2CSR(i, idx_t)
/*************************************************************************/
/*! Sorting routines */
/*************************************************************************/
void isorti(size_t n, idx_t *base)
{
#define i_lt(a, b) ((*a) < (*b))
GK_MKQSORT(idx_t, base, n, i_lt);
#undef i_lt
}
void isortd(size_t n, idx_t *base)
{
#define i_gt(a, b) ((*a) > (*b))
GK_MKQSORT(idx_t, base, n, i_gt);
#undef i_gt
}
void rsorti(size_t n, real_t *base)
{
#define r_lt(a, b) ((*a) < (*b))
GK_MKQSORT(real_t, base, n, r_lt);
#undef r_lt
}
void rsortd(size_t n, real_t *base)
{
#define r_gt(a, b) ((*a) > (*b))
GK_MKQSORT(real_t, base, n, r_gt);
#undef r_gt
}
void ikvsorti(size_t n, ikv_t *base)
{
#define ikey_lt(a, b) ((a)->key < (b)->key)
GK_MKQSORT(ikv_t, base, n, ikey_lt);
#undef ikey_lt
}
/* Sorts based both on key and val */
void ikvsortii(size_t n, ikv_t *base)
{
#define ikeyval_lt(a, b) ((a)->key < (b)->key || ((a)->key == (b)->key && (a)->val < (b)->val))
GK_MKQSORT(ikv_t, base, n, ikeyval_lt);
#undef ikeyval_lt
}
void ikvsortd(size_t n, ikv_t *base)
{
#define ikey_gt(a, b) ((a)->key > (b)->key)
GK_MKQSORT(ikv_t, base, n, ikey_gt);
#undef ikey_gt
}
void rkvsorti(size_t n, rkv_t *base)
{
#define rkey_lt(a, b) ((a)->key < (b)->key)
GK_MKQSORT(rkv_t, base, n, rkey_lt);
#undef rkey_lt
}
void rkvsortd(size_t n, rkv_t *base)
{
#define rkey_gt(a, b) ((a)->key > (b)->key)
GK_MKQSORT(rkv_t, base, n, rkey_gt);
#undef rkey_gt
}
void uvwsorti(size_t n, uvw_t *base)
{
#define uvwkey_lt(a, b) ((a)->u < (b)->u || ((a)->u == (b)->u && (a)->v < (b)->v))
GK_MKQSORT(uvw_t, base, n, uvwkey_lt);
#undef uvwkey_lt
}