abc/src/base/io/ioReadPlaMo.c
// check containment of input parts of two cubes
check containment of input parts of two cubes
check containment of input parts of two cubes
static inline int Mop_ManCheckDist1( word * pCube1, word * pCube2, int nWords )
{
    int w, fFound1 = 0;
    for ( w = 0; w < nWords; w++ )
    {
        word Xor = pCube1[w] ^ pCube2[w];
        if ( Xor == 0 ) 
            continue;
        if ( (Xor ^ (Xor >> 1)) & ABC_CONST(0x5555555555555555) ) 
            return 0;
        Xor &= (Xor >> 1) & ABC_CONST(0x5555555555555555);
        if ( Xor == 0 ) 
            return 0;
        if ( fFound1 ) 
            return 0;
        if ( (Xor & (Xor-1)) ) 
            return 0;
        fFound1 = 1; 
    }
    return fFound1;
}
static inline int Mop_ManCheckDist1 ( word * pCube1 , word * pCube2 , int nWords ) { int w , fFound1 = 0 ; for ( w = 0 ; w < nWords ; w ++ ) { word Xor = pCube1 [ w ] ^ pCube2 [ w ] ; if ( Xor == 0 ) continue ; if ( ( Xor ^ ( Xor >> 1 ) ) & ABC_CONST ( 0x5555555555555555 ) ) return 0 ; Xor &= ( Xor >> 1 ) & ABC_CONST ( 0x5555555555555555 ) ; if ( Xor == 0 ) return 0 ; if ( fFound1 ) return 0 ; if ( ( Xor & ( Xor - 1 ) ) ) return 0 ; fFound1 = 1 ; } return fFound1 ; }
check containment of input parts of two cubes
check containment of input parts of two cubes
// equal // not pairs // not equal and not distance-1 // distance-2 or more // distance-2 or more // distance 1 so far