home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
cset21v1.zip
/
IBMCPP
/
IBMCLASS
/
IITBSEQ.H
< prev
next >
Wrap
Text File
|
1993-09-22
|
6KB
|
141 lines
/*******************************************************************************
* *
* COPYRIGHT: *
* IBM C/C++ Tools Version 2.01 - Collection Class Library *
* Licensed Materials - Property of IBM *
* (C) Copyright IBM Corporation 1992, 1993 *
* All Rights Reserved *
* US Government Users Restricted Rights - Use, duplication, or disclosure *
* restricted by GSA ADP Schedule Contract with IBM Corp. *
* *
*******************************************************************************/
#ifndef _IITBSEQ_H
#define _IITBSEQ_H
#include <iglobals.h>
#include <icursor.h>
class ITabularSequenceImpl
{
public:
class Cursor
{
public:
INumber ivIndex;
IBoolean ivIsValid;
Cursor () : ivIsValid (False) {}
IBoolean operator== (Cursor const& cursor) const
{ return ivIsValid == cursor.ivIsValid &&
ivIndex == cursor.ivIndex; }
};
class Table
{
public:
INumber ivFirst;
INumber ivLast;
INumber ivNumberOfElements;
INumber ivAllocatedElements;
void *ivNodes;
IBoolean canAdd (INumber n) const
{ return ivNumberOfElements+n <= ivAllocatedElements; }
INumber pos (INumber n) const
{ return n >= ivFirst ?
n - ivFirst % ivAllocatedElements :
ivAllocatedElements -
(ivFirst - n) % ivAllocatedElements; }
INumber& decMod (INumber& n) const
{ if (n == 0) n = ivAllocatedElements;
return --n; }
INumber& incMod (INumber& n) const
{ if (++n == ivAllocatedElements) n = 0;
return n; }
INumber& addMod (INumber& n, INumber n1) const
{ n = (n + n1) % ivAllocatedElements;
return n; }
};
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 IBoolean constantFunctionIteration
(void *function,
void* env,
INumber index) const = 0;
virtual IBoolean functionIteration (void *function,
void* env,
INumber index) = 0;
virtual IBoolean constantIteratorIteration
(void* iterator,
INumber index) const = 0;
virtual IBoolean 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;
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);
IBoolean setToFirst (Cursor& cursor) const;
IBoolean setToNext (Cursor& cursor) const;
IBoolean setToLast (Cursor& cursor) const;
IBoolean setToPrevious (Cursor& cursor) const;
void setToPosition (IPosition position,
Cursor& cursor) const;
IBoolean allElementsDo (void* iterationFunction, void* env);
IBoolean allElementsDo (void *iterationFunction,
void* env) const;
IBoolean allElementsDo (void* iterator);
IBoolean 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 quicksort (void* comparisonFunction,
INumber from, INumber to);
void sort (void* comparisonFunction);
IBoolean checkIndex (INumber index) const;
IBoolean isConsistent () const;
};
#endif