home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
cset21v1.zip
/
IBMCPP
/
IBMCLASS
/
IRELKB.IF
< prev
next >
Wrap
Text File
|
1993-09-22
|
17KB
|
464 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 IWRelOnKeyBag < Element, Key, ElementOps, Base >::
IWRelOnKeyBag (INumber n)
: ivBase (n)
{
}
template < class Element, class Key, class ElementOps, class Base >
inline IWRelOnKeyBag < Element, Key, ElementOps, Base >::
IWRelOnKeyBag (IWRelOnKeyBag < Element, Key, ElementOps, Base > const& collection)
: ivBase (collection.ivBase)
{
}
template < class Element, class Key, class ElementOps, class Base >
inline IWRelOnKeyBag < Element, Key, ElementOps, Base >& IWRelOnKeyBag < Element, Key, ElementOps, Base >::
operator= (IWRelOnKeyBag < Element, Key, ElementOps, Base > const& collection)
{ ivBase.operator= (collection.ivBase);
return *this;
}
template < class Element, class Key, class ElementOps, class Base >
inline IWRelOnKeyBag < Element, Key, ElementOps, Base >::
~IWRelOnKeyBag ()
{
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
add (Element const& element)
{ return ! locateOrAdd (element);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
add (Element const& element, ICursor &cursor)
{ return ! locateOrAdd (element, cursor);
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWRelOnKeyBag <Element, Key, ElementOps, Base>::
addAllFrom (IWRelOnKeyBag < 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& IWRelOnKeyBag < Element, Key, ElementOps, Base >::
elementAt (ICursor const& cursor) const
{ return ivBase.elementAt (cursor);
}
template < class Element, class Key, class ElementOps, class Base >
inline Element& IWRelOnKeyBag < Element, Key, ElementOps, Base >::
elementAt (ICursor const& cursor)
{ return ivBase.elementAt (cursor);
}
template < class Element, class Key, class ElementOps, class Base >
inline Element const& IWRelOnKeyBag < Element, Key, ElementOps, Base >::
anyElement () const
{ return ivBase.anyElement ();
}
template < class Element, class Key, class ElementOps, class Base >
inline void IWRelOnKeyBag < Element, Key, ElementOps, Base >::
removeAt (ICursor const& cursor)
{ ivBase.removeAt (cursor);
}
template < class Element, class Key, class ElementOps, class Base >
inline INumber IWRelOnKeyBag < 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 IWRelOnKeyBag < Element, Key, ElementOps, Base >::
replaceAt (ICursor const& cursor, Element const& element)
{ ivBase.replaceAt (cursor, element);
}
template < class Element, class Key, class ElementOps, class Base >
inline void IWRelOnKeyBag < Element, Key, ElementOps, Base >::
removeAll ()
{ ivBase.removeAll ();
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
isBounded () const
{ return ivBase.isBounded ();
}
template < class Element, class Key, class ElementOps, class Base >
inline INumber IWRelOnKeyBag < Element, Key, ElementOps, Base >::
maxNumberOfElements () const
{ return ivBase.maxNumberOfElements ();
}
template < class Element, class Key, class ElementOps, class Base >
inline INumber IWRelOnKeyBag < Element, Key, ElementOps, Base >::
numberOfElements () const
{ return ivBase.numberOfElements ();
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
isEmpty () const
{ return ivBase.isEmpty ();
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
isFull () const
{ return ivBase.isFull ();
}
template < class Element, class Key, class ElementOps, class Base >
inline ICursor* IWRelOnKeyBag < Element, Key, ElementOps, Base >::
newCursor () const
{ return ivBase.newCursor ();
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
setToFirst (ICursor &cursor) const
{ return ivBase.setToFirst (cursor);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
setToNext (ICursor &cursor) const
{ return ivBase.setToNext (cursor);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
allElementsDo (IBoolean (*iterationFunction) (Element &, void*),
void* environment)
{ return ivBase.allElementsDo (iterationFunction, environment);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
allElementsDo (IIterator <Element>& iterator)
{ return ivBase.allElementsDo (iterator);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
allElementsDo (IBoolean (*iterationFunction) (Element const&, void*),
void* environment) const
{ return ivBase.allElementsDo (iterationFunction, environment);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
allElementsDo (IConstantIterator <Element>& iterator) const
{ return ivBase.allElementsDo (iterator);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
isConsistent () const
{ return ivBase.isConsistent ();
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
contains (Element const& element) const
{ Cursor cursor (*this);
return locate (element, cursor);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
containsAllFrom (IWRelOnKeyBag <Element, Key, 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 Key, class ElementOps, class Base>
inline IBoolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
locate (Element const& element, ICursor& cursor) const
{ for (locateElementWithKey (elementOps().key (element), cursor);
cursor.isValid ();
locateNextElementWithKey (elementOps().key (element), cursor)) {
if (elementOps().equal (elementAt (cursor), element))
return True;
}
return False;
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
locateOrAdd (Element const& element)
{ Cursor dummy (*this);
return locateOrAdd (element, dummy);
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
locateOrAdd (Element const& element, ICursor& cursor)
{ IBoolean result = locate (element, cursor);
if (! result) {
ivBase.add (element, cursor);
}
return result;
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
remove (Element const& element)
{ Cursor cursor (*this);
IBoolean result = locateElementWithKey (elementOps().key (element), cursor);
if (result) {
result = elementOps().equal (elementAt (cursor), element);
}
if (result) {
ivBase.removeAt (cursor);
}
return result;
}
template <class Element, class Key, class ElementOps, class Base>
inline IBoolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
operator == (IWRelOnKeyBag <Element, Key, 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 Key, class ElementOps, class Base>
inline IBoolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
operator != (IWRelOnKeyBag <Element, Key, ElementOps, Base>
const& collection) const
{ return ! operator == (collection);
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWRelOnKeyBag <Element, Key, ElementOps, Base>::
unionWith (IWRelOnKeyBag <Element, Key, ElementOps, Base>
const& collection)
{ if (this != &collection)
addAllFrom (collection);
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWRelOnKeyBag <Element, Key, ElementOps, Base>::
intersectionWith (IWRelOnKeyBag <Element, Key, ElementOps, Base>
const& collection)
{ if (this != &collection)
{ IWRelOnKeyBag <Element, Key, ElementOps, Base> const* env = &collection;
removeAll (isNotContained, &env);
}
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWRelOnKeyBag <Element, Key, ElementOps, Base>::
differenceWith (IWRelOnKeyBag <Element, Key, ElementOps, Base>
const& collection)
{ if (this == &collection)
removeAll ();
else
{ IWRelOnKeyBag <Element, Key, ElementOps, Base> const* env = &collection;
removeAll (isContained, &env);
}
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWRelOnKeyBag <Element, Key, ElementOps, Base>::
addUnion (IWRelOnKeyBag <Element, Key, ElementOps, Base>
const& collection1,
IWRelOnKeyBag <Element, Key, ElementOps, Base>
const& collection2)
{ unionWith (collection1);
unionWith (collection2);
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWRelOnKeyBag <Element, Key, ElementOps, Base>::
addIntersection (IWRelOnKeyBag <Element, Key, ElementOps, Base>
const& collection1,
IWRelOnKeyBag <Element, Key, ElementOps, Base>
const& collection2)
{ if (this == &collection1 || this == &collection2)
return; // tbd
Cursor cursor (collection1);
forCursor (cursor) {
if (collection2.contains (collection1.elementAt (cursor)))
add (collection1.elementAt (cursor));
}
}
template <class Element, class Key, class ElementOps, class Base>
inline void IWRelOnKeyBag <Element, Key, ElementOps, Base>::
addDifference (IWRelOnKeyBag <Element, Key, ElementOps, Base>
const& collection1,
IWRelOnKeyBag <Element, Key, ElementOps, Base>
const& collection2)
{ if (this == &collection1)
return;
else if (this == &collection2)
unionWith (collection1);
else {
Cursor cursor (collection1);
forCursor (cursor) {
if (! collection2.contains (collection1.elementAt (cursor)))
add (collection1.elementAt (cursor));
}
}
}
template < class Element, class Key, class ElementOps, class Base >
inline Key const& IWRelOnKeyBag < Element, Key, ElementOps, Base >::
key (Element const& element) const
{ return elementOps().key (element);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
containsElementWithKey (Key const& key) const
{ return ivBase.containsElementWithKey (key);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
containsAllKeysFrom (IWRelOnKeyBag < Element, Key, ElementOps, Base > const& collection) const
{ return ivBase.containsAllKeysFrom (collection.ivBase);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
locateElementWithKey (Key const& key, ICursor &cursor) const
{ return ivBase.locateElementWithKey (key, cursor);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
replaceElementWithKey (Element const& element)
{ return ivBase.replaceElementWithKey (element);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
replaceElementWithKey (Element const& element, ICursor &cursor)
{ return ivBase.replaceElementWithKey (element, cursor);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
locateOrAddElementWithKey (Element const& element)
{ return ivBase.locateOrAddElementWithKey (element);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
locateOrAddElementWithKey (Element const& element, ICursor &cursor)
{ return ivBase.locateOrAddElementWithKey (element, cursor);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
addOrReplaceElementWithKey (Element const& element)
{ return ivBase.addOrReplaceElementWithKey (element);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
addOrReplaceElementWithKey (Element const& element, ICursor &cursor)
{ return ivBase.addOrReplaceElementWithKey (element, cursor);
}
template < class Element, class Key, class ElementOps, class Base >
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
removeElementWithKey (Key const& key)
{ return ivBase.removeElementWithKey (key);
}
template < class Element, class Key, class ElementOps, class Base >
inline Element const& IWRelOnKeyBag < Element, Key, ElementOps, Base >::
elementWithKey (Key const& key) const
{ return ivBase.elementWithKey (key);
}
template < class Element, class Key, class ElementOps, class Base >
inline Element& IWRelOnKeyBag < Element, Key, ElementOps, Base >::
elementWithKey (Key const& key)
{ return ivBase.elementWithKey (key);
}
template < class Element, class Key, class ElementOps, class Base>
inline INumber IWRelOnKeyBag < Element, Key, ElementOps, Base>::
numberOfElementsWithKey (Key const& key) const
{ return ivBase.numberOfElementsWithKey (key);
}
template < class Element, class Key, class ElementOps, class Base>
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base>::
locateNextElementWithKey (Key const& key, ICursor& cursor) const
{ return ivBase.locateNextElementWithKey (key, cursor);
}
template < class Element, class Key, class ElementOps, class Base>
inline INumber IWRelOnKeyBag < Element, Key, ElementOps, Base>::
removeAllElementsWithKey (Key const& key)
{ return ivBase.removeAllElementsWithKey (key);
}
template < class Element, class Key, class ElementOps, class Base>
inline INumber IWRelOnKeyBag < Element, Key, ElementOps, Base>::
numberOfDifferentKeys() const
{ return ivBase.numberOfDifferentKeys ();
}
template < class Element, class Key, class ElementOps, class Base>
inline IBoolean IWRelOnKeyBag < Element, Key, ElementOps, Base>::
setToNextWithDifferentKey (ICursor& icursor) const
{ return ivBase.setToNextWithDifferentKey (icursor);
}