93 int iTemp, iCur, iLast, k;
97 pRes[0][0] = Array[0];
102 nFactNext = nFact / n;
106 for ( iCur = 0; iCur < n; iCur++ )
110 Array[iCur] = Array[iLast];
111 Array[iLast] = iTemp;
114 pNext = pRes + (n - 1 - iCur) * nFactNext;
117 for ( k = 0; k < nFactNext; k++ )
118 pNext[k][iLast] = Array[iLast];
125 Array[iCur] = Array[iLast];
126 Array[iLast] = iTemp;
215 nMints = (1 << nVars);
218 for ( i = 0; i < nMints; i++ )
226 for ( m = 0; m < nMints; m++ )
227 if ( Truth & (1 << pMintsP[m]) )
232 for ( m = 0; m < nMints; m++ )
233 if ( Truth & (1 << m) )
234 Result |= (1 << pMintsP[m]);
293void Dar_Truth4VarNPN(
unsigned short ** puCanons,
char ** puPhases,
char ** puPerms,
unsigned char ** puMap )
295 unsigned short * uCanons;
296 unsigned char * uMap;
297 unsigned uTruth, uPhase, uPerm;
298 char ** pPerms4, * uPhases, * uPerms;
299 int nFuncs, nClasses;
303 uCanons =
ABC_CALLOC(
unsigned short, nFuncs );
311 for ( uTruth = 1; uTruth < (unsigned)nFuncs; uTruth++ )
314 if ( uCanons[uTruth] )
316 assert( uTruth > uCanons[uTruth] );
317 uMap[~uTruth & 0xFFFF] = uMap[uTruth] = uMap[uCanons[uTruth]];
320 uMap[uTruth] = nClasses++;
321 for ( i = 0; i < 16; i++ )
324 for ( k = 0; k < 24; k++ )
327 if ( uCanons[uPerm] == 0 )
329 uCanons[uPerm] = uTruth;
332 uMap[uPerm] = uMap[uTruth];
334 uPerm = ~uPerm & 0xFFFF;
335 uCanons[uPerm] = uTruth;
336 uPhases[uPerm] = i | 16;
338 uMap[uPerm] = uMap[uTruth];
341 assert( uCanons[uPerm] == uTruth );
344 for ( k = 0; k < 24; k++ )
347 if ( uCanons[uPerm] == 0 )
349 uCanons[uPerm] = uTruth;
352 uMap[uPerm] = uMap[uTruth];
354 uPerm = ~uPerm & 0xFFFF;
355 uCanons[uPerm] = uTruth;
356 uPhases[uPerm] = i | 16;
358 uMap[uPerm] = uMap[uTruth];
361 assert( uCanons[uPerm] == uTruth );
365 for ( uTruth = 1; uTruth < 0xffff; uTruth++ )
366 assert( uMap[uTruth] != 0 );
367 uPhases[(1<<16)-1] = 16;
368 assert( nClasses == 222 );