home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
cset21v1.zip
/
IBMCPP
/
IBMCLASS
/
ITDSEQ.H
< prev
next >
Wrap
Text File
|
1993-09-22
|
11KB
|
287 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 _ITDSEQ_H
#define _ITDSEQ_H
#include <iglobals.h>
#include <icursor.h>
#include <iitdseq.h>
template < class Element, class ElementOps >
class IGDilutedSequence {
static ElementOps elementOps ()
{ ElementOps ops;
return ops;
}
class Node;
class Operations;
class Cursor;
friend class Node;
friend class Operations;
friend class Cursor;
class Node {
friend class IGDilutedSequence < Element, ElementOps >;
friend class Cursor;
friend class Operations;
Element ivElement;
IBoolean ivIsRemoved;
#if defined (__IBMCPP__) && defined (__DEBUG_ALLOC__)
void* operator new (size_t s, char const* fn, size_t ln)
{ return elementOps().allocate (s, fn, ln); }
void operator delete (void* p, char const* fn, size_t ln)
{ elementOps().deallocate (p, fn, ln); }
#else
void* operator new (size_t s)
{ return elementOps().allocate (s); }
void operator delete (void* p)
{ elementOps().deallocate (p); }
#endif // __IBMCPP__ && __DEBUG_ALLOC__
};
class Operations : public IDilutedSequenceImpl::Operations {
friend class IGDilutedSequence < Element, ElementOps >;
void swap (INumber index1,
INumber index2) const;
void copyFrom (INumber index,
void const* element) const;
void const* elementAt (INumber index) const;
IBoolean isRemoved (INumber index) const;
void remove (INumber index);
IBoolean setToNext (INumber& index) const;
IBoolean setToPrevious (INumber& index) const;
IBoolean constantFunctionIteration (void *function,
void* env,
INumber index) const;
IBoolean functionIteration (void *function,
void* env,
INumber index);
IBoolean constantIteratorIteration (void* iterator,
INumber index) const;
IBoolean iteratorIteration (void* iterator,
INumber index);
long functionComparison (void *compareFunction,
void const* element1,
void const* element2);
long functionComparison (void *compareFunction,
INumber index1,
INumber index2);
void blockLeft (INumber target, INumber moveCount);
void blockRight (INumber target, INumber moveCount);
void copy (IDilutedSequenceImpl::Table const&);
void expand (INumber n);
void makeFree (INumber&);
protected:
void compress ();
};
// ivOps must be initialized (and therefore declared) before ivImpl
// since the constructor of ivImpl uses ivOps.
Operations ivOps;
IDilutedSequenceImpl ivImpl;
public:
class Cursor : public ICursor {
protected:
IGDilutedSequence < Element, ElementOps > const* ivCollection;
IDilutedSequenceImpl::Cursor ivImpl;
friend class IGDilutedSequence < Element, ElementOps >;
IBoolean isFor (IGDilutedSequence < Element, ElementOps > const& c) const
{ return ivCollection == &c; }
public:
Cursor (IGDilutedSequence < Element, ElementOps > const& c)
: ivCollection (&c) {};
IBoolean setToFirst ();
IBoolean setToNext ();
IBoolean isValid () const;
void invalidate ();
Element const& element () const
{ return ivCollection->elementAt (*this); }
IBoolean setToLast ()
{ return ivCollection->setToLast (*this); }
IBoolean setToPrevious ()
{ return ivCollection->setToPrevious (*this); }
IBoolean operator== (Cursor const& cursor) const
{ return ivCollection == cursor.ivCollection &&
ivImpl == cursor.ivImpl; }
IBoolean operator!= (Cursor const& cursor) const
{ return ! operator== (cursor); }
};
public:
IGDilutedSequence (INumber
numberOfElements = 100);
IGDilutedSequence (IGDilutedSequence < Element, ElementOps > const&);
IGDilutedSequence < Element, ElementOps >&
operator = (IGDilutedSequence < Element, ElementOps > const&);
~IGDilutedSequence ();
IBoolean add (Element const&);
IBoolean add (Element const&,
ICursor&);
void addAllFrom (IGDilutedSequence < Element, ElementOps > const&);
Element const& elementAt (ICursor const&) const;
Element& elementAt (ICursor const&);
Element const& anyElement () const;
void removeAt (ICursor const&);
INumber removeAll (IBoolean (*property)
(Element const&, void*),
void* additionalArgument = 0);
void replaceAt (ICursor const&,
Element const&);
void removeAll ();
IBoolean isBounded () const;
INumber maxNumberOfElements () const;
INumber numberOfElements () const;
IBoolean isEmpty () const;
IBoolean isFull () const;
ICursor* newCursor () const;
IBoolean setToFirst (ICursor&) const;
IBoolean setToNext (ICursor&) const;
IBoolean allElementsDo (IBoolean (*function)
(Element&, void*),
void* additionalArgument = 0);
IBoolean allElementsDo (IIterator <Element>&);
IBoolean allElementsDo (IBoolean (*function)
(Element const&, void*),
void* additionalArgument = 0)
const;
IBoolean allElementsDo (IConstantIterator
<Element>&) const;
IBoolean isConsistent () const;
void removeFirst ();
void removeLast ();
void removeAtPosition (IPosition);
Element const& firstElement () const;
Element const& lastElement () const;
Element const& elementAtPosition (IPosition) const;
IBoolean setToLast (ICursor&) const;
IBoolean setToPrevious (ICursor&) const;
void setToPosition (IPosition,
ICursor&) const;
IBoolean isFirst (ICursor const&) const;
IBoolean isLast (ICursor const&) const;
long compare (IGDilutedSequence < Element, ElementOps > const&,
long (*comparisonFunction)
(Element const&,
Element const&)) const;
void addAsFirst (Element const&);
void addAsFirst (Element const&,
ICursor&);
void addAsLast (Element const&);
void addAsLast (Element const&,
ICursor&);
void addAsNext (Element const&,
ICursor&);
void addAsPrevious (Element const&,
ICursor&);
void addAtPosition (IPosition,
Element const&);
void addAtPosition (IPosition,
Element const&,
ICursor&);
void sort (long (*comparisonFunction)
(Element const&,
Element const&));
protected:
void checkNotEmpty () const;
void checkCursorIsForThis (ICursor const&) const;
void checkCursor (ICursor const&) const;
void checkPositionExists (IPosition) const;
void checkPositionForAdd (IPosition) const;
};
template < class Element >
class IDilutedSequence :
public IGDilutedSequence < Element, IStdOps < Element > > {
public:
IDilutedSequence (INumber n = 100) :
IGDilutedSequence < Element, IStdOps < Element > > (n) {}
};
#include <itdseq.if>
#ifdef __IBMCPP__
#ifndef __TEMPINC__
#include <itdseq.c>
#endif
#endif
#endif