home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (c) IBM Corp. 1992 */
- #ifndef _IITBSEQ_H
- #define _IITBSEQ_H
-
- #include <iglobals.h>
- #include <icursor.h>
-
- class ITabularSequenceImpl
- {
- public:
-
- class Cursor
- {
- public:
- INumber ivIndex;
- Boolean ivIsValid;
- Cursor () : ivIsValid (False) {}
- Boolean operator== (Cursor const& cursor)
- { return ivIsValid == cursor.ivIsValid &&
- ivIndex == cursor.ivIndex; }
- };
-
- class Table
- {
- public:
- INumber ivFirst;
- INumber ivLast;
- INumber ivNumberOfElements;
- INumber ivAllocatedElements;
- void *ivNodes;
- };
-
- class Operations : public Table
- {
- protected:
- virtual void swap (INumber index1,
- INumber index2) const = 0;
- virtual void copyFrom (INumber index,
- void const* element) const = 0;
- virtual void const* elementAt (INumber index) const = 0;
-
- virtual Boolean constantFunctionIteration
- (void *function,
- void* env,
- INumber index) const = 0;
- virtual Boolean functionIteration (void *function,
- void* env,
- INumber index) = 0;
- virtual Boolean constantIteratorIteration
- (void* iterator,
- INumber index) const = 0;
- virtual Boolean iteratorIteration (void* iterator,
- INumber index) = 0;
-
- virtual long functionComparison (void *compareFunction,
- void const* element1,
- void const* element2) = 0;
- virtual long functionComparison (void *compareFunction,
- INumber index1,
- INumber index2) = 0;
-
- virtual void blockLeft (INumber, INumber) = 0;
- virtual void blockRight (INumber, INumber) = 0;
-
- virtual void copy (Table const& from) = 0;
- virtual void expand (INumber) = 0;
-
- Boolean canAdd (INumber n)
- { return ivNumberOfElements+n <= ivAllocatedElements; }
-
- INumber& decMod (INumber& n)
- { if (n == 0) n = ivAllocatedElements;
- return --n; }
- INumber& incMod (INumber& n)
- { if (++n == ivAllocatedElements) n = 0;
- return n; }
- INumber& addMod (INumber& n, INumber n1)
- { n = (n + n1) % ivAllocatedElements;
- return n; }
- INumber& subMod (INumber& n, INumber n1)
- { n = (n - n1) % ivAllocatedElements;
- return n; }
-
- friend class ITabularSequenceImpl;
- };
-
- private :
-
- Operations *ivOps;
-
- public :
-
- ITabularSequenceImpl (Operations* ops) : ivOps (ops)
- {}
-
- void addAllFrom (ITabularSequenceImpl const& sequence);
- void removeAt (INumber& index);
- INumber removeAll (void* predicate, void* env);
- Boolean setToFirst (Cursor& cursor) const;
- Boolean setToNext (Cursor& cursor) const;
- Boolean setToLast (Cursor& cursor) const;
- Boolean setToPrevious (Cursor& cursor) const;
- void setToPosition (IPosition position,
- Cursor& cursor) const;
- Boolean allElementsDo (void* iterationFunction, void* env);
- Boolean allElementsDo (void *iterationFunction,
- void* env) const;
- Boolean allElementsDo (void* iterator);
- Boolean allElementsDo (void *iterator) const;
- void operator= (ITabularSequenceImpl const& sequence);
- long compare (ITabularSequenceImpl const& sequence,
- void* comparisonFunction) const;
- void addAsFirst (void const* element, Cursor& cursor);
- void addAsNext (void const* element, Cursor& cursor);
- void addAsLast (void const* element, Cursor& cursor);
- void addAsPrevious (void const* element, Cursor& cursor);
- void addAtPosition (IPosition position,
- void const* element,
- Cursor& cursor);
- void sort (void* comparisonFunction);
- Boolean checkIndex (INumber index) const;
- };
-
- #endif