ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
vecPtr.h
Go to the documentation of this file.
1
20
21#ifndef ABC__misc__vec__vecPtr_h
22#define ABC__misc__vec__vecPtr_h
23
24
28
29#include <stdio.h>
30
32
33
37
41
42typedef struct Vec_Ptr_t_ Vec_Ptr_t;
44{
45 int nCap;
46 int nSize;
47 void ** pArray;
48};
49
53
54// iterators through entries
55#define Vec_PtrForEachEntry( Type, vVec, pEntry, i ) \
56 for ( i = 0; (i < Vec_PtrSize(vVec)) && (((pEntry) = (Type)Vec_PtrEntry(vVec, i)), 1); i++ )
57#define Vec_PtrForEachEntryStart( Type, vVec, pEntry, i, Start ) \
58 for ( i = Start; (i < Vec_PtrSize(vVec)) && (((pEntry) = (Type)Vec_PtrEntry(vVec, i)), 1); i++ )
59#define Vec_PtrForEachEntryStop( Type, vVec, pEntry, i, Stop ) \
60 for ( i = 0; (i < Stop) && (((pEntry) = (Type)Vec_PtrEntry(vVec, i)), 1); i++ )
61#define Vec_PtrForEachEntryStartStop( Type, vVec, pEntry, i, Start, Stop ) \
62 for ( i = Start; (i < Stop) && (((pEntry) = (Type)Vec_PtrEntry(vVec, i)), 1); i++ )
63#define Vec_PtrForEachEntryReverse( Type, vVec, pEntry, i ) \
64 for ( i = Vec_PtrSize(vVec) - 1; (i >= 0) && (((pEntry) = (Type)Vec_PtrEntry(vVec, i)), 1); i-- )
65#define Vec_PtrForEachEntryTwo( Type1, vVec1, Type2, vVec2, pEntry1, pEntry2, i ) \
66 for ( i = 0; (i < Vec_PtrSize(vVec1)) && (((pEntry1) = (Type1)Vec_PtrEntry(vVec1, i)), 1) && (((pEntry2) = (Type2)Vec_PtrEntry(vVec2, i)), 1); i++ )
67#define Vec_PtrForEachEntryDouble( Type1, Type2, vVec, Entry1, Entry2, i ) \
68 for ( i = 0; (i+1 < Vec_PtrSize(vVec)) && (((Entry1) = (Type1)Vec_PtrEntry(vVec, i)), 1) && (((Entry2) = (Type2)Vec_PtrEntry(vVec, i+1)), 1); i += 2 )
69
73
85static inline Vec_Ptr_t * Vec_PtrAlloc( int nCap )
86{
87 Vec_Ptr_t * p;
88 p = ABC_ALLOC( Vec_Ptr_t, 1 );
89 if ( nCap > 0 && nCap < 8 )
90 nCap = 8;
91 p->nSize = 0;
92 p->nCap = nCap;
93 p->pArray = p->nCap? ABC_ALLOC( void *, p->nCap ) : NULL;
94 return p;
95}
96static inline Vec_Ptr_t * Vec_PtrAllocExact( int nCap )
97{
98 Vec_Ptr_t * p;
99 assert( nCap >= 0 );
100 p = ABC_ALLOC( Vec_Ptr_t, 1 );
101 p->nSize = 0;
102 p->nCap = nCap;
103 p->pArray = p->nCap? ABC_ALLOC( void *, p->nCap ) : NULL;
104 return p;
105}
106
118static inline Vec_Ptr_t * Vec_PtrStart( int nSize )
119{
120 Vec_Ptr_t * p;
121 p = Vec_PtrAlloc( nSize );
122 p->nSize = nSize;
123 memset( p->pArray, 0, sizeof(void *) * (size_t)nSize );
124 return p;
125}
126
138static inline Vec_Ptr_t * Vec_PtrAllocArray( void ** pArray, int nSize )
139{
140 Vec_Ptr_t * p;
141 p = ABC_ALLOC( Vec_Ptr_t, 1 );
142 p->nSize = nSize;
143 p->nCap = nSize;
144 p->pArray = pArray;
145 return p;
146}
147
159static inline Vec_Ptr_t * Vec_PtrAllocArrayCopy( void ** pArray, int nSize )
160{
161 Vec_Ptr_t * p;
162 p = ABC_ALLOC( Vec_Ptr_t, 1 );
163 p->nSize = nSize;
164 p->nCap = nSize;
165 p->pArray = ABC_ALLOC( void *, nSize );
166 memcpy( p->pArray, pArray, sizeof(void *) * (size_t)nSize );
167 return p;
168}
169
181static inline Vec_Ptr_t * Vec_PtrDup( Vec_Ptr_t * pVec )
182{
183 Vec_Ptr_t * p;
184 p = ABC_ALLOC( Vec_Ptr_t, 1 );
185 p->nSize = pVec->nSize;
186 p->nCap = pVec->nCap;
187 p->pArray = p->nCap? ABC_ALLOC( void *, p->nCap ) : NULL;
188 memcpy( p->pArray, pVec->pArray, sizeof(void *) * (size_t)pVec->nSize );
189 return p;
190}
191static inline Vec_Ptr_t * Vec_PtrDupStr( Vec_Ptr_t * pVec )
192{
193 int i;
194 Vec_Ptr_t * p = Vec_PtrDup( pVec );
195 for ( i = 0; i < p->nSize; i++ )
196 p->pArray[i] = Abc_UtilStrsav( (char *)p->pArray[i] );
197 return p;
198}
199
211static inline Vec_Ptr_t * Vec_PtrDupArray( Vec_Ptr_t * pVec )
212{
213 Vec_Ptr_t * p;
214 p = ABC_ALLOC( Vec_Ptr_t, 1 );
215 p->nSize = pVec->nSize;
216 p->nCap = pVec->nCap;
217 p->pArray = pVec->pArray;
218 pVec->nSize = 0;
219 pVec->nCap = 0;
220 pVec->pArray = NULL;
221 return p;
222}
223
235static inline void Vec_PtrZero( Vec_Ptr_t * p )
236{
237 p->pArray = NULL;
238 p->nSize = 0;
239 p->nCap = 0;
240}
241static inline void Vec_PtrErase( Vec_Ptr_t * p )
242{
243 ABC_FREE( p->pArray );
244 p->nSize = 0;
245 p->nCap = 0;
246}
247static inline void Vec_PtrFree( Vec_Ptr_t * p )
248{
249 ABC_FREE( p->pArray );
250 ABC_FREE( p );
251}
252
264static inline void Vec_PtrFreeP( Vec_Ptr_t ** p )
265{
266 if ( *p == NULL )
267 return;
268 ABC_FREE( (*p)->pArray );
269 ABC_FREE( (*p) );
270}
271
283static inline void ** Vec_PtrReleaseArray( Vec_Ptr_t * p )
284{
285 void ** pArray = p->pArray;
286 p->nCap = 0;
287 p->nSize = 0;
288 p->pArray = NULL;
289 return pArray;
290}
291
303static inline void ** Vec_PtrArray( Vec_Ptr_t * p )
304{
305 return p->pArray;
306}
307
319static inline int Vec_PtrSize( Vec_Ptr_t * p )
320{
321 return p->nSize;
322}
323
335static inline int Vec_PtrCap( Vec_Ptr_t * p )
336{
337 return p->nCap;
338}
339
351static inline double Vec_PtrMemory( Vec_Ptr_t * p )
352{
353 return !p ? 0.0 : 1.0 * sizeof(void *) * (size_t)p->nCap + sizeof(Vec_Ptr_t);
354}
355
367static inline int Vec_PtrCountZero( Vec_Ptr_t * p )
368{
369 int i, Counter = 0;
370 for ( i = 0; i < p->nSize; i++ )
371 Counter += (p->pArray[i] == NULL);
372 return Counter;
373}
374
386static inline void * Vec_PtrEntry( Vec_Ptr_t * p, int i )
387{
388 assert( i >= 0 && i < p->nSize );
389 return p->pArray[i];
390}
391
403static inline void ** Vec_PtrEntryP( Vec_Ptr_t * p, int i )
404{
405 assert( i >= 0 && i < p->nSize );
406 return p->pArray + i;
407}
408
420static inline void Vec_PtrWriteEntry( Vec_Ptr_t * p, int i, void * Entry )
421{
422 assert( i >= 0 && i < p->nSize );
423 p->pArray[i] = Entry;
424}
425
437static inline void * Vec_PtrEntryLast( Vec_Ptr_t * p )
438{
439 assert( p->nSize > 0 );
440 return p->pArray[p->nSize-1];
441}
442
454static inline void Vec_PtrGrow( Vec_Ptr_t * p, int nCapMin )
455{
456 if ( p->nCap >= nCapMin )
457 return;
458 assert( p->nCap < ABC_INT_MAX );
459 p->pArray = ABC_REALLOC( void *, p->pArray, nCapMin );
460 p->nCap = nCapMin;
461}
462
474static inline void Vec_PtrFill( Vec_Ptr_t * p, int nSize, void * Entry )
475{
476 int i;
477 Vec_PtrGrow( p, nSize );
478 for ( i = 0; i < nSize; i++ )
479 p->pArray[i] = Entry;
480 p->nSize = nSize;
481}
482static inline void Vec_PtrFillTwo( Vec_Ptr_t * p, int nSize, void * EntryEven, void * EntryOdd )
483{
484 int i;
485 Vec_PtrGrow( p, nSize );
486 for ( i = 0; i < nSize; i++ )
487 p->pArray[i] = (i & 1) ? EntryOdd : EntryEven;
488 p->nSize = nSize;
489}
490
502static inline void Vec_PtrFillExtra( Vec_Ptr_t * p, int nSize, void * Fill )
503{
504 int i;
505 if ( nSize <= p->nSize )
506 return;
507 if ( nSize > 2 * p->nCap )
508 Vec_PtrGrow( p, nSize );
509 else if ( nSize > p->nCap )
510 Vec_PtrGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
511 for ( i = p->nSize; i < nSize; i++ )
512 p->pArray[i] = Fill;
513 p->nSize = nSize;
514}
515
527static inline void * Vec_PtrGetEntry( Vec_Ptr_t * p, int i )
528{
529 Vec_PtrFillExtra( p, i + 1, NULL );
530 return Vec_PtrEntry( p, i );
531}
532
544static inline void Vec_PtrSetEntry( Vec_Ptr_t * p, int i, void * Entry )
545{
546 Vec_PtrFillExtra( p, i + 1, NULL );
547 Vec_PtrWriteEntry( p, i, Entry );
548}
549
561static inline void Vec_PtrShrink( Vec_Ptr_t * p, int nSizeNew )
562{
563 assert( p->nSize >= nSizeNew );
564 p->nSize = nSizeNew;
565}
566
578static inline void Vec_PtrClear( Vec_Ptr_t * p )
579{
580 p->nSize = 0;
581}
582
594static inline void Vec_PtrFreeData( Vec_Ptr_t * p )
595{
596 void * pTemp; int i;
597 if ( p == NULL ) return;
598 Vec_PtrForEachEntry( void *, p, pTemp, i )
599 if ( pTemp != (void *)(ABC_PTRINT_T)1 && pTemp != (void *)(ABC_PTRINT_T)2 )
600 ABC_FREE( pTemp );
601}
602static inline void Vec_PtrFreeFree( Vec_Ptr_t * p )
603{
604 if ( p == NULL ) return;
605 Vec_PtrFreeData( p );
606 Vec_PtrFree( p );
607}
608
620static void Vec_PtrFreeFunc( Vec_Ptr_t * p, void (*pFuncItemFree)(void *) ) ___unused;
621static void Vec_PtrFreeFunc( Vec_Ptr_t * p, void (*pFuncItemFree)(void *) )
622{
623 void * pItem; int i;
624 Vec_PtrForEachEntry( void *, p, pItem, i )
625 if ( pItem ) pFuncItemFree( pItem );
626 Vec_PtrFree( p );
627}
628
640static inline void Vec_PtrCopy( Vec_Ptr_t * pDest, Vec_Ptr_t * pSour )
641{
642 pDest->nSize = 0;
643 Vec_PtrGrow( pDest, pSour->nSize );
644 memcpy( pDest->pArray, pSour->pArray, sizeof(void *) * (size_t)pSour->nSize );
645 pDest->nSize = pSour->nSize;
646}
647
659static inline void Vec_PtrPrintNames( Vec_Ptr_t * p )
660{
661 char * pName; int i;
662 printf( "Vector has %d entries: {", Vec_PtrSize(p) );
663 Vec_PtrForEachEntry( char *, p, pName, i )
664 printf( "%s ", pName );
665 printf( " }\n" );
666}
667static inline void Vec_PtrPrintPointers( Vec_Ptr_t * p )
668{
669 void * pTemp; int i;
670 printf( "Vector has %d pointer entries:\n", Vec_PtrSize(p) );
671 Vec_PtrForEachEntry( void *, p, pTemp, i )
672 printf( "%2d = %p\n", i, pTemp );
673}
674
686static inline void Vec_PtrPush( Vec_Ptr_t * p, void * Entry )
687{
688 if ( p->nSize == p->nCap )
689 {
690 if ( p->nCap < 16 )
691 Vec_PtrGrow( p, 16 );
692 else
693 Vec_PtrGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
694 }
695 p->pArray[p->nSize++] = Entry;
696}
697static inline void Vec_PtrPushTwo( Vec_Ptr_t * p, void * Entry1, void * Entry2 )
698{
699 Vec_PtrPush( p, Entry1 );
700 Vec_PtrPush( p, Entry2 );
701}
702static inline void Vec_PtrAppend( Vec_Ptr_t * vVec1, Vec_Ptr_t * vVec2 )
703{
704 void * Entry; int i;
705 Vec_PtrForEachEntry( void *, vVec2, Entry, i )
706 Vec_PtrPush( vVec1, Entry );
707}
708
720static inline void Vec_PtrPushFirst( Vec_Ptr_t * p, void * Entry )
721{
722 int i;
723 if ( p->nSize == p->nCap )
724 {
725 if ( p->nCap < 16 )
726 Vec_PtrGrow( p, 16 );
727 else
728 Vec_PtrGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
729 }
730 p->nSize++;
731 for ( i = p->nSize - 1; i >= 1; i-- )
732 p->pArray[i] = p->pArray[i-1];
733 p->pArray[0] = Entry;
734}
735
747static inline int Vec_PtrPushUnique( Vec_Ptr_t * p, void * Entry )
748{
749 int i;
750 for ( i = 0; i < p->nSize; i++ )
751 if ( p->pArray[i] == Entry )
752 return 1;
753 Vec_PtrPush( p, Entry );
754 return 0;
755}
756
768static inline void * Vec_PtrPop( Vec_Ptr_t * p )
769{
770 assert( p->nSize > 0 );
771 return p->pArray[--p->nSize];
772}
773
785static inline int Vec_PtrFind( Vec_Ptr_t * p, void * Entry )
786{
787 int i;
788 for ( i = 0; i < p->nSize; i++ )
789 if ( p->pArray[i] == Entry )
790 return i;
791 return -1;
792}
793static inline int Vec_PtrFindStr( Vec_Ptr_t * p, char * Entry )
794{
795 int i;
796 for ( i = 0; i < p->nSize; i++ )
797 if ( p->pArray[i] && !strcmp((char *)p->pArray[i], Entry) )
798 return i;
799 return -1;
800}
801
813static inline void Vec_PtrRemove( Vec_Ptr_t * p, void * Entry )
814{
815 int i;
816 // delete assuming that it is closer to the end
817 for ( i = p->nSize - 1; i >= 0; i-- )
818 if ( p->pArray[i] == Entry )
819 break;
820 assert( i >= 0 );
821/*
822 // delete assuming that it is closer to the beginning
823 for ( i = 0; i < p->nSize; i++ )
824 if ( p->pArray[i] == Entry )
825 break;
826 assert( i < p->nSize );
827*/
828 for ( i++; i < p->nSize; i++ )
829 p->pArray[i-1] = p->pArray[i];
830 p->nSize--;
831}
832
844static inline void Vec_PtrDrop( Vec_Ptr_t * p, int i )
845{
846 int k;
847 assert( i >= 0 && i < Vec_PtrSize(p) );
848 p->nSize--;
849 for ( k = i; k < p->nSize; k++ )
850 p->pArray[k] = p->pArray[k+1];
851}
852
864static inline void Vec_PtrInsert( Vec_Ptr_t * p, int iHere, void * Entry )
865{
866 int i;
867 assert( iHere >= 0 && iHere < p->nSize );
868 Vec_PtrPush( p, 0 );
869 for ( i = p->nSize - 1; i > iHere; i-- )
870 p->pArray[i] = p->pArray[i-1];
871 p->pArray[i] = Entry;
872}
873
885static inline void Vec_PtrReorder( Vec_Ptr_t * p, int nItems )
886{
887 assert( nItems < p->nSize );
888 Vec_PtrGrow( p, nItems + p->nSize );
889 memmove( (char **)p->pArray + p->nSize, p->pArray, (size_t)nItems * sizeof(void*) );
890 memmove( p->pArray, (char **)p->pArray + nItems, (size_t)p->nSize * sizeof(void*) );
891}
892
904static inline void Vec_PtrReverseOrder( Vec_Ptr_t * p )
905{
906 void * Temp;
907 int i;
908 for ( i = 0; i < p->nSize/2; i++ )
909 {
910 Temp = p->pArray[i];
911 p->pArray[i] = p->pArray[p->nSize-1-i];
912 p->pArray[p->nSize-1-i] = Temp;
913 }
914}
915
927static inline int Vec_PtrEqual( Vec_Ptr_t * p1, Vec_Ptr_t * p2 )
928{
929 int i;
930 if ( p1->nSize != p2->nSize )
931 return 0;
932 for ( i = 0; i < p1->nSize; i++ )
933 if ( p1->pArray[i] != p2->pArray[i] )
934 return 0;
935 return 1;
936}
937
949static int Vec_PtrSortComparePtr( void ** pp1, void ** pp2 )
950{
951 if ( *pp1 < *pp2 )
952 return -1;
953 if ( *pp1 > *pp2 )
954 return 1;
955 return 0;
956}
957
969static void Vec_PtrSort( Vec_Ptr_t * p, int (*Vec_PtrSortCompare)(const void *, const void *) ) ___unused;
970static void Vec_PtrSort( Vec_Ptr_t * p, int (*Vec_PtrSortCompare)(const void *, const void *) )
971{
972 if ( p->nSize < 2 )
973 return;
974 if ( Vec_PtrSortCompare == NULL )
975 qsort( (void *)p->pArray, (size_t)p->nSize, sizeof(void *),
976 (int (*)(const void *, const void *)) Vec_PtrSortComparePtr );
977 else
978 qsort( (void *)p->pArray, (size_t)p->nSize, sizeof(void *),
979 (int (*)(const void *, const void *)) Vec_PtrSortCompare );
980}
981
993static void Vec_PtrUniqify( Vec_Ptr_t * p, int (*Vec_PtrSortCompare)(const void *, const void *) ) ___unused;
994static void Vec_PtrUniqify( Vec_Ptr_t * p, int (*Vec_PtrSortCompare)(const void *, const void *) )
995{
996 int i, k;
997 if ( p->nSize < 2 )
998 return;
999 Vec_PtrSort( p, Vec_PtrSortCompare );
1000 for ( i = k = 1; i < p->nSize; i++ )
1001 if ( p->pArray[i] != p->pArray[i-1] )
1002 p->pArray[k++] = p->pArray[i];
1003 p->nSize = k;
1004}
1005static void Vec_PtrUniqify2( Vec_Ptr_t * p, int (*Vec_PtrSortCompare)(const void *, const void *), void (*Vec_PtrObjFree)(void*), Vec_Int_t * vCounts ) ___unused;
1006static void Vec_PtrUniqify2( Vec_Ptr_t * p, int (*Vec_PtrSortCompare)(const void *, const void *), void (*Vec_PtrObjFree)(void*), Vec_Int_t * vCounts )
1007{
1008 int i, k;
1009 if ( vCounts )
1010 Vec_IntFill( vCounts, 1, 1 );
1011 if ( p->nSize < 2 )
1012 return;
1013 Vec_PtrSort( p, Vec_PtrSortCompare );
1014 for ( i = k = 1; i < p->nSize; i++ )
1015 if ( Vec_PtrSortCompare(p->pArray+i, p->pArray+k-1) != 0 )
1016 {
1017 p->pArray[k++] = p->pArray[i];
1018 if ( vCounts )
1019 Vec_IntPush( vCounts, 1 );
1020 }
1021 else
1022 {
1023 if ( Vec_PtrObjFree )
1024 Vec_PtrObjFree( p->pArray[i] );
1025 if ( vCounts )
1026 Vec_IntAddToEntry( vCounts, Vec_IntSize(vCounts)-1, 1 );
1027 }
1028 p->nSize = k;
1029 assert( vCounts == NULL || Vec_IntSize(vCounts) == Vec_PtrSize(p) );
1030}
1031
1032
1033
1048static inline Vec_Ptr_t * Vec_PtrAllocSimInfo( int nEntries, int nWords )
1049{
1050 void ** pMemory;
1051 unsigned * pInfo;
1052 int i;
1053 pMemory = (void **)ABC_ALLOC( char, (sizeof(void *) + sizeof(unsigned) * (size_t)nWords) * nEntries );
1054 pInfo = (unsigned *)(pMemory + nEntries);
1055 for ( i = 0; i < nEntries; i++ )
1056 pMemory[i] = pInfo + i * nWords;
1057 return Vec_PtrAllocArray( pMemory, nEntries );
1058}
1059
1071static inline int Vec_PtrReadWordsSimInfo( Vec_Ptr_t * p )
1072{
1073 return (unsigned *)Vec_PtrEntry(p,1) - (unsigned *)Vec_PtrEntry(p,0);
1074}
1075
1087static inline void Vec_PtrCleanSimInfo( Vec_Ptr_t * vInfo, int iWord, int nWords )
1088{
1089 int i;
1090 for ( i = 0; i < vInfo->nSize; i++ )
1091 memset( (char*)Vec_PtrEntry(vInfo,i) + 4*iWord, 0, (size_t)(4*(nWords-iWord)) );
1092}
1093
1105static inline void Vec_PtrFillSimInfo( Vec_Ptr_t * vInfo, int iWord, int nWords )
1106{
1107 int i;
1108 for ( i = 0; i < vInfo->nSize; i++ )
1109 memset( (char*)Vec_PtrEntry(vInfo,i) + 4*iWord, 0xFF, (size_t)(4*(nWords-iWord)) );
1110}
1111
1123static inline void Vec_PtrDoubleSimInfo( Vec_Ptr_t * vInfo )
1124{
1125 Vec_Ptr_t * vInfoNew;
1126 int nWords;
1127 assert( Vec_PtrSize(vInfo) > 1 );
1128 // get the new array
1129 nWords = (unsigned *)Vec_PtrEntry(vInfo,1) - (unsigned *)Vec_PtrEntry(vInfo,0);
1130 vInfoNew = Vec_PtrAllocSimInfo( 2*Vec_PtrSize(vInfo), nWords );
1131 // copy the simulation info
1132 memcpy( Vec_PtrEntry(vInfoNew,0), Vec_PtrEntry(vInfo,0), (size_t)(Vec_PtrSize(vInfo) * nWords * 4) );
1133 // replace the array
1134 ABC_FREE( vInfo->pArray );
1135 vInfo->pArray = vInfoNew->pArray;
1136 vInfo->nSize *= 2;
1137 vInfo->nCap *= 2;
1138 // free the old array
1139 vInfoNew->pArray = NULL;
1140 ABC_FREE( vInfoNew );
1141}
1142
1154static inline void Vec_PtrReallocSimInfo( Vec_Ptr_t * vInfo )
1155{
1156 Vec_Ptr_t * vInfoNew;
1157 int nWords, i;
1158 assert( Vec_PtrSize(vInfo) > 1 );
1159 // get the new array
1160 nWords = (unsigned *)Vec_PtrEntry(vInfo,1) - (unsigned *)Vec_PtrEntry(vInfo,0);
1161 vInfoNew = Vec_PtrAllocSimInfo( Vec_PtrSize(vInfo), 2*nWords );
1162 // copy the simulation info
1163 for ( i = 0; i < vInfo->nSize; i++ )
1164 memcpy( Vec_PtrEntry(vInfoNew,i), Vec_PtrEntry(vInfo,i), (size_t)(nWords * 4) );
1165 // replace the array
1166 ABC_FREE( vInfo->pArray );
1167 vInfo->pArray = vInfoNew->pArray;
1168 // free the old array
1169 vInfoNew->pArray = NULL;
1170 ABC_FREE( vInfoNew );
1171}
1172
1184static inline Vec_Ptr_t * Vec_PtrAllocTruthTables( int nVars )
1185{
1186 Vec_Ptr_t * p;
1187 unsigned Masks[5] = { 0xAAAAAAAA, 0xCCCCCCCC, 0xF0F0F0F0, 0xFF00FF00, 0xFFFF0000 };
1188 unsigned * pTruth;
1189 int i, k, nWords;
1190 nWords = (nVars <= 5 ? 1 : (1 << (nVars - 5)));
1191 p = Vec_PtrAllocSimInfo( nVars, nWords );
1192 for ( i = 0; i < nVars; i++ )
1193 {
1194 pTruth = (unsigned *)p->pArray[i];
1195 if ( i < 5 )
1196 {
1197 for ( k = 0; k < nWords; k++ )
1198 pTruth[k] = Masks[i];
1199 }
1200 else
1201 {
1202 for ( k = 0; k < nWords; k++ )
1203 if ( k & (1 << (i-5)) )
1204 pTruth[k] = ~(unsigned)0;
1205 else
1206 pTruth[k] = 0;
1207 }
1208 }
1209 return p;
1210}
1211
1212
1213
1215
1216#endif
1217
1218
1222
int nWords
Definition abcNpn.c:127
#define ABC_INT_MAX
Definition abc_global.h:251
#define ABC_ALLOC(type, num)
Definition abc_global.h:264
#define ___unused
Definition abc_global.h:64
#define ABC_REALLOC(type, obj, num)
Definition abc_global.h:268
#define ABC_FREE(obj)
Definition abc_global.h:267
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Cube * p
Definition exorList.c:222
int nCap
Definition vecPtr.h:45
void ** pArray
Definition vecPtr.h:47
int nSize
Definition vecPtr.h:46
#define assert(ex)
Definition util_old.h:213
char * memcpy()
char * memset()
int strcmp()
char * memmove()
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
Definition vecPtr.h:55