hp2FEM  0.1
src/metis-5.0/GKlib/gk_mkrandom.h
Go to the documentation of this file.
00001 
00011 #ifndef _GK_MKRANDOM_H
00012 #define _GK_MKRANDOM_H
00013 
00014 /*************************************************************************/\\
00022 /**************************************************************************/\
00023 #define GK_MKRANDOM(FPRFX, RNGT, VALT)\
00024 /*************************************************************************/\
00025  \
00026 /**************************************************************************/\
00027 void FPRFX ## srand(RNGT seed) \
00028 {\
00029   gk_randinit((uint64_t) seed);\
00030 }\
00031 \
00032 \
00033 /*************************************************************************/\
00034  \
00035 /**************************************************************************/\
00036 RNGT FPRFX ## rand() \
00037 {\
00038   if (sizeof(RNGT) <= sizeof(int32_t)) \
00039     return (RNGT)gk_randint32(); \
00040   else \
00041     return (RNGT)gk_randint64(); \
00042 }\
00043 \
00044 \
00045 /*************************************************************************/\
00046  \
00047 /**************************************************************************/\
00048 RNGT FPRFX ## randInRange(RNGT max) \
00049 {\
00050   return (RNGT)((FPRFX ## rand())%max); \
00051 }\
00052 \
00053 \
00054 /*************************************************************************/\
00055 \
00058 /**************************************************************************/\
00059 void FPRFX ## randArrayPermute(RNGT n, VALT *p, RNGT nshuffles, int flag)\
00060 {\
00061   RNGT i, u, v;\
00062   VALT tmp;\
00063 \
00064   if (flag == 1) {\
00065     for (i=0; i<n; i++)\
00066       p[i] = (VALT)i;\
00067   }\
00068 \
00069   if (n < 10) {\
00070     for (i=0; i<n; i++) {\
00071       v = FPRFX ## randInRange(n);\
00072       u = FPRFX ## randInRange(n);\
00073       gk_SWAP(p[v], p[u], tmp);\
00074     }\
00075   }\
00076   else {\
00077     for (i=0; i<nshuffles; i++) {\
00078       v = FPRFX ## randInRange(n-3);\
00079       u = FPRFX ## randInRange(n-3);\
00080       /*gk_SWAP(p[v+0], p[u+0], tmp);*/\
00081       /*gk_SWAP(p[v+1], p[u+1], tmp);*/\
00082       /*gk_SWAP(p[v+2], p[u+2], tmp);*/\
00083       /*gk_SWAP(p[v+3], p[u+3], tmp);*/\
00084       gk_SWAP(p[v+0], p[u+2], tmp);\
00085       gk_SWAP(p[v+1], p[u+3], tmp);\
00086       gk_SWAP(p[v+2], p[u+0], tmp);\
00087       gk_SWAP(p[v+3], p[u+1], tmp);\
00088     }\
00089   }\
00090 }\
00091 \
00092 \
00093 /*************************************************************************/\
00094 \
00097 /**************************************************************************/\
00098 void FPRFX ## randArrayPermuteFine(RNGT n, VALT *p, int flag)\
00099 {\
00100   RNGT i, v;\
00101   VALT tmp;\
00102 \
00103   if (flag == 1) {\
00104     for (i=0; i<n; i++)\
00105       p[i] = (VALT)i;\
00106   }\
00107 \
00108   for (i=0; i<n; i++) {\
00109     v = FPRFX ## randInRange(n);\
00110     gk_SWAP(p[i], p[v], tmp);\
00111   }\
00112 }\
00113 
00114 
00115 #define GK_MKRANDOM_PROTO(FPRFX, RNGT, VALT)\
00116   void FPRFX ## srand(RNGT seed); \
00117   RNGT FPRFX ## rand(); \
00118   RNGT FPRFX ## randInRange(RNGT max); \
00119   void FPRFX ## randArrayPermute(RNGT n, VALT *p, RNGT nshuffles, int flag);\
00120   void FPRFX ## randArrayPermuteFine(RNGT n, VALT *p, int flag);\
00121 
00122 
00123 #endif
 All Classes Files Functions Variables Typedefs Friends Defines