home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
cset21v1.zip
/
IBMCPP
/
IBMCLASS
/
IBSTKSS.IF
< prev
next >
Wrap
Text File
|
1993-09-22
|
16KB
|
415 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, int nodeSize >
inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
checkNotEmpty () const {
#ifndef INO_CHECKS
ICHECK (!isEmpty (), IEmptyException, ICollectionIsEmptyText)
#endif
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
checkCursorIsForThis (ICursor const& c) const {
#ifndef INO_CHECKS
ICHECK (((Cursor const&)c).isFor (*this), ICursorInvalidException,
ICursorNotForThisText)
#endif
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
checkCursor (ICursor const& c) const {
#ifndef INO_CHECKS
ICHECK (((Cursor const&)c).isFor (*this), ICursorInvalidException,
ICursorNotForThisText)
ICHECK (c.isValid (), ICursorInvalidException, IInvalidCursorText)
#endif
#ifdef IALL_CHECKS
ICHECK (ivImpl.checkNode(((Cursor const&)c).ivNode),
ICursorInvalidException, ICursorNotContainedText)
#endif
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
checkPositionExists (IPosition position) const {
#ifndef INO_CHECKS
ICHECK (1 <= position && position <= numberOfElements(),
IPositionInvalidException, IInvalidPositionText)
#endif
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
init ()
{
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
IWBSTKeySortedSet (INumber)
: ivOps()
, ivImpl(IBSTORDER, &ivOps)
{ init();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
IWBSTKeySortedSet (IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize > const& a)
: ivOps()
, ivImpl(a.ivImpl, &ivOps)
{ init();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
~IWBSTKeySortedSet ()
{
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
add (Element const& e)
{ return ivImpl.add(&e);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
add (Element const& e, ICursor& c)
{ checkCursorIsForThis (c);
return ivImpl.add(&e, ((Cursor&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
addAllFrom (IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize > const& t)
{
#ifndef INO_CHECKS
ICHECK (this != &t,
IIdenticalCollectionException, IIdenticalCollectionText)
#endif
ivImpl.addAllFrom(t.ivImpl);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline Element const& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
elementAt (ICursor const& c) const
{ checkCursor (c);
return *(Element const*)
ivImpl.elementAt(((Cursor const&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline Element& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
elementAt (ICursor const& c)
{ checkCursor (c);
return *(Element*)
ivImpl.elementAt(((Cursor const&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline Element const& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
anyElement () const
{ checkNotEmpty ();
return *(Element const*) ivImpl.anyElement();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
removeAt (ICursor const& c)
{ checkCursor (c);
ivImpl.removeAt(((Cursor const&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline INumber IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
removeAll (IBoolean (*predicate) (Element const&, void*), void* env)
{ return ivImpl.removeAll (predicate, env);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
replaceAt (ICursor const& c, Element const& e)
{ checkCursor (c);
#ifndef INO_CHECKS
ICHECK (elementOps().keyOps.compare
(elementOps().key (elementAt (c)),
elementOps().key (e)) == 0,
IInvalidReplacementException, IInvalidReplacementText)
#endif
ivImpl.replaceAt(((Cursor const&) c).ivNode, &e);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
removeAll ()
{ ivImpl.removeAll();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
isBounded () const
{ return ivImpl.isBounded();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline INumber IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
maxNumberOfElements () const
{ ICHECK (False, INotBoundedException,
INotBoundedText)
return ivImpl.maxNumberOfElements();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline INumber IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
numberOfElements () const
{ return ivImpl.numberOfElements();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
isEmpty () const
{ return ivImpl.isEmpty();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
isFull () const
{ return ivImpl.isFull();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline ICursor* IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
newCursor () const
{ ICursor* result = new Cursor (*this);
ICHECK (result != 0, IOutOfMemory, IOutOfMemoryText)
return result;
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
setToFirst (ICursor& c) const
{ checkCursorIsForThis (c);
return ivImpl.setToFirst(((Cursor&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
setToNext (ICursor& c) const
{ checkCursor (c);
return ivImpl.setToNext(((Cursor&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
allElementsDo (IBoolean (*iterationFunction) (Element const&, void*),
void* env) const
{ return ivImpl.allElementsDo (iterationFunction, env);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
allElementsDo (IBoolean (*iterationFunction) (Element&, void*), void* env)
{ return ivImpl.allElementsDo (iterationFunction, env);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
allElementsDo (IConstantIterator <Element>& iterator) const
{ return ivImpl.allElementsDo (&iterator);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
allElementsDo (IIterator <Element>& iterator)
{ return ivImpl.allElementsDo (&iterator);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
isConsistent () const
{ return ivImpl.isConsistent ();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
containsAllKeysFrom (IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize > const& t) const
{ return ivImpl.containsAllKeysFrom(t.ivImpl);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
containsElementWithKey (Key const& k) const
{ return ivImpl.containsElementWithKey(&k);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
locateElementWithKey (Key const& k, ICursor& c) const
{ checkCursorIsForThis (c);
return ivImpl.locateElementWithKey(&k, ((Cursor&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
replaceElementWithKey (Element const& e)
{ return ivImpl.replaceElementWithKey(&e);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
replaceElementWithKey (Element const& e, ICursor& c)
{ checkCursorIsForThis (c);
return ivImpl.replaceElementWithKey(&e, ((Cursor&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
locateOrAddElementWithKey (Element const& e)
{ return ! add (e);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
locateOrAddElementWithKey (Element const& e, ICursor& c)
{ return ! add (e, c);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
addOrReplaceElementWithKey (Element const& e)
{ return ivImpl.addOrReplaceElementWithKey(&e);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
addOrReplaceElementWithKey (Element const& e, ICursor& c)
{ checkCursorIsForThis (c);
return ivImpl.addOrReplaceElementWithKey(&e, ((Cursor&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
removeElementWithKey(Key const& k)
{ return ivImpl.removeElementWithKey(&k);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline Element const& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
elementWithKey (Key const& k) const
{ return *(Element const*) ivImpl.elementWithKey(&k);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline Element& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
elementWithKey (Key const& k)
{ return *(Element*) ivImpl.elementWithKey(&k);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
removeFirst ()
{ checkNotEmpty ();
ivImpl.removeFirst();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
removeLast ()
{ checkNotEmpty ();
ivImpl.removeLast();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
removeAtPosition (IPosition position)
{ checkPositionExists (position);
ivImpl.removeAtPosition(position);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline Element const& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
firstElement () const
{ checkNotEmpty ();
return *(Element const*) ivImpl.firstElement();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline Element const& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
lastElement () const
{ checkNotEmpty ();
return *(Element const*) ivImpl.lastElement();
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline Element const& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
elementAtPosition (IPosition position) const
{ checkPositionExists (position);
return *(Element const*) ivImpl.elementAtPosition(position);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
setToLast (ICursor& c) const
{ checkCursorIsForThis (c);
return ivImpl.setToLast(((Cursor&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
setToPrevious (ICursor& c) const
{ checkCursor (c);
return ivImpl.setToPrevious(((Cursor&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
setToPosition (IPosition position, ICursor& c) const
{ checkCursorIsForThis (c);
checkPositionExists (position);
ivImpl.setToPosition(position, ((Cursor&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
isFirst (ICursor const& c) const
{ checkCursor (c);
return ivImpl.isFirst(((Cursor const&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
isLast (ICursor const& c) const
{ checkCursor (c);
return ivImpl.isLast(((Cursor const&) c).ivNode);
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >&
IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
operator = (IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize > const& t)
{ ivImpl = t.ivImpl;
return *this;
}
template < class Element, class Key, class ElementOps, int nodeSize >
inline long IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
compare (IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize > const& collection,
long (*comparisonFunction)
(Element const&, Element const&)) const
{ return ivImpl.compare
(collection.ivImpl, comparisonFunction);
}