home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
cset21v1.zip
/
IBMCPP
/
IBMCLASS
/
IKSSSEQ.IF
< prev
next >
Wrap
Text File
|
1993-09-22
|
15KB
|
421 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 Key, class ElementOps, class Base>
inline IWKSSetOnSeq <Element, Key, ElementOps, Base>::
IWKSSetOnSeq (INumber n)
: ivBase (n) {
}
template <class Element, class Key, class ElementOps, class Base>
inline IWKSSetOnSeq <Element, Key, ElementOps, Base>::
IWKSSetOnSeq (IWKSSetOnSeq <Element, Key, ElementOps, Base>
const& collection)
: ivBase (collection.ivBase) {
}
template <class Element, class Key, class ElementOps, class Base>
inline IWKSSetOnSeq <Element, Key, ElementOps, Base>&
IWKSSetOnSeq <Element, Key, ElementOps, Base>::
operator = (IWKSSetOnSeq <Element, Key, ElementOps, Base>
const& collection)
{ ivBase.operator = (collection.ivBase);
return *this;
}
template <class Element, class Key, class ElementOps, class Base>
inline IWKSSetOnSeq <Element, Key, ElementOps, Base>::
~IWKSSetOnSeq () {
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
add (Element const& element)
{ Cursor dummy (*this);
return add (element, dummy);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
add (Element const& element, ICursor& cursor)
{ IBoolean keyExists = locateKey (elementOps().key (element), cursor);
if (! keyExists) {
if (cursor.isValid ()) {
ivBase.addAsPrevious (element, cursor);
}
else {
ivBase.addAsLast (element, cursor);
}
}
return ! keyExists;
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWKSSetOnSeq <Element, Key, ElementOps, Base>::
addAllFrom (IWKSSetOnSeq < Element, Key, ElementOps, Base >
const& collection)
{
#ifndef INO_CHECKS
ICHECK (this != &collection,
IIdenticalCollectionException, IIdenticalCollectionText)
#endif
Cursor cursor (collection);
forCursor (cursor) {
add (collection.elementAt (cursor));
}
}
template <class Element, class Key, class ElementOps, class Base>
inline Element const& IWKSSetOnSeq <Element, Key, ElementOps, Base>::
elementAt (ICursor const& cursor) const
{ return ivBase.elementAt (cursor);
}
template <class Element, class Key, class ElementOps, class Base>
inline Element& IWKSSetOnSeq <Element, Key, ElementOps, Base>::
elementAt (ICursor const& cursor)
{ return ivBase.elementAt (cursor);
}
template <class Element, class Key, class ElementOps, class Base>
inline Element const& IWKSSetOnSeq <Element, Key, ElementOps, Base>::
anyElement () const
{ return ivBase.anyElement ();
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWKSSetOnSeq <Element, Key, ElementOps, Base>::
removeAt (ICursor const& cursor)
{ ivBase.removeAt (cursor);
}
template < class Element, class Key, class ElementOps, class Base >
inline INumber IWKSSetOnSeq < Element, Key, ElementOps, Base >::
removeAll (IBoolean (*predicate) (Element const&, void*), void* env)
{ return ivBase.removeAll (predicate, env);
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWKSSetOnSeq <Element, Key, ElementOps, Base>::
replaceAt (ICursor const& cursor, Element const& element)
{
#ifndef INO_CHECKS
ICHECK (elementOps().keyOps.compare
(elementOps().key (ivBase.elementAt (cursor)),
elementOps().key (element)) == 0,
IInvalidReplacementException, IInvalidReplacementText)
#endif
ivBase.replaceAt (cursor, element);
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWKSSetOnSeq <Element, Key, ElementOps, Base>::
removeAll ()
{ ivBase.removeAll ();
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
isBounded () const
{ return ivBase.isBounded ();
}
template <class Element, class Key, class ElementOps, class Base>
inline INumber IWKSSetOnSeq <Element, Key, ElementOps, Base>::
maxNumberOfElements () const
{ return ivBase.maxNumberOfElements ();
}
template <class Element, class Key, class ElementOps, class Base>
inline INumber IWKSSetOnSeq <Element, Key, ElementOps, Base>::
numberOfElements () const
{ return ivBase.numberOfElements ();
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
isEmpty () const
{ return ivBase.isEmpty ();
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
isFull () const
{ return ivBase.isFull ();
}
template <class Element, class Key, class ElementOps, class Base>
inline ICursor* IWKSSetOnSeq <Element, Key, ElementOps, Base>::
newCursor () const
{ ICursor* result = new Cursor (*this);
ICHECK (result != 0, IOutOfMemory, IOutOfMemoryText)
return result;
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
setToFirst (ICursor& cursor) const
{ return ivBase.setToFirst (cursor);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
setToNext (ICursor& cursor) const
{ return ivBase.setToNext (cursor);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
allElementsDo (IBoolean (*iterationFunction) (Element&, void*),
void* env) {
return ivBase.allElementsDo (iterationFunction, env);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
allElementsDo (IIterator <Element>& iterator)
{ return ivBase.allElementsDo (iterator);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
allElementsDo (IBoolean (*iterationFunction) (Element const&, void*),
void* env) const {
return ivBase.allElementsDo (iterationFunction, env);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
allElementsDo (IConstantIterator <Element>& iterator) const
{ return ivBase.allElementsDo (iterator);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
isConsistent () const
{ return ivBase.isConsistent ();
}
template <class Element, class Key, class ElementOps, class Base>
inline Key const& IWKSSetOnSeq <Element, Key, ElementOps, Base>::
key (Element const& element) const
{ return elementOps().key (element);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
containsElementWithKey (Key const& key) const
{ Cursor dummy (*this);
return locateKey (key, dummy);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
containsAllKeysFrom (IWKSSetOnSeq <Element, Key, ElementOps, Base>
const& collection) const
{ Cursor cursor (collection);
IBoolean result = True;
forCursor (cursor) {
if (! containsElementWithKey
(elementOps().key (collection.elementAt (cursor)))) {
result = False;
break;
}
}
return result;
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
locateElementWithKey (Key const& key, ICursor& cursor) const
{ IBoolean result = locateKey (key, cursor);
if (! result) {
cursor.invalidate ();
}
return result;
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
replaceElementWithKey (Element const& element)
{ Cursor dummy (*this);
return replaceElementWithKey (element, dummy);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
replaceElementWithKey (Element const& element, ICursor& cursor)
{ IBoolean result = locateKey (elementOps().key (element), cursor);
if (result)
ivBase.replaceAt (cursor, element);
else
cursor.invalidate ();
return result;
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
locateOrAddElementWithKey (Element const& element)
{ Cursor dummy (*this);
return locateOrAddElementWithKey (element, dummy);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
locateOrAddElementWithKey (Element const& element, ICursor& cursor)
{ IBoolean result = locateKey (elementOps().key (element), cursor);
if (! result) {
add (element, cursor);
}
return result;
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
addOrReplaceElementWithKey (Element const& element)
{ Cursor dummy (*this);
return addOrReplaceElementWithKey (element, dummy);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
addOrReplaceElementWithKey (Element const& element, ICursor& cursor)
{ IBoolean keyExists = locateKey (elementOps().key (element), cursor);
if (keyExists) {
ivBase.replaceAt (cursor, element);
}
else {
add (element, cursor);
}
return ! keyExists;
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
removeElementWithKey (Key const& key)
{ Cursor cursor (*this);
IBoolean result = locateKey (key, cursor);
if (result) {
ivBase.removeAt (cursor);
}
return result;
}
template <class Element, class Key, class ElementOps, class Base>
inline Element const& IWKSSetOnSeq <Element, Key, ElementOps, Base>::
elementWithKey (Key const& key) const
{ Cursor cursor (*this);
IBoolean keyExists = locateElementWithKey (key, cursor);
ICHECK (keyExists, INotContainsKeyException, IKeyNotContainedText)
return elementAt (cursor);
}
template <class Element, class Key, class ElementOps, class Base>
inline Element& IWKSSetOnSeq <Element, Key, ElementOps, Base>::
elementWithKey (Key const& key)
{ Cursor cursor (*this);
IBoolean keyExists = locateElementWithKey (key, cursor);
ICHECK (keyExists, INotContainsKeyException, IKeyNotContainedText)
return elementAt (cursor);
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWKSSetOnSeq <Element, Key, ElementOps, Base>::
removeFirst ()
{ ivBase.removeFirst ();
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWKSSetOnSeq <Element, Key, ElementOps, Base>::
removeLast ()
{ ivBase.removeLast ();
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWKSSetOnSeq <Element, Key, ElementOps, Base>::
removeAtPosition (IPosition position)
{ ivBase.removeAtPosition (position);
}
template <class Element, class Key, class ElementOps, class Base>
inline Element const& IWKSSetOnSeq <Element, Key, ElementOps, Base>::
firstElement () const
{ return ivBase.firstElement ();
}
template <class Element, class Key, class ElementOps, class Base>
inline Element const& IWKSSetOnSeq <Element, Key, ElementOps, Base>::
lastElement () const
{ return ivBase.lastElement ();
}
template <class Element, class Key, class ElementOps, class Base>
inline Element const& IWKSSetOnSeq <Element, Key, ElementOps, Base>::
elementAtPosition (IPosition position) const
{ return ivBase.elementAtPosition (position);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
setToLast (ICursor& cursor) const
{ return ivBase.setToLast (cursor);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
setToPrevious (ICursor& cursor) const
{ return ivBase.setToPrevious (cursor);
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWKSSetOnSeq <Element, Key, ElementOps, Base>::
setToPosition (IPosition position, ICursor& cursor) const
{ ivBase.setToPosition (position, cursor);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
isFirst (ICursor const& cursor) const
{ return ivBase.isFirst (cursor);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
isLast (ICursor const& cursor) const
{ return ivBase.isLast (cursor);
}
template <class Element, class Key, class ElementOps, class Base>
inline long IWKSSetOnSeq <Element, Key, ElementOps, Base>::
compare (IWKSSetOnSeq <Element, Key, ElementOps, Base> const& collection,
long (*comparisonFunction) (Element const&, Element const&)) const {
return ivBase.compare (collection.ivBase, comparisonFunction);
}
// private:
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
locateKey (Key const& key, ICursor& icursor) const
{ Cursor *cursor = (Cursor*)&icursor;
forCursor (*cursor) {
long comp =
elementOps().keyOps.compare
(elementOps().key (ivBase.elementAt (*cursor)), key);
if (comp >= 0) {
return comp == 0;
}
}
return False;
}