ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
cutList.h
Go to the documentation of this file.
1
20
21#ifndef ABC__opt__cut__cutList_h
22#define ABC__opt__cut__cutList_h
23
24
26
27
31
35
39
46
50
54
66static inline void Cut_ListStart( Cut_List_t * p )
67{
68 int i;
69 for ( i = 1; i <= CUT_SIZE_MAX; i++ )
70 {
71 p->pHead[i] = 0;
72 p->ppTail[i] = &p->pHead[i];
73 }
74}
75
87static inline void Cut_ListAdd( Cut_List_t * p, Cut_Cut_t * pCut )
88{
89 assert( pCut->nLeaves > 0 && pCut->nLeaves <= CUT_SIZE_MAX );
90 *p->ppTail[pCut->nLeaves] = pCut;
91 p->ppTail[pCut->nLeaves] = &pCut->pNext;
92}
93
105static inline void Cut_ListAdd2( Cut_List_t * p, Cut_Cut_t * pCut )
106{
107 extern int Cut_CutCompare( Cut_Cut_t * pCut1, Cut_Cut_t * pCut2 );
108 Cut_Cut_t * pTemp, ** ppSpot;
109 assert( pCut->nLeaves > 0 && pCut->nLeaves <= CUT_SIZE_MAX );
110 if ( p->pHead[pCut->nLeaves] != NULL )
111 {
112 ppSpot = &p->pHead[pCut->nLeaves];
113 for ( pTemp = p->pHead[pCut->nLeaves]; pTemp; pTemp = pTemp->pNext )
114 {
115 if ( Cut_CutCompare(pCut, pTemp) < 0 )
116 {
117 *ppSpot = pCut;
118 pCut->pNext = pTemp;
119 return;
120 }
121 else
122 ppSpot = &pTemp->pNext;
123 }
124 }
125 *p->ppTail[pCut->nLeaves] = pCut;
126 p->ppTail[pCut->nLeaves] = &pCut->pNext;
127}
128
140static inline void Cut_ListDerive( Cut_List_t * p, Cut_Cut_t * pList )
141{
142 Cut_Cut_t * pPrev;
143 int nLeaves;
144 Cut_ListStart( p );
145 while ( pList != NULL )
146 {
147 nLeaves = pList->nLeaves;
148 p->pHead[nLeaves] = pList;
149 for ( pPrev = pList, pList = pList->pNext; pList; pPrev = pList, pList = pList->pNext )
150 if ( nLeaves < (int)pList->nLeaves )
151 break;
152 p->ppTail[nLeaves] = &pPrev->pNext;
153 pPrev->pNext = NULL;
154 }
155}
156
168static inline void Cut_ListAddList( Cut_List_t * pOld, Cut_List_t * pNew )
169{
170 int i;
171 for ( i = 1; i <= CUT_SIZE_MAX; i++ )
172 {
173 if ( pNew->pHead[i] == NULL )
174 continue;
175 *pOld->ppTail[i] = pNew->pHead[i];
176 pOld->ppTail[i] = pNew->ppTail[i];
177 }
178}
179
191static inline Cut_Cut_t * Cut_ListFinish( Cut_List_t * p )
192{
193 Cut_Cut_t * pHead = NULL, ** ppTail = &pHead;
194 int i;
195 for ( i = 1; i <= CUT_SIZE_MAX; i++ )
196 {
197 if ( p->pHead[i] == NULL )
198 continue;
199 *ppTail = p->pHead[i];
200 ppTail = p->ppTail[i];
201 }
202 *ppTail = NULL;
203 return pHead;
204}
205
206
207
209
210#endif
211
215
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
int Cut_CutCompare(Cut_Cut_t *pCut1, Cut_Cut_t *pCut2)
Definition cutCut.c:92
typedefABC_NAMESPACE_HEADER_START struct Cut_ListStruct_t_ Cut_List_t
INCLUDES ///.
Definition cutList.h:40
#define CUT_SIZE_MAX
Definition cut.h:39
struct Cut_CutStruct_t_ Cut_Cut_t
Definition cut.h:50
Cube * p
Definition exorList.c:222
unsigned nLeaves
Definition cut.h:84
Cut_Cut_t * pNext
Definition cut.h:88
Cut_Cut_t * pHead[CUT_SIZE_MAX+1]
Definition cutList.h:43
Cut_Cut_t ** ppTail[CUT_SIZE_MAX+1]
Definition cutList.h:44
#define assert(ex)
Definition util_old.h:213