21#ifndef ABC__sat__bsat__vecSet_h
22#define ABC__sat__bsat__vecSet_h
65static inline int Vec_SetHandPage(
Vec_Set_t *
p,
int h ) {
return h >>
p->nPageSize; }
66static inline int Vec_SetHandShift(
Vec_Set_t *
p,
int h ) {
return h &
p->uPageMask; }
67static inline int Vec_SetWordNum(
int nSize ) {
return (nSize + 1) >> 1; }
70static inline word * Vec_SetEntry(
Vec_Set_t *
p,
int h ) {
return p->pPages[Vec_SetHandPage(
p, h)] + Vec_SetHandShift(
p, h); }
71static inline int Vec_SetEntryNum(
Vec_Set_t *
p ) {
return p->nEntries; }
72static inline void Vec_SetWriteEntryNum(
Vec_Set_t *
p,
int i){
p->nEntries = i; }
74static inline int Vec_SetLimit(
word *
p ) {
return p[0]; }
75static inline int Vec_SetLimitS(
word *
p ) {
return p[1]; }
83static inline int Vec_SetHandCurrent(
Vec_Set_t *
p ) {
return (
p->iPage <<
p->nPageSize) + Vec_SetLimit(
p->pPages[
p->iPage]); }
84static inline int Vec_SetHandCurrentS(
Vec_Set_t *
p ) {
return (
p->iPageS <<
p->nPageSize) + Vec_SetLimitS(
p->pPages[
p->iPageS]); }
86static inline int Vec_SetHandMemory(
Vec_Set_t *
p,
int h ) {
return Vec_SetHandPage(
p, h) * (1 << (
p->nPageSize+3)) + Vec_SetHandShift(
p, h) * 8; }
87static inline int Vec_SetMemory(
Vec_Set_t *
p ) {
return Vec_SetHandMemory(
p, Vec_SetHandCurrent(
p)); }
88static inline int Vec_SetMemoryS(
Vec_Set_t *
p ) {
return Vec_SetHandMemory(
p, Vec_SetHandCurrentS(
p)); }
89static inline int Vec_SetMemoryAll(
Vec_Set_t *
p ) {
return (
p->iPage+1) * (1 << (
p->nPageSize+3)); }
96#define Vec_SetForEachEntry( Type, pVec, nSize, pSet, p, s ) \
97 for ( p = 0; p <= pVec->iPage; p++ ) \
98 for ( s = 2; s < Vec_SetLimit(pVec->pPages[p]) && ((pSet) = (Type)(pVec->pPages[p] + (s))); s += nSize )
115static inline void Vec_SetAlloc_(
Vec_Set_t *
p,
int nPageSize )
119 p->nPageSize = nPageSize;
120 p->uPageMask = (unsigned)((1 << nPageSize) - 1);
121 p->nPagesAlloc = 256;
124 p->pPages[0][0] = ~0;
125 p->pPages[0][1] = ~0;
126 Vec_SetWriteLimit(
p->pPages[0], 2 );
128static inline Vec_Set_t * Vec_SetAlloc(
int nPageSize )
132 Vec_SetAlloc_(
p, nPageSize );
147static inline void Vec_SetRestart(
Vec_Set_t *
p )
152 p->pPages[0][0] = ~0;
153 p->pPages[0][1] = ~0;
154 Vec_SetWriteLimit(
p->pPages[0], 2 );
168static inline void Vec_SetFree_(
Vec_Set_t *
p )
171 if (
p == NULL )
return;
172 for ( i = 0; i <
p->nPagesAlloc; i++ )
176static inline void Vec_SetFree(
Vec_Set_t *
p )
178 if (
p == NULL )
return;
194static inline double Vec_ReportMemory(
Vec_Set_t *
p )
197 Mem +=
p->nPagesAlloc *
sizeof(
void *);
198 Mem +=
sizeof(
word) * (
size_t)(((
word)1) <<
p->nPageSize) * (
size_t)(1 +
p->iPage);
213static inline int Vec_SetAppend(
Vec_Set_t *
p,
int * pArray,
int nSize )
215 int nWords = Vec_SetWordNum( nSize );
218 if ( Vec_SetLimit(
p->pPages[
p->iPage] ) +
nWords >= (1 <<
p->nPageSize) )
220 if ( ++
p->iPage ==
p->nPagesAlloc )
223 memset(
p->pPages +
p->nPagesAlloc, 0,
sizeof(
word *) * (
size_t)
p->nPagesAlloc );
226 if (
p->pPages[
p->iPage] == NULL )
228 Vec_SetWriteLimit(
p->pPages[
p->iPage], 2 );
229 p->pPages[
p->iPage][1] = ~0;
232 memcpy(
p->pPages[
p->iPage] + Vec_SetLimit(
p->pPages[
p->iPage]), pArray,
sizeof(
int) * (
size_t)nSize );
233 Vec_SetIncLimit(
p->pPages[
p->iPage],
nWords );
234 return Vec_SetHandCurrent(
p) -
nWords;
236static inline int Vec_SetAppendS(
Vec_Set_t *
p,
int nSize )
238 int nWords = Vec_SetWordNum( nSize );
240 if ( Vec_SetLimitS(
p->pPages[
p->iPageS] ) +
nWords >= (1 <<
p->nPageSize) )
241 Vec_SetWriteLimitS(
p->pPages[++
p->iPageS], 2 );
242 Vec_SetIncLimitS(
p->pPages[
p->iPageS],
nWords );
243 return Vec_SetHandCurrentS(
p) -
nWords;
245static inline int Vec_SetFetchH(
Vec_Set_t *
p,
int nBytes )
247 return Vec_SetAppend(
p, NULL, (nBytes + 3) >> 2);
249static inline void * Vec_SetFetch(
Vec_Set_t *
p,
int nBytes )
251 return (
void *)Vec_SetEntry(
p, Vec_SetFetchH(
p, nBytes) );
253static inline char * Vec_SetStrsav(
Vec_Set_t *
p,
char * pName )
255 char * pStr = (
char *)Vec_SetFetch(
p, (
int)
strlen(pName) + 1 );
271static inline void Vec_SetShrink(
Vec_Set_t *
p,
int h )
273 assert( h <= Vec_SetHandCurrent(
p) );
274 p->iPage = Vec_SetHandPage(
p, h);
275 Vec_SetWriteLimit(
p->pPages[
p->iPage], Vec_SetHandShift(
p, h) );
277static inline void Vec_SetShrinkS(
Vec_Set_t *
p,
int h )
279 assert( h <= Vec_SetHandCurrent(
p) );
280 p->iPageS = Vec_SetHandPage(
p, h);
281 Vec_SetWriteLimitS(
p->pPages[
p->iPageS], Vec_SetHandShift(
p, h) );
284static inline void Vec_SetShrinkLimits(
Vec_Set_t *
p )
287 for ( i = 0; i <=
p->iPage; i++ )
288 Vec_SetWriteLimit(
p->pPages[i], Vec_SetLimitS(
p->pPages[i]) );
#define ABC_ALLOC(type, num)
#define ABC_REALLOC(type, obj, num)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
unsigned __int64 word
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Set_t_ Vec_Set_t
INCLUDES ///.