ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
aigOrder.c
Go to the documentation of this file.
1
20
21#include "aig.h"
22
24
25
29
33
46{
47 Aig_Obj_t * pObj;
48 int i;
49 assert( Aig_ManBufNum(p) == 0 );
50 // allocate order datastructure
51 assert( p->pOrderData == NULL );
52 p->nOrderAlloc = 2 * Aig_ManObjNumMax(p);
53 if ( p->nOrderAlloc < (1<<12) )
54 p->nOrderAlloc = (1<<12);
55 p->pOrderData = ABC_ALLOC( unsigned, 2 * p->nOrderAlloc );
56 memset( p->pOrderData, 0xFF, sizeof(unsigned) * 2 * p->nOrderAlloc );
57 // add the constant node
58 p->pOrderData[0] = p->pOrderData[1] = 0;
59 p->iPrev = p->iNext = 0;
60 // add the internal nodes
61 Aig_ManForEachNode( p, pObj, i )
62 Aig_ObjOrderInsert( p, pObj->Id );
63}
64
77{
78 assert( p->pOrderData );
79 ABC_FREE( p->pOrderData );
80 p->nOrderAlloc = 0;
81 p->iPrev = p->iNext = 0;
82}
83
95void Aig_ObjOrderInsert( Aig_Man_t * p, int ObjId )
96{
97 int iPrev;
98 assert( ObjId != 0 );
99 assert( Aig_ObjIsNode( Aig_ManObj(p, ObjId) ) );
100 if ( ObjId >= p->nOrderAlloc )
101 {
102 int nOrderAlloc = 2 * ObjId;
103 p->pOrderData = ABC_REALLOC( unsigned, p->pOrderData, 2 * nOrderAlloc );
104 memset( p->pOrderData + 2 * p->nOrderAlloc, 0xFF, sizeof(unsigned) * 2 * (nOrderAlloc - p->nOrderAlloc) );
105 p->nOrderAlloc = nOrderAlloc;
106 }
107 assert( p->pOrderData[2*ObjId] == 0xFFFFFFFF ); // prev
108 assert( p->pOrderData[2*ObjId+1] == 0xFFFFFFFF ); // next
109 iPrev = p->pOrderData[2*p->iNext];
110 assert( p->pOrderData[2*iPrev+1] == (unsigned)p->iNext );
111 p->pOrderData[2*ObjId] = iPrev;
112 p->pOrderData[2*iPrev+1] = ObjId;
113 p->pOrderData[2*p->iNext] = ObjId;
114 p->pOrderData[2*ObjId+1] = p->iNext;
115 p->nAndTotal++;
116}
117
130void Aig_ObjOrderRemove( Aig_Man_t * p, int ObjId )
131{
132 int iPrev, iNext;
133 assert( ObjId != 0 );
134 assert( Aig_ObjIsNode( Aig_ManObj(p, ObjId) ) );
135 iPrev = p->pOrderData[2*ObjId];
136 iNext = p->pOrderData[2*ObjId+1];
137 p->pOrderData[2*ObjId] = 0xFFFFFFFF;
138 p->pOrderData[2*ObjId+1] = 0xFFFFFFFF;
139 p->pOrderData[2*iNext] = iPrev;
140 p->pOrderData[2*iPrev+1] = iNext;
141 if ( p->iPrev == ObjId )
142 {
143 p->nAndPrev--;
144 p->iPrev = iPrev;
145 }
146 if ( p->iNext == ObjId )
147 p->iNext = iNext;
148 p->nAndTotal--;
149}
150
163{
164 assert( p->pOrderData );
165 assert( p->pOrderData[2*p->iPrev+1] == (unsigned)p->iNext );
166 p->iPrev = p->iNext;
167 p->nAndPrev++;
168}
169
173
174
176
#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
void Aig_ObjOrderInsert(Aig_Man_t *p, int ObjId)
Definition aigOrder.c:95
void Aig_ObjOrderRemove(Aig_Man_t *p, int ObjId)
Definition aigOrder.c:130
ABC_NAMESPACE_IMPL_START void Aig_ManOrderStart(Aig_Man_t *p)
DECLARATIONS ///.
Definition aigOrder.c:45
void Aig_ObjOrderAdvance(Aig_Man_t *p)
Definition aigOrder.c:162
void Aig_ManOrderStop(Aig_Man_t *p)
Definition aigOrder.c:76
struct Aig_Obj_t_ Aig_Obj_t
Definition aig.h:51
#define Aig_ManForEachNode(p, pObj, i)
Definition aig.h:413
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Definition aig.h:50
Cube * p
Definition exorList.c:222
int Id
Definition aig.h:85
#define assert(ex)
Definition util_old.h:213
char * memset()