home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
cset21v1.zip
/
IBMCPP
/
IBMCLASS
/
IESSEQ.IF
< prev
next >
Wrap
Text File
|
1993-09-22
|
16KB
|
465 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. *
* *
*******************************************************************************/
#include <ibexcept.h>
template <class Element, class ElementOps, class Base>
inline IWEqSeqOnSeq <Element, ElementOps, Base>::
IWEqSeqOnSeq (INumber n)
: ivBase (n) {
}
template <class Element, class ElementOps, class Base>
inline IWEqSeqOnSeq <Element, ElementOps, Base>::
IWEqSeqOnSeq (IWEqSeqOnSeq <Element, ElementOps, Base>
const& collection)
: ivBase (collection.ivBase) {
}
template <class Element, class ElementOps, class Base>
inline IWEqSeqOnSeq <Element, ElementOps, Base>&
IWEqSeqOnSeq <Element, ElementOps, Base>::
operator = (IWEqSeqOnSeq <Element, ElementOps, Base>
const& collection)
{ ivBase.operator = (collection.ivBase);
return *this;
}
template <class Element, class ElementOps, class Base>
inline IWEqSeqOnSeq <Element, ElementOps, Base>::
~IWEqSeqOnSeq () {
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
add (Element const& element)
{ Cursor dummy (*this);
return add (element, dummy);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
add (Element const& element, ICursor& cursor)
{ return ivBase.add (element, cursor);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
addAllFrom (IWEqSeqOnSeq < Element, ElementOps, Base >
const& collection)
{ ivBase.addAllFrom (collection.ivBase);
}
template <class Element, class ElementOps, class Base>
inline Element const& IWEqSeqOnSeq <Element, ElementOps, Base>::
elementAt (ICursor const& cursor) const
{ return ivBase.elementAt (cursor);
}
template <class Element, class ElementOps, class Base>
inline Element& IWEqSeqOnSeq <Element, ElementOps, Base>::
elementAt (ICursor const& cursor)
{ return ivBase.elementAt (cursor);
}
template <class Element, class ElementOps, class Base>
inline Element const& IWEqSeqOnSeq <Element, ElementOps, Base>::
anyElement () const
{ return ivBase.anyElement ();
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
removeAt (ICursor const& cursor)
{ ivBase.removeAt (cursor);
}
template < class Element, class ElementOps, class Base >
inline INumber IWEqSeqOnSeq < Element, ElementOps, Base >::
removeAll (IBoolean (*predicate) (Element const&, void*), void* env)
{ return ivBase.removeAll (predicate, env);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
replaceAt (ICursor const& cursor, Element const& element)
{ ivBase.replaceAt (cursor, element);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
removeAll ()
{ ivBase.removeAll ();
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
isBounded () const
{ return ivBase.isBounded ();
}
template <class Element, class ElementOps, class Base>
inline INumber IWEqSeqOnSeq <Element, ElementOps, Base>::
maxNumberOfElements () const
{ return ivBase.maxNumberOfElements ();
}
template <class Element, class ElementOps, class Base>
inline INumber IWEqSeqOnSeq <Element, ElementOps, Base>::
numberOfElements () const
{ return ivBase.numberOfElements ();
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
isEmpty () const
{ return ivBase.isEmpty ();
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
isFull () const
{ return ivBase.isFull ();
}
template <class Element, class ElementOps, class Base>
inline ICursor* IWEqSeqOnSeq <Element, ElementOps, Base>::
newCursor () const
{ ICursor* result = new Cursor (*this);
ICHECK (result != 0, IOutOfMemory, IOutOfMemoryText)
return result;
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
setToFirst (ICursor& cursor) const
{ return ivBase.setToFirst (cursor);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
setToNext (ICursor& cursor) const
{ return ivBase.setToNext (cursor);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
allElementsDo (IBoolean (*iterationFunction) (Element&, void*),
void* env) {
return ivBase.allElementsDo (iterationFunction, env);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
allElementsDo (IIterator <Element>& iterator)
{ return ivBase.allElementsDo (iterator);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
allElementsDo (IBoolean (*iterationFunction) (Element const&, void*),
void* env) const {
return ivBase.allElementsDo (iterationFunction, env);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
allElementsDo (IConstantIterator <Element>& iterator) const
{ return ivBase.allElementsDo (iterator);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
isConsistent () const
{ return ivBase.isConsistent ();
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
contains (Element const& element) const
{ Cursor dummy (*this);
return locate (element, dummy);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
containsAllFrom (IWEqSeqOnSeq <Element, ElementOps, Base>
const& collection) const
{ Cursor cursor (collection);
IBoolean result = True;
forCursor (cursor) {
if (! contains (collection.elementAt (cursor))) {
result = False;
break;
}
}
return result;
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
locate (Element const& element, ICursor& cursor) const
{ return locateFirst (element, cursor);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
locateOrAdd (Element const& element)
{ Cursor dummy (*this);
return locateOrAdd (element, dummy);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
locateOrAdd (Element const& element, ICursor& cursor)
{ IBoolean result = locate (element, cursor);
if (! result) {
add (element, cursor);
}
return result;
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
remove (Element const& element)
{ Cursor cursor (*this);
IBoolean result = locate (element, cursor);
if (result) {
ivBase.removeAt (cursor);
}
return result;
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
operator == (IWEqSeqOnSeq <Element, ElementOps, Base>
const& collection) const
{ IBoolean result = numberOfElements () == collection.numberOfElements ();
if (result) {
Cursor thisCursor (*this);
Cursor collectionCursor (collection);
for (thisCursor.setToFirst (), collectionCursor.setToFirst ();
result && thisCursor.isValid ();
thisCursor.setToNext (), collectionCursor.setToNext ()) {
result = elementOps().equal
(this->elementAt (thisCursor),
collection.elementAt (collectionCursor));
}
}
return result;
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
operator != (IWEqSeqOnSeq <Element, ElementOps, Base>
const& collection) const
{ return ! operator == (collection);
}
template <class Element, class ElementOps, class Base>
inline INumber IWEqSeqOnSeq <Element, ElementOps, Base>::
numberOfOccurrences (Element const& element) const
{ INumber result = 0;
Cursor cursor (*this);
locate (element, cursor);
while (cursor.isValid ()) {
result++;
locateNext (element, cursor);
}
return result;
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
locateNext (Element const& element, ICursor& cursor) const
{ ICHECK (cursor.isValid (), ICursorInvalidException, IInvalidCursorText)
for (; cursor.setToNext (); ) {
if (elementOps().equal
(ivBase.elementAt (cursor), element))
return True;
}
return False;
}
template <class Element, class ElementOps, class Base>
inline INumber IWEqSeqOnSeq <Element, ElementOps, Base>::
removeAllOccurrences (Element const& element)
{ Element const* env = &element;
return removeAll (isEqual, &env);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
removeFirst ()
{ ivBase.removeFirst ();
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
removeLast ()
{ ivBase.removeLast ();
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
removeAtPosition (IPosition position)
{ ivBase.removeAtPosition (position);
}
template <class Element, class ElementOps, class Base>
inline Element const& IWEqSeqOnSeq <Element, ElementOps, Base>::
firstElement () const
{ return ivBase.firstElement ();
}
template <class Element, class ElementOps, class Base>
inline Element const& IWEqSeqOnSeq <Element, ElementOps, Base>::
lastElement () const
{ return ivBase.lastElement ();
}
template <class Element, class ElementOps, class Base>
inline Element const& IWEqSeqOnSeq <Element, ElementOps, Base>::
elementAtPosition (IPosition position) const
{ return ivBase.elementAtPosition (position);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
setToLast (ICursor& cursor) const
{ return ivBase.setToLast (cursor);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
setToPrevious (ICursor& cursor) const
{ return ivBase.setToPrevious (cursor);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
setToPosition (IPosition position, ICursor& cursor) const
{ ivBase.setToPosition (position, cursor);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
isFirst (ICursor const& cursor) const
{ return ivBase.isFirst (cursor);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
isLast (ICursor const& cursor) const
{ return ivBase.isLast (cursor);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
addAsFirst (Element const& element)
{ ivBase.addAsFirst (element);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
addAsFirst (Element const& element, ICursor &cursor)
{ ivBase.addAsFirst (element, cursor);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
addAsLast (Element const& element)
{ ivBase.addAsLast (element);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
addAsLast (Element const& element, ICursor &cursor)
{ ivBase.addAsLast (element, cursor);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
addAsNext (Element const& element, ICursor &cursor)
{ ivBase.addAsNext (element, cursor);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
addAsPrevious (Element const& element, ICursor &cursor)
{ ivBase.addAsPrevious (element, cursor);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
addAtPosition (IPosition position, Element const& element)
{ ivBase.addAtPosition (position, element);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
addAtPosition (IPosition position, Element const& element, ICursor &cursor)
{ ivBase.addAtPosition (position, element, cursor);
}
template <class Element, class ElementOps, class Base>
inline long IWEqSeqOnSeq <Element, ElementOps, Base>::
compare (IWEqSeqOnSeq <Element, ElementOps, Base> const& collection,
long (*comparisonFunction) (Element const&, Element const&)) const
{ return ivBase.compare (collection.ivBase, comparisonFunction);
}
template <class Element, class ElementOps, class Base>
inline void IWEqSeqOnSeq <Element, ElementOps, Base>::
sort (long (*comparisonFunction) (Element const&, Element const&))
{ ivBase.sort (comparisonFunction);
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
locateFirst (Element const& element, ICursor& cursor) const
{ for (ivBase.setToFirst (cursor); // checks for cursor belongs to this
cursor.isValid ();
ivBase.setToNext (cursor)) {
if (elementOps().equal
(ivBase.elementAt (cursor), element))
return True;
}
return False;
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
locateLast (Element const& element, ICursor& cursor) const
{ for (ivBase.setToLast (cursor); // checks for cursor belongs to this
cursor.isValid ();
ivBase.setToPrevious (cursor)) {
if (elementOps().equal
(ivBase.elementAt (cursor), element))
return True;
}
return False;
}
template <class Element, class ElementOps, class Base>
inline IBoolean IWEqSeqOnSeq <Element, ElementOps, Base>::
locatePrevious (Element const& element, ICursor& icursor) const
{ Cursor &cursor = (Cursor&)icursor;
ICHECK (cursor.isValid (), ICursorInvalidException, IInvalidCursorText)
for (; cursor.setToPrevious (); ) {
if (elementOps().equal
(ivBase.elementAt (cursor), element))
return True;
}
return False;
}