home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional Developers Kit 1992 November / Disc01 / Disc01.mdf / runnable / ibmc / ibmclass / iitbseq.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-10-26  |  4.7 KB  |  125 lines

  1. /* Copyright (c) IBM Corp. 1992 */
  2. #ifndef _IITBSEQ_H
  3. #define _IITBSEQ_H
  4.  
  5. #include <iglobals.h>
  6. #include <icursor.h>
  7.  
  8. class ITabularSequenceImpl
  9. {
  10. public:
  11.  
  12.   class Cursor
  13.   {
  14.   public:
  15.     INumber ivIndex;
  16.     Boolean ivIsValid;
  17.     Cursor () : ivIsValid (False) {}
  18.     Boolean operator== (Cursor const& cursor)
  19.     { return ivIsValid == cursor.ivIsValid &&
  20.              ivIndex == cursor.ivIndex; }
  21.   };
  22.  
  23.   class Table
  24.   {
  25.   public:
  26.     INumber ivFirst;
  27.     INumber ivLast;
  28.     INumber ivNumberOfElements;
  29.     INumber ivAllocatedElements;
  30.     void *ivNodes;
  31.   };
  32.  
  33.   class Operations : public Table
  34.   {
  35.   protected:
  36.     virtual void        swap                 (INumber index1,
  37.                           INumber index2) const = 0;
  38.     virtual void        copyFrom             (INumber index,
  39.                           void const* element) const = 0;
  40.     virtual void const* elementAt            (INumber index) const = 0;
  41.  
  42.     virtual Boolean     constantFunctionIteration
  43.                                              (void *function,
  44.                                               void* env,
  45.                                               INumber index) const = 0;
  46.     virtual Boolean     functionIteration    (void *function,
  47.                                               void* env,
  48.                                               INumber index) = 0;
  49.     virtual Boolean     constantIteratorIteration
  50.                              (void* iterator,
  51.                                               INumber index) const = 0;
  52.     virtual Boolean     iteratorIteration    (void* iterator,
  53.                                               INumber index) = 0;
  54.  
  55.     virtual long        functionComparison   (void *compareFunction,
  56.                                               void const* element1,
  57.                                               void const* element2) = 0;
  58.     virtual long        functionComparison   (void *compareFunction,
  59.                                               INumber index1,
  60.                                               INumber index2) = 0;
  61.  
  62.     virtual void        blockLeft            (INumber, INumber) = 0;
  63.     virtual void        blockRight           (INumber, INumber) = 0;
  64.  
  65.     virtual void        copy                 (Table const& from) = 0;
  66.     virtual void        expand               (INumber) = 0;
  67.  
  68.             Boolean     canAdd               (INumber n)
  69.             { return ivNumberOfElements+n <= ivAllocatedElements; }
  70.  
  71.             INumber&    decMod               (INumber& n)
  72.             { if (n == 0) n = ivAllocatedElements;
  73.               return --n; }
  74.             INumber&    incMod               (INumber& n)
  75.             { if (++n == ivAllocatedElements) n = 0;
  76.               return n; }
  77.             INumber&    addMod               (INumber& n, INumber n1)
  78.             { n = (n + n1) % ivAllocatedElements;
  79.               return n; }
  80.             INumber&    subMod               (INumber& n, INumber n1)
  81.             { n = (n - n1) % ivAllocatedElements;
  82.               return n; }
  83.  
  84.     friend class ITabularSequenceImpl;
  85.   };
  86.  
  87. private :
  88.  
  89.   Operations *ivOps;
  90.  
  91. public :
  92.  
  93.           ITabularSequenceImpl        (Operations* ops) : ivOps (ops)
  94.       {}
  95.  
  96.   void    addAllFrom                  (ITabularSequenceImpl const& sequence);
  97.   void    removeAt                    (INumber& index);
  98.   INumber removeAll                   (void* predicate, void* env);
  99.   Boolean setToFirst                  (Cursor& cursor) const;
  100.   Boolean setToNext                   (Cursor& cursor) const;
  101.   Boolean setToLast                   (Cursor& cursor) const;
  102.   Boolean setToPrevious               (Cursor& cursor) const;
  103.   void    setToPosition               (IPosition position,
  104.                        Cursor& cursor) const;
  105.   Boolean allElementsDo               (void* iterationFunction, void* env);
  106.   Boolean allElementsDo               (void *iterationFunction,
  107.                        void* env) const;
  108.   Boolean allElementsDo               (void* iterator);
  109.   Boolean allElementsDo               (void *iterator) const;
  110.   void    operator=                   (ITabularSequenceImpl const& sequence);
  111.   long    compare                     (ITabularSequenceImpl const& sequence,
  112.                        void* comparisonFunction) const;
  113.   void    addAsFirst                  (void const* element, Cursor& cursor);
  114.   void    addAsNext                   (void const* element, Cursor& cursor);
  115.   void    addAsLast                   (void const* element, Cursor& cursor);
  116.   void    addAsPrevious               (void const* element, Cursor& cursor);
  117.   void    addAtPosition               (IPosition position,
  118.                        void const* element,
  119.                        Cursor& cursor);
  120.   void    sort                        (void* comparisonFunction);
  121.   Boolean checkIndex                  (INumber index) const;
  122. };
  123.  
  124. #endif
  125.