ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
mapperUtils.c
Go to the documentation of this file.
1
18
19#include "mapperInt.h"
20
22
23
27
28#define MAP_CO_LIST_SIZE 5
29
30static int Map_MappingCountLevels_rec( Map_Node_t * pNode );
31static float Map_MappingSetRefsAndArea_rec( Map_Man_t * pMan, Map_Node_t * pNode );
32static float Map_MappingSetRefsAndSwitch_rec( Map_Man_t * pMan, Map_Node_t * pNode );
33static float Map_MappingSetRefsAndWire_rec( Map_Man_t * pMan, Map_Node_t * pNode );
34static void Map_MappingDfsCuts_rec( Map_Node_t * pNode, Map_NodeVec_t * vNodes );
35static float Map_MappingArea_rec( Map_Man_t * pMan, Map_Node_t * pNode, Map_NodeVec_t * vNodes );
36static int Map_MappingCompareOutputDelay( Map_Node_t ** ppNode1, Map_Node_t ** ppNode2 );
37static void Map_MappingFindLatest( Map_Man_t * p, int * pNodes, int nNodesMax );
38static unsigned Map_MappingExpandTruth_rec( unsigned uTruth, int nVars );
39static int Map_MappingCountUsedNodes( Map_Man_t * pMan, int fChoices );
40
44
56void Map_MappingDfs_rec( Map_Node_t * pNode, Map_NodeVec_t * vNodes, int fCollectEquiv )
57{
58 assert( !Map_IsComplement(pNode) );
59 if ( pNode->fMark0 )
60 return;
61 // visit the transitive fanin
62 if ( Map_NodeIsAnd(pNode) )
63 {
64 Map_MappingDfs_rec( Map_Regular(pNode->p1), vNodes, fCollectEquiv );
65 Map_MappingDfs_rec( Map_Regular(pNode->p2), vNodes, fCollectEquiv );
66 }
67 // visit the equivalent nodes
68 if ( fCollectEquiv && pNode->pNextE )
69 Map_MappingDfs_rec( pNode->pNextE, vNodes, fCollectEquiv );
70 // make sure the node is not visited through the equivalent nodes
71 assert( pNode->fMark0 == 0 );
72 // mark the node as visited
73 pNode->fMark0 = 1;
74 // add the node to the list
75 Map_NodeVecPush( vNodes, pNode );
76}
77Map_NodeVec_t * Map_MappingDfs( Map_Man_t * pMan, int fCollectEquiv )
78{
79 Map_NodeVec_t * vNodes;
80 int i;
81 // perform the traversal
82 vNodes = Map_NodeVecAlloc( 100 );
83 for ( i = 0; i < pMan->nOutputs; i++ )
84 Map_MappingDfs_rec( Map_Regular(pMan->pOutputs[i]), vNodes, fCollectEquiv );
85 for ( i = 0; i < vNodes->nSize; i++ )
86 vNodes->pArray[i]->fMark0 = 0;
87// for ( i = 0; i < pMan->nOutputs; i++ )
88// Map_MappingUnmark_rec( Map_Regular(pMan->pOutputs[i]) );
89 return vNodes;
90}
91
106{
107 int i, LevelsMax, LevelsCur;
108 // perform the traversal
109 LevelsMax = -1;
110 for ( i = 0; i < pMan->nOutputs; i++ )
111 {
112 LevelsCur = Map_MappingCountLevels_rec( Map_Regular(pMan->pOutputs[i]) );
113 if ( LevelsMax < LevelsCur )
114 LevelsMax = LevelsCur;
115 }
116 for ( i = 0; i < pMan->nOutputs; i++ )
117 Map_MappingUnmark_rec( Map_Regular(pMan->pOutputs[i]) );
118 return LevelsMax;
119}
120
132int Map_MappingCountLevels_rec( Map_Node_t * pNode )
133{
134 int Level1, Level2;
135 assert( !Map_IsComplement(pNode) );
136 if ( !Map_NodeIsAnd(pNode) )
137 {
138 pNode->Level = 0;
139 return 0;
140 }
141 if ( pNode->fMark0 )
142 return pNode->Level;
143 pNode->fMark0 = 1;
144 // visit the transitive fanin
145 Level1 = Map_MappingCountLevels_rec( Map_Regular(pNode->p1) );
146 Level2 = Map_MappingCountLevels_rec( Map_Regular(pNode->p2) );
147 // set the number of levels
148 pNode->Level = 1 + ((Level1>Level2)? Level1: Level2);
149 return pNode->Level;
150}
151
164{
165 int i;
166 for ( i = 0; i < pMan->nOutputs; i++ )
167 Map_MappingUnmark_rec( Map_Regular(pMan->pOutputs[i]) );
168}
169
182{
183 assert( !Map_IsComplement(pNode) );
184 if ( pNode->fMark0 == 0 )
185 return;
186 pNode->fMark0 = 0;
187 if ( !Map_NodeIsAnd(pNode) )
188 return;
191 // visit the equivalent nodes
192 if ( pNode->pNextE )
194}
195
208{
209 assert( !Map_IsComplement(pNode) );
210 if ( pNode->fMark0 == 1 )
211 return;
212 pNode->fMark0 = 1;
213 if ( !Map_NodeIsAnd(pNode) )
214 return;
215 // visit the transitive fanin of the selected cut
218}
219
231int Map_MappingCompareOutputDelay( Map_Node_t ** ppNode1, Map_Node_t ** ppNode2 )
232{
233 Map_Node_t * pNode1 = Map_Regular(*ppNode1);
234 Map_Node_t * pNode2 = Map_Regular(*ppNode2);
235 int fPhase1 = !Map_IsComplement(*ppNode1);
236 int fPhase2 = !Map_IsComplement(*ppNode2);
237 float Arrival1 = pNode1->tArrival[fPhase1].Worst;
238 float Arrival2 = pNode2->tArrival[fPhase2].Worst;
239 if ( Arrival1 < Arrival2 )
240 return -1;
241 if ( Arrival1 > Arrival2 )
242 return 1;
243 return 0;
244}
245
257void Map_MappingFindLatest( Map_Man_t * p, int * pNodes, int nNodesMax )
258{
259 int nNodes, i, k, v;
260 assert( p->nOutputs >= nNodesMax );
261 pNodes[0] = 0;
262 nNodes = 1;
263 for ( i = 1; i < p->nOutputs; i++ )
264 {
265 for ( k = nNodes - 1; k >= 0; k-- )
266 if ( Map_MappingCompareOutputDelay( &p->pOutputs[pNodes[k]], &p->pOutputs[i] ) >= 0 )
267 break;
268 if ( k == nNodesMax - 1 )
269 continue;
270 if ( nNodes < nNodesMax )
271 nNodes++;
272 for ( v = nNodes - 1; v > k+1; v-- )
273 pNodes[v] = pNodes[v-1];
274 pNodes[k+1] = i;
275 }
276}
277
290{
291 int pSorted[MAP_CO_LIST_SIZE];
292 Map_Time_t * pTimes;
293 Map_Node_t * pNode;
294 int fPhase, Limit, i;
295 int MaxNameSize;
296
297 // determine the number of nodes to print
298 Limit = (p->nOutputs > MAP_CO_LIST_SIZE)? MAP_CO_LIST_SIZE : p->nOutputs;
299
300 // determine the order
301 Map_MappingFindLatest( p, pSorted, Limit );
302
303 // determine max size of the node's name
304 MaxNameSize = 0;
305 for ( i = 0; i < Limit; i++ )
306 if ( MaxNameSize < (int)strlen(p->ppOutputNames[pSorted[i]]) )
307 MaxNameSize = strlen(p->ppOutputNames[pSorted[i]]);
308
309 // print the latest outputs
310 for ( i = 0; i < Limit; i++ )
311 {
312 // get the i-th latest output
313 pNode = Map_Regular(p->pOutputs[pSorted[i]]);
314 fPhase =!Map_IsComplement(p->pOutputs[pSorted[i]]);
315 pTimes = pNode->tArrival + fPhase;
316 // print out the best arrival time
317 printf( "Output %-*s : ", MaxNameSize + 3, p->ppOutputNames[pSorted[i]] );
318 printf( "Delay = (%5.2f, %5.2f) ", (double)pTimes->Rise, (double)pTimes->Fall );
319 printf( "%s", fPhase? "POS" : "NEG" );
320 printf( "\n" );
321 }
322}
323
335void Map_MappingSetupTruthTables( unsigned uTruths[][2] )
336{
337 int m, v;
338 // set up the truth tables
339 for ( m = 0; m < 32; m++ )
340 for ( v = 0; v < 5; v++ )
341 if ( m & (1 << v) )
342 uTruths[v][0] |= (1 << m);
343 // make adjustments for the case of 6 variables
344 for ( v = 0; v < 5; v++ )
345 uTruths[v][1] = uTruths[v][0];
346 uTruths[5][0] = 0;
347 uTruths[5][1] = MAP_FULL;
348}
349
361void Map_MappingSetupTruthTablesLarge( unsigned uTruths[][32] )
362{
363 int m, v;
364 // clean everything
365 for ( m = 0; m < 32; m++ )
366 for ( v = 0; v < 10; v++ )
367 uTruths[v][m] = 0;
368 // set up the truth tables
369 for ( m = 0; m < 32; m++ )
370 for ( v = 0; v < 5; v++ )
371 if ( m & (1 << v) )
372 {
373 uTruths[v][0] |= (1 << m);
374 uTruths[v+5][m] = MAP_FULL;
375 }
376 // extend this info for the rest of the first 5 variables
377 for ( m = 0; m < 32; m++ )
378 for ( v = 0; v < 5; v++ )
379 uTruths[v][m] = uTruths[v][0];
380/*
381 // verify
382 for ( m = 0; m < 1024; m++, printf("\n") )
383 for ( v = 0; v < 10; v++ )
384 if ( Map_InfoReadVar( uTruths[v], m ) )
385 printf( "1" );
386 else
387 printf( "0" );
388*/
389}
390
402void Map_MappingSetupMask( unsigned uMask[], int nVarsMax )
403{
404 if ( nVarsMax == 6 )
405 uMask[0] = uMask[1] = MAP_FULL;
406 else
407 {
408 uMask[0] = MAP_MASK(1 << nVarsMax);
409 uMask[1] = 0;
410 }
411}
412
428{
429 Map_Node_t * pNode;
430 Map_NodeVec_t * pVec;
431 int i;
432 pVec = Map_MappingDfs( p, 0 );
433 for ( i = 0; i < pVec->nSize; i++ )
434 {
435 pNode = pVec->pArray[i];
436 if ( Map_NodeIsVar(pNode) )
437 {
438 if ( pNode->pRepr )
439 printf( "Primary input %d is a secondary node.\n", pNode->Num );
440 }
441 else if ( Map_NodeIsConst(pNode) )
442 {
443 if ( pNode->pRepr )
444 printf( "Constant 1 %d is a secondary node.\n", pNode->Num );
445 }
446 else
447 {
448 if ( pNode->pRepr )
449 printf( "Internal node %d is a secondary node.\n", pNode->Num );
450 if ( Map_Regular(pNode->p1)->pRepr )
451 printf( "Internal node %d has first fanin that is a secondary node.\n", pNode->Num );
452 if ( Map_Regular(pNode->p2)->pRepr )
453 printf( "Internal node %d has second fanin that is a secondary node.\n", pNode->Num );
454 }
455 }
456 Map_NodeVecFree( pVec );
457 return 1;
458}
459
471int Map_MappingNodeIsViolator( Map_Node_t * pNode, Map_Cut_t * pCut, int fPosPol )
472{
473 return pNode->nRefAct[fPosPol] > (int)pCut->M[fPosPol].pSuperBest->nFanLimit;
474}
475
488{
489 Map_Node_t * pNode;
490 Map_Cut_t * pCut;
491 float aFlowFlowTotal = 0;
492 int fPosPol, i;
493 for ( i = 0; i < p->nOutputs; i++ )
494 {
495 pNode = Map_Regular(p->pOutputs[i]);
496 if ( !Map_NodeIsAnd(pNode) )
497 continue;
498 fPosPol = !Map_IsComplement(p->pOutputs[i]);
499 pCut = pNode->pCutBest[fPosPol];
500 if ( pCut == NULL )
501 {
502 fPosPol = !fPosPol;
503 pCut = pNode->pCutBest[fPosPol];
504 }
505 aFlowFlowTotal += pNode->pCutBest[fPosPol]->M[fPosPol].AreaFlow;
506 }
507 return aFlowFlowTotal;
508}
509
510
523{
524 Map_Node_t * pN1 = Map_Regular(*ppS1);
525 Map_Node_t * pN2 = Map_Regular(*ppS2);
526 if ( pN1->Level > pN2->Level )
527 return -1;
528 if ( pN1->Level < pN2->Level )
529 return 1;
530 return 0;
531}
532
545{
546 qsort( (void *)vNodes->pArray, (size_t)vNodes->nSize, sizeof(Map_Node_t *),
547 (int (*)(const void *, const void *)) Map_CompareNodesByLevel );
548// assert( Map_CompareNodesByLevel( vNodes->pArray, vNodes->pArray + vNodes->nSize - 1 ) <= 0 );
549}
550
551
564{
565 if ( *ppS1 < *ppS2 )
566 return -1;
567 if ( *ppS1 > *ppS2 )
568 return 1;
569 return 0;
570}
571
584{
585 Map_Node_t * pNode;
586 int Counter, i;
587 // count the number of equal adjacent nodes
588 Counter = 0;
589 for ( i = 0; i < vNodes->nSize; i++ )
590 {
591 pNode = vNodes->pArray[i];
592 if ( !Map_NodeIsAnd(pNode) )
593 continue;
594 if ( (pNode->nRefAct[0] && pNode->pCutBest[0]) &&
595 (pNode->nRefAct[1] && pNode->pCutBest[1]) )
596 Counter++;
597 }
598 return Counter;
599}
600
601
614{
615 Map_Super_t * pSuper;
616 st__table * tTable;
617 int i, nInputs, v;
619 for ( i = 0; i < pMan->pSuperLib->nSupersAll; i++ )
620 {
621 pSuper = pMan->pSuperLib->ppSupers[i];
622 if ( pSuper->nGates == 1 )
623 {
624 // skip different versions of the same root gate
625 nInputs = Mio_GateReadPinNum(pSuper->pRoot);
626 for ( v = 0; v < nInputs; v++ )
627 if ( pSuper->pFanins[v]->Num != nInputs - 1 - v )
628 break;
629 if ( v != nInputs )
630 continue;
631// printf( "%s\n", Mio_GateReadName(pSuper->pRoot) );
632 if ( st__insert( tTable, (char *)pSuper->pRoot, (char *)pSuper ) )
633 {
634 assert( 0 );
635 }
636 }
637 }
638 return tTable;
639}
640
653{
654 int i;
655 for ( i = 0; i < p->vMapObjs->nSize; i++ )
656 p->vMapObjs->pArray[i]->pData0 = p->vMapObjs->pArray[i]->pData1 = 0;
657}
658
670void Map_MappingExpandTruth( unsigned uTruth[2], int nVars )
671{
672 assert( nVars < 7 );
673 if ( nVars == 6 )
674 return;
675 if ( nVars < 5 )
676 {
677 uTruth[0] &= MAP_MASK( (1<<nVars) );
678 uTruth[0] = Map_MappingExpandTruth_rec( uTruth[0], nVars );
679 }
680 uTruth[1] = uTruth[0];
681}
682
694unsigned Map_MappingExpandTruth_rec( unsigned uTruth, int nVars )
695{
696 assert( nVars < 6 );
697 if ( nVars == 5 )
698 return uTruth;
699 return Map_MappingExpandTruth_rec( uTruth | (uTruth << (1 << nVars)), nVars + 1 );
700}
701
714{
715 Map_Node_t * pNode;
716 float Result;
717 int i;
718 for ( i = 0; i < p->vMapObjs->nSize; i++ )
719 {
720 // skip primary inputs
721 pNode = p->vMapObjs->pArray[i];
722 if ( !Map_NodeIsAnd( pNode ) )
723 continue;
724 // skip a secondary node
725 if ( pNode->pRepr )
726 continue;
727 // count the switching nodes
728 if ( pNode->nRefAct[0] > 0 )
729 Map_TimeCutComputeArrival( pNode, pNode->pCutBest[0], 0, MAP_FLOAT_LARGE );
730 if ( pNode->nRefAct[1] > 0 )
731 Map_TimeCutComputeArrival( pNode, pNode->pCutBest[1], 1, MAP_FLOAT_LARGE );
732 }
734 printf( "Max arrival times with fanouts = %10.2f.\n", Result );
735 return Result;
736}
737
738
751{
752 int nLevelMax, i;
753 nLevelMax = 0;
754 for ( i = 0; i < pMan->nOutputs; i++ )
755 nLevelMax = ((unsigned)nLevelMax) > Map_Regular(pMan->pOutputs[i])->Level?
756 nLevelMax : Map_Regular(pMan->pOutputs[i])->Level;
757 return nLevelMax;
758}
759
771int Map_MappingUpdateLevel_rec( Map_Man_t * pMan, Map_Node_t * pNode, int fMaximum )
772{
773 Map_Node_t * pTemp;
774 int Level1, Level2, LevelE;
775 assert( !Map_IsComplement(pNode) );
776 if ( !Map_NodeIsAnd(pNode) )
777 return pNode->Level;
778 // skip the visited node
779 if ( pNode->TravId == pMan->nTravIds )
780 return pNode->Level;
781 pNode->TravId = pMan->nTravIds;
782 // compute levels of the children nodes
783 Level1 = Map_MappingUpdateLevel_rec( pMan, Map_Regular(pNode->p1), fMaximum );
784 Level2 = Map_MappingUpdateLevel_rec( pMan, Map_Regular(pNode->p2), fMaximum );
785 pNode->Level = 1 + MAP_MAX( Level1, Level2 );
786 if ( pNode->pNextE )
787 {
788 LevelE = Map_MappingUpdateLevel_rec( pMan, pNode->pNextE, fMaximum );
789 if ( fMaximum )
790 {
791 if ( pNode->Level < (unsigned)LevelE )
792 pNode->Level = LevelE;
793 }
794 else
795 {
796 if ( pNode->Level > (unsigned)LevelE )
797 pNode->Level = LevelE;
798 }
799 // set the level of all equivalent nodes to be the same minimum
800 if ( pNode->pRepr == NULL ) // the primary node
801 for ( pTemp = pNode->pNextE; pTemp; pTemp = pTemp->pNextE )
802 pTemp->Level = pNode->Level;
803 }
804 return pNode->Level;
805}
806
822{
823 int i;
824 pMan->nTravIds++;
825 for ( i = 0; i < pMan->nOutputs; i++ )
826 Map_MappingUpdateLevel_rec( pMan, Map_Regular(pMan->pOutputs[i]), 1 );
827}
828
843{
844 Map_Node_t * pNode, * pTemp;
845 int nChoiceNodes, nChoices;
846 int i, LevelMax1, LevelMax2;
847
848 // report the number of levels
849 LevelMax1 = Map_MappingGetMaxLevel( pMan );
850 pMan->nTravIds++;
851 for ( i = 0; i < pMan->nOutputs; i++ )
852 Map_MappingUpdateLevel_rec( pMan, Map_Regular(pMan->pOutputs[i]), 0 );
853 LevelMax2 = Map_MappingGetMaxLevel( pMan );
854
855 // report statistics about choices
856 nChoiceNodes = nChoices = 0;
857 for ( i = 0; i < pMan->vMapObjs->nSize; i++ )
858 {
859 pNode = pMan->vMapObjs->pArray[i];
860 if ( pNode->pRepr == NULL && pNode->pNextE != NULL )
861 { // this is a choice node = the primary node that has equivalent nodes
862 nChoiceNodes++;
863 for ( pTemp = pNode; pTemp; pTemp = pTemp->pNextE )
864 nChoices++;
865 }
866 }
867 printf( "Maximum level: Original = %d. Reduced due to choices = %d.\n", LevelMax1, LevelMax2 );
868 printf( "Choice stats: Choice nodes = %d. Total choices = %d.\n", nChoiceNodes, nChoices );
869}
870
882int Map_MappingCountUsedNodes( Map_Man_t * pMan, int fChoices )
883{
884 Map_NodeVec_t * vNodes;
885 int Result;
886 vNodes = Map_MappingDfs( pMan, fChoices );
887 Result = vNodes->nSize;
888 Map_NodeVecFree( vNodes );
889 return Result;
890}
891
895
896
898
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
Cube * p
Definition exorList.c:222
#define MAP_MAX(a, b)
Definition mapperInt.h:58
#define MAP_MASK(n)
INCLUDES ///.
Definition mapperInt.h:52
Map_NodeVec_t * Map_NodeVecAlloc(int nCap)
FUNCTION DEFINITIONS ///.
Definition mapperVec.c:45
void Map_NodeVecFree(Map_NodeVec_t *p)
Definition mapperVec.c:68
float Map_TimeComputeArrivalMax(Map_Man_t *p)
DECLARATIONS ///.
Definition mapperTime.c:45
void Map_NodeVecPush(Map_NodeVec_t *p, Map_Node_t *Entry)
Definition mapperVec.c:190
#define MAP_FULL
Definition mapperInt.h:53
#define MAP_FLOAT_LARGE
Definition mapperInt.h:61
float Map_TimeCutComputeArrival(Map_Node_t *pNode, Map_Cut_t *pCut, int fPhase, float tWorstCaseLimit)
Definition mapperTime.c:75
int Map_MappingNodeIsViolator(Map_Node_t *pNode, Map_Cut_t *pCut, int fPosPol)
void Map_MappingSetupTruthTablesLarge(unsigned uTruths[][32])
void Map_MappingMark_rec(Map_Node_t *pNode)
int Map_MappingGetMaxLevel(Map_Man_t *pMan)
#define MAP_CO_LIST_SIZE
DECLARATIONS ///.
Definition mapperUtils.c:28
void Map_MappingSetupMask(unsigned uMask[], int nVarsMax)
void Map_MappingExpandTruth(unsigned uTruth[2], int nVars)
int Map_MappingCountLevels(Map_Man_t *pMan)
int Map_MappingCountDoubles(Map_Man_t *pMan, Map_NodeVec_t *vNodes)
void Map_MappingPrintOutputArrivals(Map_Man_t *p)
float Map_MappingGetAreaFlow(Map_Man_t *p)
Map_NodeVec_t * Map_MappingDfs(Map_Man_t *pMan, int fCollectEquiv)
Definition mapperUtils.c:77
st__table * Map_CreateTableGate2Super(Map_Man_t *pMan)
void Map_MappingSetChoiceLevels(Map_Man_t *pMan)
void Map_MappingReportChoices(Map_Man_t *pMan)
void Map_ManCleanData(Map_Man_t *p)
void Map_MappingDfs_rec(Map_Node_t *pNode, Map_NodeVec_t *vNodes, int fCollectEquiv)
FUNCTION DEFINITIONS ///.
Definition mapperUtils.c:56
void Map_MappingUnmark_rec(Map_Node_t *pNode)
void Map_MappingSortByLevel(Map_Man_t *pMan, Map_NodeVec_t *vNodes)
void Map_MappingSetupTruthTables(unsigned uTruths[][2])
int Map_CompareNodesByLevel(Map_Node_t **ppS1, Map_Node_t **ppS2)
int Map_MappingUpdateLevel_rec(Map_Man_t *pMan, Map_Node_t *pNode, int fMaximum)
void Map_MappingUnmark(Map_Man_t *pMan)
int Map_CompareNodesByPointer(Map_Node_t **ppS1, Map_Node_t **ppS2)
float Map_MappingComputeDelayWithFanouts(Map_Man_t *p)
int Map_ManCheckConsistency(Map_Man_t *p)
typedefABC_NAMESPACE_HEADER_START struct Map_ManStruct_t_ Map_Man_t
INCLUDES ///.
Definition mapper.h:40
int Map_NodeIsConst(Map_Node_t *p)
struct Map_CutStruct_t_ Map_Cut_t
Definition mapper.h:43
struct Map_SuperStruct_t_ Map_Super_t
Definition mapper.h:45
struct Map_TimeStruct_t_ Map_Time_t
Definition mapper.h:49
int Map_NodeIsVar(Map_Node_t *p)
#define Map_Regular(p)
Definition mapper.h:68
int Map_NodeIsAnd(Map_Node_t *p)
#define Map_IsComplement(p)
GLOBAL VARIABLES ///.
Definition mapper.h:67
struct Map_NodeVecStruct_t_ Map_NodeVec_t
Definition mapper.h:42
struct Map_NodeStruct_t_ Map_Node_t
Definition mapper.h:41
int Mio_GateReadPinNum(Mio_Gate_t *pGate)
Definition mioApi.c:177
int st__strhash(const char *string, int modulus)
Definition st.c:449
st__table * st__init_table(st__compare_func_type compare, st__hash_func_type hash)
Definition st.c:72
int st__insert(st__table *table, const char *key, char *value)
Definition st.c:171
Map_Match_t M[2]
Definition mapperInt.h:275
Map_Super_t * pSuperBest
Definition mapperInt.h:257
Map_Cut_t * pCutBest[2]
Definition mapperInt.h:243
Map_Node_t * pNextE
Definition mapperInt.h:227
Map_Node_t * pRepr
Definition mapperInt.h:228
Map_Time_t tArrival[2]
Definition mapperInt.h:239
Map_Node_t * p2
Definition mapperInt.h:226
Map_Node_t * p1
Definition mapperInt.h:225
Map_Node_t ** pArray
Definition mapperInt.h:305
Mio_Gate_t * pRoot
Definition mapperInt.h:292
Map_Super_t * pFanins[6]
Definition mapperInt.h:291
Definition st.h:52
#define assert(ex)
Definition util_old.h:213
int strlen()
int strcmp()