home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Programmierung / SOURCE.mdf / programm / windows / c / fldrvw / tarrays.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1993-04-27  |  3.0 KB  |  130 lines

  1. /********************************************************************/
  2. /*               Computer Place Application Toolkit                 */
  3. /*         Public Domain (P) 1992  The Computer Place, Inc.         */
  4. /*               tarrays.h - Toolkit array objects                  */
  5. /********************************************************************/
  6.  
  7. #include <owl.h>
  8. #include "tarrays.h"
  9. #pragma hdrstop
  10.  
  11. #include "tarrays.h"
  12.  
  13. /*******************************/
  14. /* TkArray - Array base object */
  15. /*******************************/
  16.  
  17. int TkArray::search(Pvoid key)
  18. {
  19.     int index = lowerbound;
  20.     while(index <= lastElementIndex)
  21.     {
  22.         if ( keyEqual(keyOf(objectAt(index)), key) )
  23.             return index;
  24.         index++;
  25.     }
  26.     return INT_MIN;
  27. }
  28.  
  29. int TkArray::indexOf(Object &object)
  30. {
  31.     int index = lowerbound;
  32.     while(index <= lastElementIndex)
  33.     {
  34.         if (&object == &objectAt(index))
  35.             return index;
  36.         index++;
  37.     }
  38.     return INT_MIN;
  39. }
  40.  
  41. int TkArray::keyEqual(Pvoid key1, Pvoid key2)
  42. {
  43.     return ((PObject)key1)->isEqual(*((PObject)key2));
  44. }
  45.  
  46. /************************************/
  47. /* TkUnsortedArray - Unsorted array */
  48. /************************************/
  49.  
  50. void TkUnsortedArray::insertAt(Object &object, int index)
  51. {
  52.     lastElementIndex++;
  53.     while( ptrAt( lastElementIndex ) != ZERO &&
  54.            lastElementIndex <= upperbound
  55.          )
  56.         lastElementIndex++;
  57.  
  58.     if( lastElementIndex > upperbound )
  59.         reallocate( lastElementIndex - lowerbound + 1 );
  60.  
  61.     insertEntry(index);
  62.     setData(index, &object);
  63. }
  64.  
  65. /********************************/
  66. /* TkSortedArray - Sorted array */
  67. /********************************/
  68.  
  69. int TkSortedArray::keyLessThan(Pvoid key1, Pvoid key2)
  70. {
  71.     return ((PSortable)key1)->isLessThan(*((PSortable)key2));
  72. }
  73.  
  74. int TkSortedArray::search(Pvoid key)
  75. {
  76.     int lower = lowerbound;
  77.     int upper = lastElementIndex;
  78.     if(itemsInContainer > 0 )
  79.     {
  80.         while( lower < upper )
  81.         {
  82.             int middle = (lower + upper) / 2;
  83.             if (keyEqual(keyOf(objectAt(middle)), key)) return middle;
  84.             if (keyLessThan(keyOf(objectAt(middle)), key)) lower = middle + 1;
  85.               else upper = middle - 1;
  86.         }
  87.     }
  88.     if((lower == upper) && keyEqual(keyOf(objectAt(lower)), key))
  89.         return lower;
  90.  
  91.     return INT_MIN;
  92. }
  93.  
  94. void TkSortedArray::add( Object& toAdd )
  95. {
  96.     if( toAdd.isSortable() )
  97.         {
  98.         if( lastElementIndex == upperbound )
  99.             {
  100.             reallocate( arraySize() + 1 );
  101.             }
  102.         int insertionPoint = lastElementIndex;
  103.         while( insertionPoint >= lowerbound &&
  104.                keyLessThan(keyOf(toAdd), keyOf(objectAt(insertionPoint)) )
  105.              )
  106.             insertionPoint--;
  107.         insertionPoint++;
  108.         insertEntry( insertionPoint );
  109.         setData( insertionPoint, &toAdd );
  110.         itemsInContainer++;
  111.         lastElementIndex++;
  112.         }
  113.     else
  114.         ClassLib_error( __ENOTSORT );
  115. }
  116.  
  117. void TkSortedArray::detach( Object& toDetach, DeleteType dt )
  118. {
  119.     int detachPoint = find( toDetach );
  120.     if( detachPoint != INT_MIN )
  121.         {
  122.         if( delObj(dt) )
  123.             delete ptrAt( detachPoint );
  124.         removeEntry( detachPoint );
  125.         itemsInContainer--;
  126.         if( detachPoint <= lastElementIndex )
  127.             lastElementIndex--;
  128.         }
  129. }
  130.