ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
mvcCover.c
Go to the documentation of this file.
1
18
19#include "mvc.h"
20
22
23
27
31
44{
45 Mvc_Cover_t * p;
46 int nBitsInUnsigned;
47
48 nBitsInUnsigned = 8 * sizeof(Mvc_CubeWord_t);
49#ifdef USE_SYSTEM_MEMORY_MANAGEMENT
50 p = (Mvc_Cover_t *)ABC_ALLOC( char, sizeof(Mvc_Cover_t) );
51#else
53#endif
54 p->pMem = pMem;
55 p->nBits = nBits;
56 p->nWords = nBits / nBitsInUnsigned + (int)(nBits % nBitsInUnsigned > 0);
57 p->nUnused = p->nWords * nBitsInUnsigned - p->nBits;
58 p->lCubes.nItems = 0;
59 p->lCubes.pHead = NULL;
60 p->lCubes.pTail = NULL;
61 p->nCubesAlloc = 0;
62 p->pCubes = NULL;
63 p->pMask = NULL;
64 p->pLits = NULL;
65 return p;
66}
67
80{
81 Mvc_Cover_t * pCover;
82#ifdef USE_SYSTEM_MEMORY_MANAGEMENT
83 pCover = (Mvc_Cover_t *)ABC_ALLOC( char, sizeof(Mvc_Cover_t) );
84#else
85 pCover = (Mvc_Cover_t *)Extra_MmFixedEntryFetch( p->pMem->pManC );
86#endif
87 pCover->pMem = p->pMem;
88 pCover->nBits = p->nBits;
89 pCover->nWords = p->nWords;
90 pCover->nUnused = p->nUnused;
91 pCover->lCubes.nItems = 0;
92 pCover->lCubes.pHead = NULL;
93 pCover->lCubes.pTail = NULL;
94 pCover->nCubesAlloc = 0;
95 pCover->pCubes = NULL;
96 pCover->pMask = NULL;
97 pCover->pLits = NULL;
98 return pCover;
99}
100
113{
114 Mvc_Cover_t * pCover;
115 Mvc_Cube_t * pCube, * pCubeCopy;
116 // clone the cover
117 pCover = Mvc_CoverClone( p );
118 // copy the cube list
119 Mvc_CoverForEachCube( p, pCube )
120 {
121 pCubeCopy = Mvc_CubeDup( p, pCube );
122 Mvc_CoverAddCubeTail( pCover, pCubeCopy );
123 }
124 return pCover;
125}
126
139{
140 Mvc_Cube_t * pCube, * pCube2;
141 // recycle cube list
142 Mvc_CoverForEachCubeSafe( p, pCube, pCube2 )
143 Mvc_CubeFree( p, pCube );
144 // recycle other pointers
145 Mvc_CubeFree( p, p->pMask );
146 MEM_FREE( p->pMem, Mvc_Cube_t *, p->nCubesAlloc, p->pCubes );
147 MEM_FREE( p->pMem, int, p->nBits, p->pLits );
148
149#ifdef USE_SYSTEM_MEMORY_MANAGEMENT
150 ABC_FREE( p );
151#else
152 Extra_MmFixedEntryRecycle( p->pMem->pManC, (char *)p );
153#endif
154}
155
156
169{
170 if ( pCover->pMask == NULL )
171 pCover->pMask = Mvc_CubeAlloc( pCover );
172}
173
186{
187 if ( pCover->pLits == NULL )
188 pCover->pLits = MEM_ALLOC( pCover->pMem, int, pCover->nBits );
189}
190
203{
204 if ( pCover->nCubesAlloc < pCover->lCubes.nItems )
205 {
206 if ( pCover->nCubesAlloc > 0 )
207 MEM_FREE( pCover->pMem, Mvc_Cube_t *, pCover->nCubesAlloc, pCover->pCubes );
208 pCover->nCubesAlloc = pCover->lCubes.nItems;
209 pCover->pCubes = MEM_ALLOC( pCover->pMem, Mvc_Cube_t *, pCover->nCubesAlloc );
210 }
211}
212
225{
226 Mvc_CubeFree( pCover, pCover->pMask );
227 pCover->pMask = NULL;
228}
229
242{
243 if ( pCover->pLits )
244 {
245 MEM_FREE( pCover->pMem, int, pCover->nBits, pCover->pLits );
246 pCover->pLits = NULL;
247 }
248}
249
253
254
256
#define ABC_ALLOC(type, num)
Definition abc_global.h:264
#define ABC_FREE(obj)
Definition abc_global.h:267
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
Cube * p
Definition exorList.c:222
char * Extra_MmFixedEntryFetch(Extra_MmFixed_t *p)
void Extra_MmFixedEntryRecycle(Extra_MmFixed_t *p, char *pEntry)
void Mvc_CoverDeallocateMask(Mvc_Cover_t *pCover)
Definition mvcCover.c:224
Mvc_Cover_t * Mvc_CoverClone(Mvc_Cover_t *p)
Definition mvcCover.c:79
ABC_NAMESPACE_IMPL_START Mvc_Cover_t * Mvc_CoverAlloc(Mvc_Manager_t *pMem, int nBits)
DECLARATIONS ///.
Definition mvcCover.c:43
void Mvc_CoverAllocateArrayCubes(Mvc_Cover_t *pCover)
Definition mvcCover.c:202
void Mvc_CoverAllocateMask(Mvc_Cover_t *pCover)
Definition mvcCover.c:168
void Mvc_CoverDeallocateArrayLits(Mvc_Cover_t *pCover)
Definition mvcCover.c:241
Mvc_Cover_t * Mvc_CoverDup(Mvc_Cover_t *p)
Definition mvcCover.c:112
void Mvc_CoverFree(Mvc_Cover_t *p)
Definition mvcCover.c:138
void Mvc_CoverAllocateArrayLits(Mvc_Cover_t *pCover)
Definition mvcCover.c:185
#define Mvc_CoverAddCubeTail(pCover, pCube)
Definition mvc.h:501
struct MvcCubeStruct Mvc_Cube_t
Definition mvc.h:56
#define MEM_FREE(Manager, Type, Size, Pointer)
Definition mvc.h:568
#define MEM_ALLOC(Manager, Type, Size)
Definition mvc.h:567
struct MvcManagerStruct Mvc_Manager_t
Definition mvc.h:60
unsigned int Mvc_CubeWord_t
STRUCTURE DEFINITIONS ///.
Definition mvc.h:55
#define Mvc_CoverForEachCube(Cover, Cube)
Definition mvc.h:528
Mvc_Cube_t * Mvc_CubeAlloc(Mvc_Cover_t *pCover)
DECLARATIONS ///.
Definition mvcCube.c:43
struct MvcCoverStruct Mvc_Cover_t
Definition mvc.h:58
void Mvc_CubeFree(Mvc_Cover_t *pCover, Mvc_Cube_t *pCube)
Definition mvcCube.c:114
#define Mvc_CoverForEachCubeSafe(Cover, Cube, Cube2)
Definition mvc.h:536
Mvc_Cube_t * Mvc_CubeDup(Mvc_Cover_t *pCover, Mvc_Cube_t *pCube)
Definition mvcCube.c:94
int nCubesAlloc
Definition mvc.h:90
int nBits
Definition mvc.h:87
Mvc_Cube_t * pMask
Definition mvc.h:92
int nWords
Definition mvc.h:85
Mvc_Cube_t ** pCubes
Definition mvc.h:89
int * pLits
Definition mvc.h:91
Mvc_List_t lCubes
Definition mvc.h:88
Mvc_Manager_t * pMem
Definition mvc.h:93
int nUnused
Definition mvc.h:86
Mvc_Cube_t * pHead
Definition mvc.h:77
Mvc_Cube_t * pTail
Definition mvc.h:78
int nItems
Definition mvc.h:79
Extra_MmFixed_t * pManC
Definition mvc.h:110