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 IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- IWKSSetOnSeq (INumber n, IBoundIndicator b)
- : ivBase (n, b) {
- }
-
- 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 Boolean 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 Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- add (Element const& element, ICursor& cursor)
- { Boolean keyExists = locateKey (cvElementOps.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, "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& 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 (Boolean (*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)
- { // assert
- // (cvElementOps.keyOps.equal
- // (cvElementOps.key (element),
- // cvElementOps.key (ivBase.elementAt (cursor))));
- 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 Boolean 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 Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- isEmpty () const
- { return ivBase.isEmpty ();
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean 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
- { return new Cursor (*this);
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- setToFirst (ICursor& cursor) const
- { return ivBase.setToFirst (cursor);
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- setToNext (ICursor& cursor) const
- { return ivBase.setToNext (cursor);
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- allElementsDo (Boolean (*iterationFunction) (Element&, void*),
- void* env) {
- return ivBase.allElementsDo (iterationFunction, env);
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- allElementsDo (IIterator <Element>& iterator)
- { return ivBase.allElementsDo (iterator);
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- allElementsDo (Boolean (*iterationFunction) (Element const&, void*),
- void* env) const {
- return ivBase.allElementsDo (iterationFunction, env);
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- allElementsDo (IConstantIterator <Element>& iterator) const
- { return ivBase.allElementsDo (iterator);
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Key const& IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- key (Element const& element) const
- { return cvElementOps.key (element);
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean 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 Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- containsAllKeysFrom (IWKSSetOnSeq <Element, Key, ElementOps, Base>
- const& collection) const
- { Cursor cursor (collection);
- Boolean result = True;
- forCursor (cursor) {
- if (! containsElementWithKey
- (cvElementOps.key (collection.elementAt (cursor)))) {
- result = False;
- break;
- }
- }
- return result;
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- locateElementWithKey (Key const& key, ICursor& cursor) const
- { Boolean result = locateKey (key, cursor);
- if (! result) {
- cursor.invalidate ();
- }
- return result;
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean 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 Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- replaceElementWithKey (Element const& element, ICursor& cursor)
- { Boolean result = locateKey (cvElementOps.key (element), cursor);
- if (! result) {
- ivBase.replaceAt (cursor, element);
- }
- return result;
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean 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 Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- locateOrAddElementWithKey (Element const& element, ICursor& cursor)
- { Boolean result = locateKey (cvElementOps.key (element), cursor);
- if (! result) {
- add (element, cursor);
- }
- return result;
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean 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 Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- addOrReplaceElementWithKey (Element const& element, ICursor& cursor)
- { Boolean keyExists = locateKey (cvElementOps.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 Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- removeElementWithKey (Key const& key)
- { Cursor cursor (*this);
- Boolean 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);
- locateElementWithKey (key, cursor);
- 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);
- locateElementWithKey (key, cursor);
- 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 Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- setToLast (ICursor& cursor) const
- { return ivBase.setToLast (cursor);
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean 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 Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- isFirst (ICursor const& cursor) const
- { return ivBase.isFirst (cursor);
- }
-
- template <class Element, class Key, class ElementOps, class Base>
- inline Boolean 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 Boolean IWKSSetOnSeq <Element, Key, ElementOps, Base>::
- locateKey (Key const& key, ICursor& icursor) const
- { Cursor *cursor = (Cursor*)&icursor;
- forCursor (*cursor) {
- long comp =
- cvElementOps.keyOps.compare
- (cvElementOps.key (ivBase.elementAt (*cursor)), key);
- if (comp >= 0) {
- return comp == 0;
- }
- }
- return False;
- }