00001 
00012 #include "metislib.h"
00013 
00014 
00015 
00017 
00018 GK_MKBLAS(i,  idx_t,  idx_t)
00019 GK_MKBLAS(r,  real_t, real_t)
00020 
00021 
00023 
00024 GK_MKALLOC(i,    idx_t)
00025 GK_MKALLOC(r,    real_t)
00026 GK_MKALLOC(ikv,  ikv_t)
00027 GK_MKALLOC(rkv,  rkv_t)
00028 
00029 
00031 
00032 #define key_gt(a, b) ((a) > (b))
00033 GK_MKPQUEUE(ipq, ipq_t, ikv_t, idx_t, idx_t, ikvmalloc, IDX_MAX, key_gt)
00034 GK_MKPQUEUE(rpq, rpq_t, rkv_t, real_t, idx_t, rkvmalloc, REAL_MAX, key_gt)
00035 #undef key_gt
00036 
00037 
00039 
00040 GK_MKRANDOM(i, idx_t, idx_t)
00041 
00042 
00044 
00045 GK_MKARRAY2CSR(i, idx_t)
00046 
00047 
00049 
00050 void isorti(size_t n, idx_t *base)
00051 {
00052 #define i_lt(a, b) ((*a) < (*b))
00053   GK_MKQSORT(idx_t, base, n, i_lt);
00054 #undef i_lt
00055 }
00056 
00057 void isortd(size_t n, idx_t *base)
00058 {
00059 #define i_gt(a, b) ((*a) > (*b))
00060   GK_MKQSORT(idx_t, base, n, i_gt);
00061 #undef i_gt
00062 }
00063 
00064 void rsorti(size_t n, real_t *base)
00065 {
00066 #define r_lt(a, b) ((*a) < (*b))
00067   GK_MKQSORT(real_t, base, n, r_lt);
00068 #undef r_lt
00069 }
00070 
00071 void rsortd(size_t n, real_t *base)
00072 {
00073 #define r_gt(a, b) ((*a) > (*b))
00074   GK_MKQSORT(real_t, base, n, r_gt);
00075 #undef r_gt
00076 }
00077 
00078 void ikvsorti(size_t n, ikv_t *base)
00079 {
00080 #define ikey_lt(a, b) ((a)->key < (b)->key)
00081   GK_MKQSORT(ikv_t, base, n, ikey_lt);
00082 #undef ikey_lt
00083 }
00084 
00085 
00086 void ikvsortii(size_t n, ikv_t *base)
00087 {
00088 #define ikeyval_lt(a, b) ((a)->key < (b)->key || ((a)->key == (b)->key && (a)->val < (b)->val))
00089   GK_MKQSORT(ikv_t, base, n, ikeyval_lt);
00090 #undef ikeyval_lt
00091 }
00092 
00093 void ikvsortd(size_t n, ikv_t *base)
00094 {
00095 #define ikey_gt(a, b) ((a)->key > (b)->key)
00096   GK_MKQSORT(ikv_t, base, n, ikey_gt);
00097 #undef ikey_gt
00098 }
00099 
00100 void rkvsorti(size_t n, rkv_t *base)
00101 {
00102 #define rkey_lt(a, b) ((a)->key < (b)->key)
00103   GK_MKQSORT(rkv_t, base, n, rkey_lt);
00104 #undef rkey_lt
00105 }
00106 
00107 void rkvsortd(size_t n, rkv_t *base)
00108 {
00109 #define rkey_gt(a, b) ((a)->key > (b)->key)
00110   GK_MKQSORT(rkv_t, base, n, rkey_gt);
00111 #undef rkey_gt
00112 }
00113 
00114 void uvwsorti(size_t n, uvw_t *base)
00115 {
00116 #define uvwkey_lt(a, b) ((a)->u < (b)->u || ((a)->u == (b)->u && (a)->v < (b)->v))
00117   GK_MKQSORT(uvw_t, base, n, uvwkey_lt);
00118 #undef uvwkey_lt
00119 }
00120