blob: f025920b601793fd82920ddaf69aa99a4f717a25 [file] [log] [blame]
/**CFile****************************************************************
FileName [msatQueue.c]
PackageName [A C version of SAT solver MINISAT, originally developed
in C++ by Niklas Een and Niklas Sorensson, Chalmers University of
Technology, Sweden: http://www.cs.chalmers.se/~een/Satzoo.]
Synopsis [The manager of the assignment propagation queue.]
Author [Alan Mishchenko <alanmi@eecs.berkeley.edu>]
Affiliation [UC Berkeley]
Date [Ver. 1.0. Started - January 1, 2004.]
Revision [$Id: msatQueue.c,v 1.0 2004/01/01 1:00:00 alanmi Exp $]
***********************************************************************/
#include "msatInt.h"
ABC_NAMESPACE_IMPL_START
////////////////////////////////////////////////////////////////////////
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
struct Msat_Queue_t_
{
int nVars;
int * pVars;
int iFirst;
int iLast;
};
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
/**Function*************************************************************
Synopsis [Allocates the variable propagation queue.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
Msat_Queue_t * Msat_QueueAlloc( int nVars )
{
Msat_Queue_t * p;
p = ABC_ALLOC( Msat_Queue_t, 1 );
memset( p, 0, sizeof(Msat_Queue_t) );
p->nVars = nVars;
p->pVars = ABC_ALLOC( int, nVars );
return p;
}
/**Function*************************************************************
Synopsis [Deallocate the variable propagation queue.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void Msat_QueueFree( Msat_Queue_t * p )
{
ABC_FREE( p->pVars );
ABC_FREE( p );
}
/**Function*************************************************************
Synopsis [Reads the queue size.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int Msat_QueueReadSize( Msat_Queue_t * p )
{
return p->iLast - p->iFirst;
}
/**Function*************************************************************
Synopsis [Insert an entry into the queue.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void Msat_QueueInsert( Msat_Queue_t * p, int Lit )
{
if ( p->iLast == p->nVars )
{
int i;
assert( 0 );
for ( i = 0; i < p->iLast; i++ )
printf( "entry = %2d lit = %2d var = %2d \n", i, p->pVars[i], p->pVars[i]/2 );
}
assert( p->iLast < p->nVars );
p->pVars[p->iLast++] = Lit;
}
/**Function*************************************************************
Synopsis [Extracts an entry from the queue.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int Msat_QueueExtract( Msat_Queue_t * p )
{
if ( p->iFirst == p->iLast )
return -1;
return p->pVars[p->iFirst++];
}
/**Function*************************************************************
Synopsis [Resets the queue.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void Msat_QueueClear( Msat_Queue_t * p )
{
p->iFirst = 0;
p->iLast = 0;
}
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
ABC_NAMESPACE_IMPL_END