48 return pSop[0] ==
' ' && pSop[1] ==
'0';
64 return pSop[0] ==
' ' && pSop[1] ==
'1';
82 if ( (pSop[0] ==
'1' && pSop[2] ==
'1') || (pSop[0] ==
'0' && pSop[2] ==
'0') )
102 if ( (pSop[0] ==
'0' && pSop[2] ==
'1') || (pSop[0] ==
'1' && pSop[2] ==
'0') )
121 for ( pCur = pSop; *pCur !=
'\n'; pCur++ )
124 return pCur - pSop - 2;
144 for ( pCur = pSop; *pCur; pCur++ )
145 nCubes += (*pCur ==
'\n');
163 for ( pCur = pSop; *pCur; pCur++ )
165 return (
int)(*(pCur - 1) ==
'0' || *(pCur - 1) ==
'n');
184 for ( pCur = pSop; *pCur; pCur++ )
187 if ( *(pCur - 1) ==
'0' )
189 else if ( *(pCur - 1) ==
'1' )
191 else if ( *(pCur - 1) ==
'x' )
193 else if ( *(pCur - 1) ==
'n' )
214 char * pSopCover, * pCube;
217 Length = nCubes * (nVars + 3);
219 memset( pSopCover,
'-', (
size_t)Length );
220 pSopCover[Length] = 0;
222 for ( i = 0; i < nCubes; i++ )
224 pCube = pSopCover + i * (nVars + 3);
225 pCube[nVars + 0] =
' ';
226 pCube[nVars + 1] =
'1';
227 pCube[nVars + 2] =
'\n';
246 char * pSop, * pCube;
247 int i, k, Entry, Literal;
248 assert( Vec_IntSize(vCover) > 0 );
249 if ( Vec_IntSize(vCover) == 0 )
252 pSop =
Kit_PlaStart( pMan, Vec_IntSize(vCover), nVars );
256 pCube = pSop + i * (nVars + 3);
257 for ( k = 0; k < nVars; k++ )
259 Literal = 3 & (Entry >> (k << 1));
262 else if ( Literal == 2 )
264 else if ( Literal != 0 )
289 Vec_IntClear( vCover );
290 for ( pCube = pSop; *pCube; pCube += nVars + 3 )
293 for ( k = nVars - 1; k >= 0; k-- )
294 if ( pCube[k] ==
'0' )
295 Entry = (Entry << 2) | 1;
296 else if ( pCube[k] ==
'1' )
297 Entry = (Entry << 2) | 2;
298 else if ( pCube[k] ==
'-' )
299 Entry = (Entry << 2);
302 Vec_IntPush( vCover, Entry );
342 if ( Kit_TruthIsConst0(pTruth, nVars) )
344 if ( Kit_TruthIsConst1(pTruth, nVars) )
347 assert( RetValue == 0 || RetValue == 1 );
368 int i, k, Entry, Literal;
369 assert( Vec_IntSize(vCover) > 0 );
370 if ( Vec_IntSize(vCover) == 0 )
372 Vec_StrClear( vStr );
375 for ( k = 0; k < nVars; k++ )
377 Literal = 3 & (Entry >> (k << 1));
379 Vec_StrPush( vStr,
'0' );
380 else if ( Literal == 2 )
381 Vec_StrPush( vStr,
'1' );
382 else if ( Literal == 0 )
383 Vec_StrPush( vStr,
'-' );
387 Vec_StrPush( vStr,
' ' );
388 Vec_StrPush( vStr,
'1' );
389 Vec_StrPush( vStr,
'\n' );
391 Vec_StrPush( vStr,
'\0' );
392 return Vec_StrArray( vStr );
411 assert( RetValue == 0 || RetValue == 1 );
413 if ( Vec_IntSize(vCover) == 0 || (Vec_IntSize(vCover) == 1 && Vec_IntEntry(vCover,0) == 0) )
416 Vec_StrClear( vStr );
417 Vec_StrAppend( vStr, (Vec_IntSize(vCover) == 0) ?
" 0\n" :
" 1\n" );
418 Vec_StrPush( vStr,
'\0' );
419 return Vec_StrArray( vStr );
426 else if ( nVars == 6 )
444 static ABC_UINT64_T Truth[8] = {
454 ABC_UINT64_T valueAnd, valueOr = Truth[6];
459 for ( v = 0; v < nVars; v++,
lit++ )
461 if ( pSop[
lit] ==
'1' )
462 valueAnd &= Truth[v];
463 else if ( pSop[
lit] ==
'0' )
464 valueAnd &= ~Truth[v];
465 else if ( pSop[
lit] !=
'-' )
474 }
while ( pSop[
lit] );
498 int v, c, nCubes, fCompl = 0;
501 if (
strlen(pSop) % (nVars + 3) != 0 )
503 printf(
"Kit_PlaToTruth(): SOP is represented incorrectly.\n" );
507 Kit_TruthClear( pTruth, nVars );
508 nCubes =
strlen(pSop) / (nVars + 3);
509 for ( c = 0; c < nCubes; c++ )
511 fCompl = (pSop[nVars+1] ==
'0');
512 Kit_TruthFill( pTemp, nVars );
514 for ( v = 0; v < nVars; v++ )
515 if ( pSop[v] ==
'1' )
516 Kit_TruthAnd( pTemp, pTemp, (
unsigned *)Vec_PtrEntry(vVars, v), nVars );
517 else if ( pSop[v] ==
'0' )
518 Kit_TruthSharp( pTemp, pTemp, (
unsigned *)Vec_PtrEntry(vVars, v), nVars );
520 Kit_TruthOr( pTruth, pTruth, pTemp, nVars );
525 Kit_TruthNot( pTruth, pTruth, nVars );
#define ABC_CONST(number)
PARAMETERS ///.
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
char * Aig_MmFlexEntryFetch(Aig_MmFlex_t *p, int nBytes)
struct Aig_MmFlex_t_ Aig_MmFlex_t
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Vec_Str_t_ Vec_Str_t
void Kit_PlaToIsop(char *pSop, Vec_Int_t *vCover)
void Kit_PlaComplement(char *pSop)
int Kit_PlaIsBuf(char *pSop)
int Kit_PlaIsInv(char *pSop)
char * Kit_PlaFromTruth(void *p, unsigned *pTruth, int nVars, Vec_Int_t *vCover)
ABC_UINT64_T Kit_PlaToTruth6(char *pSop, int nVars)
char * Kit_PlaFromTruthNew(unsigned *pTruth, int nVars, Vec_Int_t *vCover, Vec_Str_t *vStr)
int Kit_PlaIsConst1(char *pSop)
char * Kit_PlaFromIsop(Vec_Str_t *vStr, int nVars, Vec_Int_t *vCover)
char * Kit_PlaStart(void *p, int nCubes, int nVars)
int Kit_PlaGetVarNum(char *pSop)
int Kit_PlaGetCubeNum(char *pSop)
char * Kit_PlaCreateFromIsop(void *p, int nVars, Vec_Int_t *vCover)
char * Kit_PlaStoreSop(void *p, char *pSop)
int Kit_PlaIsComplement(char *pSop)
ABC_NAMESPACE_IMPL_START int Kit_PlaIsConst0(char *pSop)
DECLARATIONS ///.
void Kit_PlaToTruth(char *pSop, int nVars, Vec_Ptr_t *vVars, unsigned *pTemp, unsigned *pTruth)
int Kit_TruthIsop(unsigned *puTruth, int nVars, Vec_Int_t *vMemory, int fTryBoth)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.