21#ifndef ABC__sat__bsat__satProof2_h
22#define ABC__sat__bsat__satProof2_h
60static inline int Prf_BitWordNum(
int nWidth ) {
return (nWidth >> 6) + ((nWidth & 63) > 0); }
61static inline int Prf_ManSize(
Prf_Man_t *
p ) {
return Vec_WrdSize(
p->vInfo ) /
p->nWords; }
62static inline void Prf_ManClearNewInfo(
Prf_Man_t *
p ) {
int w;
for ( w = 0; w <
p->nWords; w++ ) Vec_WrdPush(
p->vInfo, 0 ); }
63static inline word * Prf_ManClauseInfo(
Prf_Man_t *
p,
int Id ) {
return Vec_WrdEntryP(
p->vInfo, Id *
p->nWords ); }
87 p->vInfo = Vec_WrdAlloc( 1000 );
88 p->vSaved = Vec_IntAlloc( 1000 );
95 Vec_IntFree(
p->vSaved );
96 Vec_WrdFree(
p->vInfo );
99static inline void Prf_ManStopP(
Prf_Man_t **
p )
104static inline double Prf_ManMemory(
Prf_Man_t *
p )
106 return Vec_WrdMemory(
p->vInfo) + Vec_IntMemory(
p->vSaved) +
sizeof(
Prf_Man_t);
120static inline void Prf_ManRestart(
Prf_Man_t *
p,
Vec_Int_t * vId2Pr,
int iFirst,
int nWidth )
124 p->nWords = Prf_BitWordNum( nWidth );
127 Vec_WrdClear(
p->vInfo );
129static inline void Prf_ManGrow(
Prf_Man_t *
p,
int nWidth )
132 int i, w, nSize, nWordsNew;
135 if ( nWidth < 64 * p->
nWords )
138 nWordsNew = Abc_MaxInt( Prf_BitWordNum(nWidth), 2 *
p->nWords );
140 nSize = Prf_ManSize(
p );
141 vInfoNew = Vec_WrdAlloc( (nSize + 1000) * nWordsNew );
142 for ( i = 0; i < nSize; i++ )
144 p->pInfo = Prf_ManClauseInfo(
p, i );
145 for ( w = 0; w <
p->nWords; w++ )
146 Vec_WrdPush( vInfoNew,
p->pInfo[w] );
147 for ( ; w < nWordsNew; w++ )
148 Vec_WrdPush( vInfoNew, 0 );
150 Vec_WrdFree(
p->vInfo );
152 p->nWords = nWordsNew;
156static inline void Prf_ManShrink(
Prf_Man_t *
p,
int iClause )
159 assert( iClause -
p->iFirst >= 0 );
160 assert( iClause -
p->iFirst < Prf_ManSize(
p) );
161 Vec_WrdShrink(
p->vInfo, (iClause -
p->iFirst) *
p->nWords );
175static inline void Prf_ManAddSaved(
Prf_Man_t *
p,
int i,
int iNew )
180 if ( Vec_IntSize(
p->vSaved) == 0 )
185 Vec_IntPush(
p->vSaved, i );
187static inline void Prf_ManCompact(
Prf_Man_t *
p,
int iNew )
189 int i, w, k = 0, Entry, nSize;
192 nSize = Prf_ManSize(
p );
195 assert( Entry -
p->iFirst >= 0 && Entry -
p->iFirst < nSize );
196 p->pInfo = Prf_ManClauseInfo(
p, Entry -
p->iFirst );
197 for ( w = 0; w <
p->nWords; w++ )
198 Vec_WrdWriteEntry(
p->vInfo, k++,
p->pInfo[w] );
200 Vec_WrdShrink(
p->vInfo, k );
201 Vec_IntClear(
p->vSaved );
204 if (
p->iFirst2 == -1 )
207 p->iFirst =
p->iFirst2;
229 if ( clause_id(c) >=
p->iFirst )
233 assert( clause_id(c) -
p->iFirst >= 0 );
234 assert( clause_id(c) -
p->iFirst < Prf_ManSize(
p) );
235 pProofStart = Prf_ManClauseInfo(
p, clause_id(c) -
p->iFirst );
236 for ( w = 0; w <
p->nWords; w++ )
237 p->pInfo[w] |= pProofStart[w];
242 if ( clause_id(c) >= 0 )
245 if (
p->vId2Pr == NULL )
246 Entry = clause_id(c);
248 Entry = Vec_IntEntry(
p->vId2Pr, clause_id(c) );
252 Abc_InfoSetBit( (
unsigned *)
p->pInfo, Entry );
261 Prf_ManClearNewInfo(
p );
264 p->pInfo = Prf_ManClauseInfo(
p, Prf_ManSize(
p)-1 );
266 Prf_ManChainResolve(
p, c );
268static inline int Prf_ManChainStop(
Prf_Man_t *
p )
294 vCore = Vec_IntAlloc( 64 *
p->nWords );
295 p->pInfo = Prf_ManClauseInfo(
p, Prf_ManSize(
p)-1 );
296 if (
p->vId2Pr == NULL )
298 for ( i = 0; i < 64 *
p->nWords; i++ )
299 if ( Abc_InfoHasBit( (
unsigned *)
p->pInfo, i ) )
300 Vec_IntPush( vCore, i );
309 if ( Abc_InfoHasBit( (
unsigned *)
p->pInfo, Entry ) )
310 Vec_IntPush( vCore, i );
314 Vec_IntSort( vCore, 1 );
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
unsigned __int64 word
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Prf_Man_t_ Prf_Man_t
INCLUDES ///.
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wrd_t_ Vec_Wrd_t
INCLUDES ///.