home *** CD-ROM | disk | FTP | other *** search
- /********************************************************************/
- /* Computer Place Application Toolkit */
- /* Public Domain (P) 1992 The Computer Place, Inc. */
- /* tarrays.h - Toolkit array objects */
- /********************************************************************/
-
- #include <owl.h>
- #include "tarrays.h"
- #pragma hdrstop
-
- #include "tarrays.h"
-
- /*******************************/
- /* TkArray - Array base object */
- /*******************************/
-
- int TkArray::search(Pvoid key)
- {
- int index = lowerbound;
- while(index <= lastElementIndex)
- {
- if ( keyEqual(keyOf(objectAt(index)), key) )
- return index;
- index++;
- }
- return INT_MIN;
- }
-
- int TkArray::indexOf(Object &object)
- {
- int index = lowerbound;
- while(index <= lastElementIndex)
- {
- if (&object == &objectAt(index))
- return index;
- index++;
- }
- return INT_MIN;
- }
-
- int TkArray::keyEqual(Pvoid key1, Pvoid key2)
- {
- return ((PObject)key1)->isEqual(*((PObject)key2));
- }
-
- /************************************/
- /* TkUnsortedArray - Unsorted array */
- /************************************/
-
- void TkUnsortedArray::insertAt(Object &object, int index)
- {
- lastElementIndex++;
- while( ptrAt( lastElementIndex ) != ZERO &&
- lastElementIndex <= upperbound
- )
- lastElementIndex++;
-
- if( lastElementIndex > upperbound )
- reallocate( lastElementIndex - lowerbound + 1 );
-
- insertEntry(index);
- setData(index, &object);
- }
-
- /********************************/
- /* TkSortedArray - Sorted array */
- /********************************/
-
- int TkSortedArray::keyLessThan(Pvoid key1, Pvoid key2)
- {
- return ((PSortable)key1)->isLessThan(*((PSortable)key2));
- }
-
- int TkSortedArray::search(Pvoid key)
- {
- int lower = lowerbound;
- int upper = lastElementIndex;
- if(itemsInContainer > 0 )
- {
- while( lower < upper )
- {
- int middle = (lower + upper) / 2;
- if (keyEqual(keyOf(objectAt(middle)), key)) return middle;
- if (keyLessThan(keyOf(objectAt(middle)), key)) lower = middle + 1;
- else upper = middle - 1;
- }
- }
- if((lower == upper) && keyEqual(keyOf(objectAt(lower)), key))
- return lower;
-
- return INT_MIN;
- }
-
- void TkSortedArray::add( Object& toAdd )
- {
- if( toAdd.isSortable() )
- {
- if( lastElementIndex == upperbound )
- {
- reallocate( arraySize() + 1 );
- }
- int insertionPoint = lastElementIndex;
- while( insertionPoint >= lowerbound &&
- keyLessThan(keyOf(toAdd), keyOf(objectAt(insertionPoint)) )
- )
- insertionPoint--;
- insertionPoint++;
- insertEntry( insertionPoint );
- setData( insertionPoint, &toAdd );
- itemsInContainer++;
- lastElementIndex++;
- }
- else
- ClassLib_error( __ENOTSORT );
- }
-
- void TkSortedArray::detach( Object& toDetach, DeleteType dt )
- {
- int detachPoint = find( toDetach );
- if( detachPoint != INT_MIN )
- {
- if( delObj(dt) )
- delete ptrAt( detachPoint );
- removeEntry( detachPoint );
- itemsInContainer--;
- if( detachPoint <= lastElementIndex )
- lastElementIndex--;
- }
- }
-