abc/src/bool/lucky/luckyFast16.c
// It rearranges InOut (swaps and flips through rearrangement of quoters)
// It updates Info at the end
It rearranges InOut (swaps and flips through rearrangement of quoters)
It updates Info at the end
It rearranges InOut ( swaps and flips through rearrangement of quoters ) It updates Info at the end
void arrangeQuoters_superFast_moreThen5(word* pInOut, word* temp, int start,  int iQ, int jQ, int kQ, int lQ, int iVar, char * pCanonPerm, unsigned* pCanonPhase)
{
    int i,wordBlock,blockSize,shiftSize;
    word* tempPtr = temp+start;
    if(iQ == 0 && jQ == 1)
        return;
    wordBlock = (1<<(iVar-6));
    blockSize = wordBlock*sizeof(word);
    shiftSize = wordBlock*4;
    for(i=start-wordBlock;i>0;i-=shiftSize)
    {       
        tempPtr -= wordBlock;       
        memcpy(tempPtr, pInOut+i-iQ*wordBlock, blockSize);
        tempPtr -= wordBlock;
        memcpy(tempPtr, pInOut+i-jQ*wordBlock, blockSize);
        tempPtr -= wordBlock;
        memcpy(tempPtr, pInOut+i-kQ*wordBlock, blockSize);
        tempPtr -= wordBlock;
        memcpy(tempPtr, pInOut+i-lQ*wordBlock, blockSize);      
    }   
    memcpy(pInOut, temp, start*sizeof(word));
    updataInfo(iQ, jQ, iVar, pCanonPerm, pCanonPhase);
}
void arrangeQuoters_superFast_moreThen5 ( word * pInOut , word * temp , int start , int iQ , int jQ , int kQ , int lQ , int iVar , char * pCanonPerm , unsigned * pCanonPhase ) { int i , wordBlock , blockSize , shiftSize ; word * tempPtr = temp + start ; if ( iQ == 0 && jQ == 1 ) return ; wordBlock = ( 1 << ( iVar - 6 ) ) ; blockSize = wordBlock * sizeof ( word ) ; shiftSize = wordBlock * 4 ; for ( i = start - wordBlock ; i > 0 ; i -= shiftSize ) { tempPtr -= wordBlock ; memcpy ( tempPtr , pInOut + i - iQ * wordBlock , blockSize ) ; tempPtr -= wordBlock ; memcpy ( tempPtr , pInOut + i - jQ * wordBlock , blockSize ) ; tempPtr -= wordBlock ; memcpy ( tempPtr , pInOut + i - kQ * wordBlock , blockSize ) ; tempPtr -= wordBlock ; memcpy ( tempPtr , pInOut + i - lQ * wordBlock , blockSize ) ; } memcpy ( pInOut , temp , start * sizeof ( word ) ) ; updataInfo ( iQ , jQ , iVar , pCanonPerm , pCanonPhase ) ; }
It rearranges InOut (swaps and flips through rearrangement of quoters)
It updates Info at the end
It rearranges InOut ( swaps and flips through rearrangement of quoters ) It updates Info at the end
//     printf("in arrangeQuoters_superFast_moreThen5\n"); //    printf("out arrangeQuoters_superFast_moreThen5\n");