Scalable SOP manipulation package.

This commit is contained in:
Alan Mishchenko
2015-03-23 18:40:38 +07:00
parent 5f77e7ae8f
commit efdd26f86d
14 changed files with 1532 additions and 42 deletions
+1 -1
View File
@@ -124,7 +124,7 @@ static inline Vec_Bit_t * Vec_BitStartFull( int nSize )
{
Vec_Bit_t * p;
nSize = (nSize >> 5) + ((nSize & 31) > 0);
p = Vec_BitAlloc( nSize );
p = Vec_BitAlloc( nSize * 32 );
p->nSize = nSize * 32;
memset( p->pArray, 0xff, sizeof(int) * nSize );
return p;
+12
View File
@@ -225,6 +225,18 @@ static inline Vec_Flt_t * Vec_FltDupArray( Vec_Flt_t * pVec )
SeeAlso []
***********************************************************************/
static inline void Vec_FltZero( Vec_Flt_t * p )
{
p->pArray = NULL;
p->nSize = 0;
p->nCap = 0;
}
static inline void Vec_FltErase( Vec_Flt_t * p )
{
ABC_FREE( p->pArray );
p->nSize = 0;
p->nCap = 0;
}
static inline void Vec_FltFree( Vec_Flt_t * p )
{
ABC_FREE( p->pArray );
+47
View File
@@ -1338,6 +1338,16 @@ static inline void Vec_IntSort( Vec_Int_t * p, int fReverse )
qsort( (void *)p->pArray, p->nSize, sizeof(int),
(int (*)(const void *, const void *)) Vec_IntSortCompare1 );
}
static inline void Vec_IntSortPairs( Vec_Int_t * p, int fReverse )
{
assert( Vec_IntSize(p) % 2 == 0 );
if ( fReverse )
qsort( (void *)p->pArray, p->nSize/2, 2*sizeof(int),
(int (*)(const void *, const void *)) Vec_IntSortCompare2 );
else
qsort( (void *)p->pArray, p->nSize/2, 2*sizeof(int),
(int (*)(const void *, const void *)) Vec_IntSortCompare1 );
}
/**Function*************************************************************
@@ -1392,6 +1402,36 @@ static inline int Vec_IntCountUnique( Vec_Int_t * p )
return Count;
}
/**Function*************************************************************
Synopsis [Counts the number of unique pairs.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
static inline int Vec_IntUniqifyPairs( Vec_Int_t * p )
{
int i, k, RetValue;
assert( p->nSize % 2 == 0 );
if ( p->nSize < 4 )
return 0;
Vec_IntSortPairs( p, 0 );
for ( i = k = 1; i < p->nSize/2; i++ )
if ( p->pArray[2*i] != p->pArray[2*(i-1)] || p->pArray[2*i+1] != p->pArray[2*(i-1)+1] )
{
p->pArray[2*k] = p->pArray[2*i];
p->pArray[2*k+1] = p->pArray[2*i+1];
k++;
}
RetValue = p->nSize/2 - k;
p->nSize = 2*k;
return RetValue;
}
/**Function*************************************************************
Synopsis [Counts the number of unique entries.]
@@ -1891,6 +1931,13 @@ static inline void Vec_IntAppend( Vec_Int_t * vVec1, Vec_Int_t * vVec2 )
Vec_IntForEachEntry( vVec2, Entry, i )
Vec_IntPush( vVec1, Entry );
}
static inline void Vec_IntAppendSkip( Vec_Int_t * vVec1, Vec_Int_t * vVec2, int iVar )
{
int Entry, i;
Vec_IntForEachEntry( vVec2, Entry, i )
if ( i != iVar )
Vec_IntPush( vVec1, Entry );
}
ABC_NAMESPACE_HEADER_END
+19
View File
@@ -959,6 +959,25 @@ static inline word Vec_WrdSum( Vec_Wrd_t * p )
return Counter;
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
static inline int Vec_WrdCountZero( Vec_Wrd_t * p )
{
int i, Counter = 0;
for ( i = 0; i < p->nSize; i++ )
Counter += (p->pArray[i] == 0);
return Counter;
}
/**Function*************************************************************
Synopsis [Checks if two vectors are equal.]