00001 00021 #include "msatInt.h" 00022 00026 00030 00042 Msat_ClauseVec_t * Msat_ClauseVecAlloc( int nCap ) 00043 { 00044 Msat_ClauseVec_t * p; 00045 p = ALLOC( Msat_ClauseVec_t, 1 ); 00046 if ( nCap > 0 && nCap < 16 ) 00047 nCap = 16; 00048 p->nSize = 0; 00049 p->nCap = nCap; 00050 p->pArray = p->nCap? ALLOC( Msat_Clause_t *, p->nCap ) : NULL; 00051 return p; 00052 } 00053 00065 void Msat_ClauseVecFree( Msat_ClauseVec_t * p ) 00066 { 00067 FREE( p->pArray ); 00068 FREE( p ); 00069 } 00070 00082 Msat_Clause_t ** Msat_ClauseVecReadArray( Msat_ClauseVec_t * p ) 00083 { 00084 return p->pArray; 00085 } 00086 00098 int Msat_ClauseVecReadSize( Msat_ClauseVec_t * p ) 00099 { 00100 return p->nSize; 00101 } 00102 00114 void Msat_ClauseVecGrow( Msat_ClauseVec_t * p, int nCapMin ) 00115 { 00116 if ( p->nCap >= nCapMin ) 00117 return; 00118 p->pArray = REALLOC( Msat_Clause_t *, p->pArray, nCapMin ); 00119 p->nCap = nCapMin; 00120 } 00121 00133 void Msat_ClauseVecShrink( Msat_ClauseVec_t * p, int nSizeNew ) 00134 { 00135 assert( p->nSize >= nSizeNew ); 00136 p->nSize = nSizeNew; 00137 } 00138 00150 void Msat_ClauseVecClear( Msat_ClauseVec_t * p ) 00151 { 00152 p->nSize = 0; 00153 } 00154 00166 void Msat_ClauseVecPush( Msat_ClauseVec_t * p, Msat_Clause_t * Entry ) 00167 { 00168 if ( p->nSize == p->nCap ) 00169 { 00170 if ( p->nCap < 16 ) 00171 Msat_ClauseVecGrow( p, 16 ); 00172 else 00173 Msat_ClauseVecGrow( p, 2 * p->nCap ); 00174 } 00175 p->pArray[p->nSize++] = Entry; 00176 } 00177 00189 Msat_Clause_t * Msat_ClauseVecPop( Msat_ClauseVec_t * p ) 00190 { 00191 return p->pArray[--p->nSize]; 00192 } 00193 00205 void Msat_ClauseVecWriteEntry( Msat_ClauseVec_t * p, int i, Msat_Clause_t * Entry ) 00206 { 00207 assert( i >= 0 && i < p->nSize ); 00208 p->pArray[i] = Entry; 00209 } 00210 00222 Msat_Clause_t * Msat_ClauseVecReadEntry( Msat_ClauseVec_t * p, int i ) 00223 { 00224 assert( i >= 0 && i < p->nSize ); 00225 return p->pArray[i]; 00226 } 00227 00231 00232