#ifndef _p3pack_h #define _p3pack_h /* c-include files */ #include #include #include #include #include "genutil.h" /* Types used by permlib: --------------------- */ /* Permutation data */ typedef struct {plural unsigned short *mfch,*psto,*eswp; int nmem;} *PERMUT_ROUT, PERMUT_ROUT_STRUCT; /* Bit_linear_permutation */ typedef struct {int nbits; unsigned *pmat;} *BL_PERMUT, BL_PERMUT_STRUCT; /* Function declarations: --------------------- */ extern BL_PERMUT blp_identNew(int nbits); extern BL_PERMUT blp_btprmNew(int *btprm, int nbits); extern BL_PERMUT blp_cMatNew(char *A, char *b, int nbits); extern BL_PERMUT blp_iMatNew(int *A, int *b, int nbits); extern BL_PERMUT blp_copyNew(BL_PERMUT P); extern void blp_copy(BL_PERMUT A, BL_PERMUT B); extern void blp_free(BL_PERMUT P); extern void blp_print(BL_PERMUT P); extern void blp_lMult(BL_PERMUT P_UPDATE,BL_PERMUT P_MultLeft); extern void blp_rMult(BL_PERMUT P_UPDATE,BL_PERMUT P_MultRight); extern void blp_inv(BL_PERMUT P_UPDATE); extern PERMUT_ROUT blp_rout(BL_PERMUT P); extern PERMUT_ROUT PxBlp_rout(BL_PERMUT P, plural unsigned prm(plural unsigned tadr, int mode, void *vp)); extern plural unsigned* blp_DestAdMat(BL_PERMUT P); extern plural unsigned blp_pDestAd(BL_PERMUT P, plural unsigned srcadr); extern unsigned blp_sDestAd(BL_PERMUT P, unsigned srcadr); extern int pmr_blpCheck(BL_PERMUT P, PERMUT_ROUT R); extern int pmr_PxBlpCheck(BL_PERMUT P, plural unsigned prm(plural unsigned tadr, int mode, void *vp), PERMUT_ROUT R); extern void pmr_free(PERMUT_ROUT R); extern void permut(void *arr, int blksiz, int nblk, int direction, PERMUT_ROUT R); extern void permut32(void *arr, int dir, PERMUT_ROUT R); extern void permut64(void *arr, int dir, PERMUT_ROUT R); /* Inline functions: ----------------*/ /* Compute (plural or singular) destination from (pl. or sing.) source */ #define blp_DestAd(dest,A,src) { \ register unsigned ipiv, *pmat; \ register int i; \ pmat = A->pmat; \ for (i=0,dest=0,ipiv=1; inbits; i++,ipiv<<=1,pmat++) \ if((src)&ipiv) dest ^= *pmat; \ dest ^= *pmat; \ } #endif