summaryrefslogtreecommitdiffstats
path: root/src/misc/vec/vecPtr.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/misc/vec/vecPtr.h')
-rw-r--r--src/misc/vec/vecPtr.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/misc/vec/vecPtr.h b/src/misc/vec/vecPtr.h
index d0204ebb..a666f45f 100644
--- a/src/misc/vec/vecPtr.h
+++ b/src/misc/vec/vecPtr.h
@@ -883,6 +883,31 @@ static void Vec_PtrUniqify( Vec_Ptr_t * p, int (*Vec_PtrSortCompare)() )
p->pArray[k++] = p->pArray[i];
p->nSize = k;
}
+static void Vec_PtrUniqify2( Vec_Ptr_t * p, int (*Vec_PtrSortCompare)(), void (*Vec_PtrObjFree)(), Vec_Int_t * vCounts )
+{
+ int i, k;
+ if ( vCounts )
+ Vec_IntFill( vCounts, 1, 1 );
+ if ( p->nSize < 2 )
+ return;
+ Vec_PtrSort( p, Vec_PtrSortCompare );
+ for ( i = k = 1; i < p->nSize; i++ )
+ if ( Vec_PtrSortCompare(p->pArray+i, p->pArray+k-1) != 0 )
+ {
+ p->pArray[k++] = p->pArray[i];
+ if ( vCounts )
+ Vec_IntPush( vCounts, 1 );
+ }
+ else
+ {
+ if ( Vec_PtrObjFree )
+ Vec_PtrObjFree( p->pArray[i] );
+ if ( vCounts )
+ Vec_IntAddToEntry( vCounts, Vec_IntSize(vCounts)-1, 1 );
+ }
+ p->nSize = k;
+ assert( vCounts == NULL || Vec_IntSize(vCounts) == Vec_PtrSize(p) );
+}