home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (c) IBM Corp. 1992 */
- #include <ibexcept.h>
-
- template < class Element, class Key, class ElementOps, class Base >
- inline IWRelOnKeyBag < Element, Key, ElementOps, Base >::
- IWRelOnKeyBag (INumber n, IBoundIndicator b)
- : ivBase (n, b)
- {
- }
-
- 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 Boolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
- add (Element const& element)
- { return ! locateOrAdd (element);
- }
-
- template < class Element, class Key, class ElementOps, class Base >
- inline Boolean 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, "identical collection in addAllFrom")
- #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 (Boolean (*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 Boolean 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 Boolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
- isEmpty () const
- { return ivBase.isEmpty ();
- }
-
- template < class Element, class Key, class ElementOps, class Base >
- inline Boolean 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 Boolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
- setToFirst (ICursor &cursor) const
- { return ivBase.setToFirst (cursor);
- }
-
- template < class Element, class Key, class ElementOps, class Base >
- inline Boolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
- setToNext (ICursor &cursor) const
- { return ivBase.setToNext (cursor);
- }
-
- template < class Element, class Key, class ElementOps, class Base >
- inline Boolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
- allElementsDo (Boolean (*iterationFunction) (Element &, void*),
- void* environment)
- { return ivBase.allElementsDo (iterationFunction, environment);
- }
-
- template < class Element, class Key, class ElementOps, class Base >
- inline Boolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
- allElementsDo (IIterator <Element>& iterator)
- { return ivBase.allElementsDo (iterator);
- }
-
- template < class Element, class Key, class ElementOps, class Base >
- inline Boolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
- allElementsDo (Boolean (*iterationFunction) (Element const&, void*),
- void* environment) const
- { return ivBase.allElementsDo (iterationFunction, environment);
- }
-
- template < class Element, class Key, class ElementOps, class Base >
- inline Boolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
- allElementsDo (IConstantIterator <Element>& iterator) const
- { return ivBase.allElementsDo (iterator);
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
- contains (Element const& element) const
- { Cursor cursor (*this);
- if (locateElementWithKey (cvElementOps.key (element), cursor)) {
- return cvElementOps.equal (elementAt (cursor), element);
- }
- else {
- return False;
- }
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
- containsAllFrom (IWRelOnKeyBag <Element, Key, ElementOps, Base>
- const& collection) const
- { Cursor cursor (collection);
- Boolean result = True;
- forCursor (cursor) {
- if (! contains (collection.elementAt (cursor))) {
- result = False;
- break;
- }
- }
- return result;
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
- locate (Element const& element, ICursor& cursor) const
- { for (locateElementWithKey (cvElementOps.key (element), cursor);
- cursor.isValid ();
- locateNextElementWithKey (cvElementOps.key (element), cursor)) {
- if (cvElementOps.equal (elementAt (cursor), element))
- return True;
- }
- return False;
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean 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 Boolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
- locateOrAdd (Element const& element, ICursor& cursor)
- { Boolean result = locate (element, cursor);
- if (! result) {
- ivBase.add (element, cursor);
- }
- return result;
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
- remove (Element const& element)
- { Cursor cursor (*this);
- Boolean result = locateElementWithKey (cvElementOps.key (element), cursor);
- if (result) {
- result = cvElementOps.equal (elementAt (cursor), element);
- }
- if (result) {
- ivBase.removeAt (cursor);
- }
- return result;
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean IWRelOnKeyBag <Element, Key, ElementOps, Base>::
- operator == (IWRelOnKeyBag <Element, Key, ElementOps, Base>
- const& collection) const
- { Boolean 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 = cvElementOps.equal
- (this->elementAt (thisCursor),
- collection.elementAt (collectionCursor));
- }
- }
- return result;
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean 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)
- { 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)
- { 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)
- { 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)
- { addAllFrom (collection1);
- addAllFrom (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)
- { 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)
- { 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 cvElementOps.key (element);
- }
-
- template < class Element, class Key, class ElementOps, class Base >
- inline Boolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
- containsElementWithKey (Key const& key) const
- { return ivBase.containsElementWithKey (key);
- }
-
- template < class Element, class Key, class ElementOps, class Base >
- inline Boolean 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 Boolean 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 Boolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
- replaceElementWithKey (Element const& element)
- { return ivBase.replaceElementWithKey (element);
- }
-
- template < class Element, class Key, class ElementOps, class Base >
- inline Boolean 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 Boolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
- locateOrAddElementWithKey (Element const& element)
- { return ivBase.locateOrAddElementWithKey (element);
- }
-
- template < class Element, class Key, class ElementOps, class Base >
- inline Boolean 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 Boolean IWRelOnKeyBag < Element, Key, ElementOps, Base >::
- addOrReplaceElementWithKey (Element const& element)
- { return ivBase.addOrReplaceElementWithKey (element);
- }
-
- template < class Element, class Key, class ElementOps, class Base >
- inline Boolean 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 Boolean 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 Boolean 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 Boolean IWRelOnKeyBag < Element, Key, ElementOps, Base>::
- setToNextWithDifferentKey (ICursor& icursor) const
- { return ivBase.setToNextWithDifferentKey (icursor);
- }
-