/* * Copyright 1995, 1996 Perforce Software. All rights reserved. */ /* * VarArray.h - manage a list of void *'s * * Class Defined: * * VarArray - list of void *'s * VVarArray - VarArray with virtual Compare/Destroy functions * * Public methods: * * VarArray::Clear() - zero out count for values * VarArray::Count() - return count of elements in array * VarArray::ElemTab() - return a pointer to the array * VarArray::Get(i) - return a pointer to slot i in the array * VarArray::Edit(i) - return a editable pointer to slot i in the array * VarArray::Move(i,j) - move element i to j * VarArray::Remove(i) - remove element i * VarArray::Put(v) - set a new slot to v * VarArray::WillGrow(i) - returns size of new vararray if it * would have to grow in the next i rows. * * VVarArray::Diff() - subtract/compare/add to VarArrays * OpDiff - substract two VarArrays and drop duplicates * OpIntersect - compare VarArrays to find matches * OpMerge - add two VarArrays, eliminating duplicates * * VVarArray::Sort() - Qsort of the VarArray in place * * Private methods: * * VarArray::New() - return a pointer to a new slot in the array */ class VarArray { public: VarArray(); VarArray( int max ); ~VarArray(); void Clear() { numElems = 0; } int Count() const { return numElems; } void ** ElemTab() { return elems; } void * Get( int i ) const { return i<numElems ? elems[i]:0; } void * Edit( int i ) { return i<numElems ? elems[i]:0; } void Move( int i, int j ) { elems[j] = elems[i]; } void Remove( int i ); void * Put( void *v ) { return *New() = v; } void SetCount( int i ) { numElems = i; } int WillGrow( int interval ); void Exchange( int i, int j ) { void *t = elems[j]; elems[j] = elems[i]; elems[i] = t; } void Swap( int i, int j ) { Exchange( i, j ); } void Swap( int i, int j, int count ) { while( count-- > 0 ) Exchange( i++, j++ ); } private: friend class VVarArray; void ** New(); int maxElems; int numElems; void **elems; } ; class VVarArray : public VarArray { public: enum Op { OpDiff, OpIntersect, OpMerge }; virtual ~VVarArray() {}; virtual int Compare( const void *, const void * ) const = 0; virtual void Destroy( void * ) const = 0; void Diff( Op op, VarArray &that ); void Sort() { Sort( 0, Count() ); } void Uniq(); private: void Sort( int l, int u ); int Med3( int i, int j, int k ) const; int Compare( int i, int j ) const { return Compare( Get( i ), Get( j ) ); } } ;
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 15071 | alan_petersen |
Populate -o //guest/perforce_software/piper/... //guest/alan_petersen/piper/.... |
||
//guest/perforce_software/piper/mac/main/Perforce/p4api/Headers/vararray.h | |||||
#1 | 11252 | alan_petersen | Rename/move file(s) | ||
//guest/perforce_software/piper/mac/Perforce/p4api/Headers/vararray.h | |||||
#1 | 10744 | alan_petersen | Rename/move file(s) | ||
//guest/perforce_software/piper/Perforce/p4api/Headers/vararray.h | |||||
#1 | 8919 | Matt Attaway | Initial add of Piper, a lightweight Perforce client for artists and designers. |