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