53 if (
p->pChunkLast == NULL || nBytes >
p->nChunkSize -
p->nChunkUsed )
55 pMem = (
char *)
ABC_ALLOC(
char,
p->nChunkSize );
56 *(
char **)pMem =
p->pChunkLast;
58 p->nChunkUsed =
sizeof(
char *);
60 pMem =
p->pChunkLast +
p->nChunkUsed;
61 p->nChunkUsed += nBytes;
79 if (
p->pChunkLast == NULL )
81 for ( pMem =
p->pChunkLast; (pNext = *(
char **)pMem); pMem = pNext )
100 char * pMem, * pNext;
101 if (
p->pChunkLast == NULL )
103 Total =
p->nChunkUsed;
104 for ( pMem =
p->pChunkLast; (pNext = *(
char **)pMem); pMem = pNext )
105 Total +=
p->nChunkSize;
128 p->nChunkSize = (1<<16);
170 for ( i = pBeg + 1; i < pEnd; i++ )
173 for ( j = i; j > pBeg && *(j-1) > Lit; j-- )
178 for ( i = pBeg + 1; i < pEnd; i++ )
179 if ( lit_var(*(i-1)) == lit_var(*i) )
181 printf(
"The clause contains two literals of the same variable: %d and %d.\n", *(i-1), *i );
185 p->nVars =
STO_MAX(
p->nVars, lit_var(*(pEnd-1)) + 1 );
189 nSize =
sizeof(
Sto_Cls_t) +
sizeof(
lit) * (pEnd - pBeg);
190 nSize = (nSize /
sizeof(
char*) + ((nSize %
sizeof(
char*)) > 0)) *
sizeof(
char*);
195 pClause->
Id =
p->nClauses++;
196 pClause->
nLits = pEnd - pBeg;
201 if (
p->pHead == NULL )
203 if (
p->pTail == NULL )
207 p->pTail->pNext = pClause;
212 if ( pClause->
nLits == 0 )
216 printf(
"More than one empty clause!\n" );
290 return pPrev->
pLits[0] >> 1;
311 pFile = fopen( pFileName,
"w" );
314 printf(
"Error: Cannot open output file (%s).\n", pFileName );
318 fprintf( pFile,
"p %d %d %d %d\n",
p->nVars,
p->nClauses,
p->nRoots,
p->nClausesA );
321 for ( i = 0; i < (int)pClause->
nLits; i++ )
322 fprintf( pFile,
" %d", lit_print(pClause->
pLits[i]) );
323 fprintf( pFile,
" 0\n" );
342 int Char, Number = 0, Sign = 0;
345 Char = fgetc( pFile );
353 Char = fgetc( pFile );
359 printf(
"Error: Wrong char (%c) in the input file.\n",
Char );
366 Number = 10 * Number +
Char;
369 *pNumber = Sign? -Number : Number;
390 int nLits, nLitsAlloc, Counter, Number;
394 pFile = fopen( pFileName,
"r" );
397 printf(
"Error: Cannot open input file (%s).\n", pFileName );
409 p->nVars =
p->nClauses =
p->nRoots =
p->nClausesA = 0;
410 while ( fgets( pBuffer, 1024, pFile ) )
412 if ( pBuffer[0] ==
'c' )
414 if ( pBuffer[0] ==
'p' )
416 sscanf( pBuffer + 1,
"%d %d %d %d", &
p->nVars, &
p->nClauses, &
p->nRoots, &
p->nClausesA );
419 printf(
"Warning: Skipping line: \"%s\"\n", pBuffer );
434 if ( nLits == nLitsAlloc )
439 pLits[ nLits++ ] = lit_read(Number);
442 printf(
"Error: The last clause was not saved.\n" );
450 if (
p->nClauses != Counter )
452 printf(
"Error: The actual number of clauses (%d) is different than declared (%d).\n", Counter,
p->nClauses );
#define ABC_ALLOC(type, num)
#define ABC_REALLOC(type, obj, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Sto_ManMemoryStop(Sto_Man_t *p)
void Sto_ManMarkClausesA(Sto_Man_t *p)
int Sto_ManMemoryReport(Sto_Man_t *p)
int Sto_ManLoadNumber(FILE *pFile, int *pNumber)
Sto_Man_t * Sto_ManAlloc()
MACRO DEFINITIONS ///.
void Sto_ManDumpClauses(Sto_Man_t *p, char *pFileName)
Sto_Man_t * Sto_ManLoadClauses(char *pFileName)
int Sto_ManAddClause(Sto_Man_t *p, lit *pBeg, lit *pEnd)
int Sto_ManChangeLastClause(Sto_Man_t *p)
void Sto_ManFree(Sto_Man_t *p)
void Sto_ManMarkRoots(Sto_Man_t *p)
ABC_NAMESPACE_IMPL_START char * Sto_ManMemoryFetch(Sto_Man_t *p, int nBytes)
DECLARATIONS ///.
#define Sto_ManForEachClause(p, pCls)
#define STO_MAX(a, b)
INCLUDES ///.
struct Sto_Man_t_ Sto_Man_t
struct Sto_Cls_t_ Sto_Cls_t
BASIC TYPES ///.