00001 00021 #include "msatInt.h" 00022 00026 00027 struct Msat_Queue_t_ 00028 { 00029 int nVars; 00030 int * pVars; 00031 int iFirst; 00032 int iLast; 00033 }; 00034 00038 00050 Msat_Queue_t * Msat_QueueAlloc( int nVars ) 00051 { 00052 Msat_Queue_t * p; 00053 p = ALLOC( Msat_Queue_t, 1 ); 00054 memset( p, 0, sizeof(Msat_Queue_t) ); 00055 p->nVars = nVars; 00056 p->pVars = ALLOC( int, nVars ); 00057 return p; 00058 } 00059 00071 void Msat_QueueFree( Msat_Queue_t * p ) 00072 { 00073 free( p->pVars ); 00074 free( p ); 00075 } 00076 00088 int Msat_QueueReadSize( Msat_Queue_t * p ) 00089 { 00090 return p->iLast - p->iFirst; 00091 } 00092 00104 void Msat_QueueInsert( Msat_Queue_t * p, int Lit ) 00105 { 00106 if ( p->iLast == p->nVars ) 00107 { 00108 int i; 00109 assert( 0 ); 00110 for ( i = 0; i < p->iLast; i++ ) 00111 printf( "entry = %2d lit = %2d var = %2d \n", i, p->pVars[i], p->pVars[i]/2 ); 00112 } 00113 assert( p->iLast < p->nVars ); 00114 p->pVars[p->iLast++] = Lit; 00115 } 00116 00128 int Msat_QueueExtract( Msat_Queue_t * p ) 00129 { 00130 if ( p->iFirst == p->iLast ) 00131 return -1; 00132 return p->pVars[p->iFirst++]; 00133 } 00134 00146 void Msat_QueueClear( Msat_Queue_t * p ) 00147 { 00148 p->iFirst = 0; 00149 p->iLast = 0; 00150 } 00151 00152 00156 00157