mirror of https://github.com/YosysHQ/abc.git
Updating interface of "twoexaxct".
This commit is contained in:
parent
ffb0ff63fc
commit
f4d870e109
|
|
@ -10720,6 +10720,41 @@ static char * Abc_TwoExactPermEncodeFull( int * pFans, int nVars, int nNodes )
|
||||||
pPerm[Pos] = 0;
|
pPerm[Pos] = 0;
|
||||||
return pPerm;
|
return pPerm;
|
||||||
}
|
}
|
||||||
|
static int Abc_TwoExactPermParseObj( char ** ppToken, int nVars, int nNodes, int * pObj )
|
||||||
|
{
|
||||||
|
char * pToken = *ppToken;
|
||||||
|
if ( *pToken == '*' )
|
||||||
|
{
|
||||||
|
*pObj = -1;
|
||||||
|
*ppToken = pToken + 1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if ( *pToken >= 'a' && *pToken < 'a' + nVars )
|
||||||
|
{
|
||||||
|
*pObj = *pToken - 'a';
|
||||||
|
*ppToken = pToken + 1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if ( *pToken >= 'A' && *pToken <= 'Z' )
|
||||||
|
{
|
||||||
|
*pObj = nVars + *pToken - 'A';
|
||||||
|
*ppToken = pToken + 1;
|
||||||
|
return *pObj < nVars + nNodes;
|
||||||
|
}
|
||||||
|
if ( *pToken == 'N' )
|
||||||
|
{
|
||||||
|
char * pNext = pToken + 1;
|
||||||
|
int Num = 0;
|
||||||
|
if ( *pNext < '0' || *pNext > '9' )
|
||||||
|
return 0;
|
||||||
|
while ( *pNext >= '0' && *pNext <= '9' )
|
||||||
|
Num = 10 * Num + *pNext++ - '0';
|
||||||
|
*pObj = nVars + Num;
|
||||||
|
*ppToken = pNext;
|
||||||
|
return *pObj < nVars + nNodes;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
static int Abc_TwoExactPermAddDcs( int * pFans, int nVars, int nNodes, int nDcs, int nSkip, int fAll )
|
static int Abc_TwoExactPermAddDcs( int * pFans, int nVars, int nNodes, int nDcs, int nSkip, int fAll )
|
||||||
{
|
{
|
||||||
int i, k, nLetters = 0;
|
int i, k, nLetters = 0;
|
||||||
|
|
@ -11164,15 +11199,19 @@ int Abc_CommandTwoExact( Abc_Frame_t * pAbc, int argc, char ** argv )
|
||||||
}
|
}
|
||||||
if ( pPars->pPermStr )
|
if ( pPars->pPermStr )
|
||||||
{
|
{
|
||||||
int i, nEntries = 0;
|
char * pToken = pPars->pPermStr;
|
||||||
for ( i = 0; pPars->pPermStr[i]; i++ )
|
int nEntries = 0;
|
||||||
|
while ( *pToken )
|
||||||
{
|
{
|
||||||
char Sym = pPars->pPermStr[i];
|
int iObj = -1;
|
||||||
if ( Sym == '_' )
|
if ( *pToken == '_' )
|
||||||
|
{
|
||||||
|
pToken++;
|
||||||
continue;
|
continue;
|
||||||
if ( Sym != '*' && (Sym < 'a' || Sym >= 'a' + pPars->nVars) )
|
}
|
||||||
|
if ( !Abc_TwoExactPermParseObj(&pToken, pPars->nVars, pPars->nNodes, &iObj) )
|
||||||
{
|
{
|
||||||
Abc_Print( -1, "Permutation symbol \"%c\" is not one of '*', '_' or input variables 'a' through '%c'.\n", Sym, 'a' + pPars->nVars - 1 );
|
Abc_Print( -1, "Permutation should use '*', '_', input variables 'a' through '%c', or internal nodes 'A' through '%c'.\n", 'a' + pPars->nVars - 1, 'A' + Abc_MinInt(pPars->nNodes, 26) - 1 );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
nEntries++;
|
nEntries++;
|
||||||
|
|
|
||||||
|
|
@ -704,16 +704,42 @@ static inline int Exa_ManPermFanin( Exa_Man_t * p, int i, int k )
|
||||||
{
|
{
|
||||||
char * pPermStr = p->pPars->pPermStr;
|
char * pPermStr = p->pPars->pPermStr;
|
||||||
int iTarget = 2 * (i - p->nVars) + (k ? 0 : 1);
|
int iTarget = 2 * (i - p->nVars) + (k ? 0 : 1);
|
||||||
int nSeen = 0, s;
|
int nSeen = 0;
|
||||||
|
char * pToken;
|
||||||
if ( p->pPars->pPermFans )
|
if ( p->pPars->pPermFans )
|
||||||
return p->pPars->pPermFans[iTarget];
|
return p->pPars->pPermFans[iTarget];
|
||||||
assert( pPermStr != NULL );
|
assert( pPermStr != NULL );
|
||||||
for ( s = 0; pPermStr[s]; s++ )
|
for ( pToken = pPermStr; *pToken; )
|
||||||
{
|
{
|
||||||
if ( pPermStr[s] == '_' )
|
int iObj = -2;
|
||||||
|
if ( *pToken == '_' )
|
||||||
|
{
|
||||||
|
pToken++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
if ( *pToken == '*' )
|
||||||
|
{
|
||||||
|
iObj = -1;
|
||||||
|
pToken++;
|
||||||
|
}
|
||||||
|
else if ( *pToken >= 'a' && *pToken < 'a' + p->nVars )
|
||||||
|
iObj = *pToken++ - 'a';
|
||||||
|
else if ( *pToken >= 'A' && *pToken <= 'Z' )
|
||||||
|
iObj = p->nVars + (*pToken++ - 'A');
|
||||||
|
else if ( *pToken == 'N' )
|
||||||
|
{
|
||||||
|
char * pNext = pToken + 1;
|
||||||
|
int Num = 0;
|
||||||
|
assert( *pNext >= '0' && *pNext <= '9' );
|
||||||
|
while ( *pNext >= '0' && *pNext <= '9' )
|
||||||
|
Num = 10 * Num + *pNext++ - '0';
|
||||||
|
iObj = p->nVars + Num;
|
||||||
|
pToken = pNext;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
assert( 0 );
|
||||||
if ( nSeen++ == iTarget )
|
if ( nSeen++ == iTarget )
|
||||||
return pPermStr[s] == '*' ? -1 : pPermStr[s] - 'a';
|
return iObj;
|
||||||
}
|
}
|
||||||
assert( 0 );
|
assert( 0 );
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -741,6 +767,7 @@ static void Exa_ManPrintFixedPerm( Exa_Man_t * p )
|
||||||
static void Exa_ManPrintPerm( Exa_Man_t * p )
|
static void Exa_ManPrintPerm( Exa_Man_t * p )
|
||||||
{
|
{
|
||||||
int i, k, iVar;
|
int i, k, iVar;
|
||||||
|
char Name[16];
|
||||||
printf( "The variable permutation is \"" );
|
printf( "The variable permutation is \"" );
|
||||||
for ( i = p->nVars; i < p->nObjs; i++ )
|
for ( i = p->nVars; i < p->nObjs; i++ )
|
||||||
{
|
{
|
||||||
|
|
@ -749,7 +776,7 @@ static void Exa_ManPrintPerm( Exa_Man_t * p )
|
||||||
for ( k = 1; k >= 0; k-- )
|
for ( k = 1; k >= 0; k-- )
|
||||||
{
|
{
|
||||||
iVar = Exa_ManFindFanin( p, i, k );
|
iVar = Exa_ManFindFanin( p, i, k );
|
||||||
printf( "%c", iVar < p->nVars ? 'a' + iVar : '*' );
|
printf( "%s", Exa_ManObjName(p, iVar, Name) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf( "\".\n" );
|
printf( "\".\n" );
|
||||||
|
|
|
||||||
|
|
@ -719,16 +719,42 @@ static inline int Exa_ManPermFanin( Exa_Man_t * p, int i, int k )
|
||||||
{
|
{
|
||||||
char * pPermStr = p->pPars->pPermStr;
|
char * pPermStr = p->pPars->pPermStr;
|
||||||
int iTarget = 2 * (i - p->nVars) + (k ? 0 : 1);
|
int iTarget = 2 * (i - p->nVars) + (k ? 0 : 1);
|
||||||
int nSeen = 0, s;
|
int nSeen = 0;
|
||||||
|
char * pToken;
|
||||||
if ( p->pPars->pPermFans )
|
if ( p->pPars->pPermFans )
|
||||||
return p->pPars->pPermFans[iTarget];
|
return p->pPars->pPermFans[iTarget];
|
||||||
assert( pPermStr != NULL );
|
assert( pPermStr != NULL );
|
||||||
for ( s = 0; pPermStr[s]; s++ )
|
for ( pToken = pPermStr; *pToken; )
|
||||||
{
|
{
|
||||||
if ( pPermStr[s] == '_' )
|
int iObj = -2;
|
||||||
|
if ( *pToken == '_' )
|
||||||
|
{
|
||||||
|
pToken++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
if ( *pToken == '*' )
|
||||||
|
{
|
||||||
|
iObj = -1;
|
||||||
|
pToken++;
|
||||||
|
}
|
||||||
|
else if ( *pToken >= 'a' && *pToken < 'a' + p->nVars )
|
||||||
|
iObj = *pToken++ - 'a';
|
||||||
|
else if ( *pToken >= 'A' && *pToken <= 'Z' )
|
||||||
|
iObj = p->nVars + (*pToken++ - 'A');
|
||||||
|
else if ( *pToken == 'N' )
|
||||||
|
{
|
||||||
|
char * pNext = pToken + 1;
|
||||||
|
int Num = 0;
|
||||||
|
assert( *pNext >= '0' && *pNext <= '9' );
|
||||||
|
while ( *pNext >= '0' && *pNext <= '9' )
|
||||||
|
Num = 10 * Num + *pNext++ - '0';
|
||||||
|
iObj = p->nVars + Num;
|
||||||
|
pToken = pNext;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
assert( 0 );
|
||||||
if ( nSeen++ == iTarget )
|
if ( nSeen++ == iTarget )
|
||||||
return pPermStr[s] == '*' ? -1 : pPermStr[s] - 'a';
|
return iObj;
|
||||||
}
|
}
|
||||||
assert( 0 );
|
assert( 0 );
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -756,6 +782,7 @@ static void Exa_ManPrintFixedPerm( Exa_Man_t * p )
|
||||||
static void Exa_ManPrintPerm( Exa_Man_t * p )
|
static void Exa_ManPrintPerm( Exa_Man_t * p )
|
||||||
{
|
{
|
||||||
int i, k, iVar;
|
int i, k, iVar;
|
||||||
|
char Name[16];
|
||||||
printf( "The variable permutation is \"" );
|
printf( "The variable permutation is \"" );
|
||||||
for ( i = p->nVars; i < p->nObjs; i++ )
|
for ( i = p->nVars; i < p->nObjs; i++ )
|
||||||
{
|
{
|
||||||
|
|
@ -764,7 +791,7 @@ static void Exa_ManPrintPerm( Exa_Man_t * p )
|
||||||
for ( k = 1; k >= 0; k-- )
|
for ( k = 1; k >= 0; k-- )
|
||||||
{
|
{
|
||||||
iVar = Exa_ManFindFanin( p, i, k );
|
iVar = Exa_ManFindFanin( p, i, k );
|
||||||
printf( "%c", iVar < p->nVars ? 'a' + iVar : '*' );
|
printf( "%s", Exa_ManObjName(p, iVar, Name) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf( "\".\n" );
|
printf( "\".\n" );
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue