ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
mapperVec.c
Go to the documentation of this file.
1
18
19#include "mapperInt.h"
20
22
23
27
28static int Map_NodeVecCompareLevels( Map_Node_t ** pp1, Map_Node_t ** pp2 );
29
33
46{
49 if ( nCap > 0 && nCap < 16 )
50 nCap = 16;
51 p->nSize = 0;
52 p->nCap = nCap;
53 p->pArray = p->nCap? ABC_ALLOC( Map_Node_t *, p->nCap ) : NULL;
54 return p;
55}
56
69{
70 if ( p == NULL )
71 return;
72 ABC_FREE( p->pArray );
73 ABC_FREE( p );
74}
75
88{
89 Map_NodeVec_t * pNew = Map_NodeVecAlloc( p->nSize );
90 memcpy( pNew->pArray, p->pArray, sizeof(int) * p->nSize );
91 pNew->nSize = p->nSize;
92 return pNew;
93}
94
107{
108 return p->pArray;
109}
110
123{
124 return p->nSize;
125}
126
138void Map_NodeVecGrow( Map_NodeVec_t * p, int nCapMin )
139{
140 if ( p->nCap >= nCapMin )
141 return;
142 p->pArray = ABC_REALLOC( Map_Node_t *, p->pArray, nCapMin );
143 p->nCap = nCapMin;
144}
145
157void Map_NodeVecShrink( Map_NodeVec_t * p, int nSizeNew )
158{
159 assert( p->nSize >= nSizeNew );
160 p->nSize = nSizeNew;
161}
162
175{
176 p->nSize = 0;
177}
178
191{
192 if ( p->nSize == p->nCap )
193 {
194 if ( p->nCap < 16 )
195 Map_NodeVecGrow( p, 16 );
196 else
197 Map_NodeVecGrow( p, 2 * p->nCap );
198 }
199 p->pArray[p->nSize++] = Entry;
200}
201
214{
215 int i;
216 for ( i = 0; i < p->nSize; i++ )
217 if ( p->pArray[i] == Entry )
218 return 1;
219 Map_NodeVecPush( p, Entry );
220 return 0;
221}
222
235{
236 return p->pArray[--p->nSize];
237}
238
251{
252 int i;
253 for ( i = 0; i < p->nSize; i++ )
254 if ( p->pArray[i] == Entry )
255 break;
256 assert( i < p->nSize );
257 for ( i++; i < p->nSize; i++ )
258 p->pArray[i-1] = p->pArray[i];
259 p->nSize--;
260}
261
274{
275 assert( i >= 0 && i < p->nSize );
276 p->pArray[i] = Entry;
277}
278
291{
292 assert( i >= 0 && i < p->nSize );
293 return p->pArray[i];
294}
295
308{
309 qsort( (void *)p->pArray, (size_t)p->nSize, sizeof(Map_Node_t *),
310 (int (*)(const void *, const void *)) Map_NodeVecCompareLevels );
311}
312
324int Map_NodeVecCompareLevels( Map_Node_t ** pp1, Map_Node_t ** pp2 )
325{
326 int Level1 = Map_Regular(*pp1)->Level;
327 int Level2 = Map_Regular(*pp2)->Level;
328 if ( Level1 < Level2 )
329 return -1;
330 if ( Level1 > Level2 )
331 return 1;
332 if ( Map_Regular(*pp1)->Num < Map_Regular(*pp2)->Num )
333 return -1;
334 if ( Map_Regular(*pp1)->Num > Map_Regular(*pp2)->Num )
335 return 1;
336 return 0;
337}
338
342
344
#define ABC_ALLOC(type, num)
Definition abc_global.h:264
#define ABC_REALLOC(type, obj, num)
Definition abc_global.h:268
#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
void Map_NodeVecRemove(Map_NodeVec_t *p, Map_Node_t *Entry)
Definition mapperVec.c:250
int Map_NodeVecPushUnique(Map_NodeVec_t *p, Map_Node_t *Entry)
Definition mapperVec.c:213
Map_NodeVec_t * Map_NodeVecAlloc(int nCap)
FUNCTION DEFINITIONS ///.
Definition mapperVec.c:45
Map_NodeVec_t * Map_NodeVecDup(Map_NodeVec_t *p)
Definition mapperVec.c:87
void Map_NodeVecSortByLevel(Map_NodeVec_t *p)
Definition mapperVec.c:307
void Map_NodeVecFree(Map_NodeVec_t *p)
Definition mapperVec.c:68
void Map_NodeVecShrink(Map_NodeVec_t *p, int nSizeNew)
Definition mapperVec.c:157
void Map_NodeVecGrow(Map_NodeVec_t *p, int nCapMin)
Definition mapperVec.c:138
int Map_NodeVecReadSize(Map_NodeVec_t *p)
Definition mapperVec.c:122
void Map_NodeVecPush(Map_NodeVec_t *p, Map_Node_t *Entry)
Definition mapperVec.c:190
Map_Node_t ** Map_NodeVecReadArray(Map_NodeVec_t *p)
Definition mapperVec.c:106
Map_Node_t * Map_NodeVecReadEntry(Map_NodeVec_t *p, int i)
Definition mapperVec.c:290
Map_Node_t * Map_NodeVecPop(Map_NodeVec_t *p)
Definition mapperVec.c:234
void Map_NodeVecWriteEntry(Map_NodeVec_t *p, int i, Map_Node_t *Entry)
Definition mapperVec.c:273
void Map_NodeVecClear(Map_NodeVec_t *p)
Definition mapperVec.c:174
#define Map_Regular(p)
Definition mapper.h:68
struct Map_NodeVecStruct_t_ Map_NodeVec_t
Definition mapper.h:42
struct Map_NodeStruct_t_ Map_Node_t
Definition mapper.h:41
Map_Node_t ** pArray
Definition mapperInt.h:305
#define assert(ex)
Definition util_old.h:213
char * memcpy()