home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (c) IBM Corp. 1992 */
- #include <ibexcept.h>
-
- template < class Element, class ElementOps >
- inline void IGTabularSequence < Element, ElementOps >::
- checkNotEmpty () const
- {
- #ifndef INO_CHECKS
- ICHECK (!isEmpty (), IEmptyException, "collection is empty")
- #endif
- }
-
- template < class Element, class ElementOps >
- inline void IGTabularSequence < Element, ElementOps >::
- checkCursorIsForThis (ICursor const& cursor) const
- {
- #ifndef INO_CHECKS
- ICHECK (((Cursor const&)cursor).ivCollection == this,
- ICursorInvalidException, "cursor not for this collection")
- #endif
- }
-
- template < class Element, class ElementOps >
- inline void IGTabularSequence < Element, ElementOps >::
- checkCursor (ICursor const& cursor) const
- {
- #ifndef INO_CHECKS
- ICHECK (((Cursor const&)cursor).ivCollection == this,
- ICursorInvalidException, "cursor not for this collection")
- ICHECK (cursor.isValid (), ICursorInvalidException, "invalid cursor")
- ICHECK (ivImpl.checkIndex (((Cursor const&)cursor).ivImpl.ivIndex),
- ICursorInvalidException, "cursor not contained in collection")
- #endif
- }
-
- template < class Element, class ElementOps >
- inline void IGTabularSequence < Element, ElementOps >::
- checkPositionExists (IPosition position) const
- {
- #ifndef INO_CHECKS
- ICHECK (1 <= position && position <= numberOfElements(),
- IPositionInvalidException, "invalid position")
- #endif
- }
-
- template < class Element, class ElementOps >
- inline void IGTabularSequence < Element, ElementOps >::
- checkPositionForAdd (IPosition position) const
- {
- #ifndef INO_CHECKS
- ICHECK (1 <= position && position <= numberOfElements() + 1,
- IPositionInvalidException, "invalid position")
- #endif
- }
-
- template <class Element, class ElementOps>
- inline IGTabularSequence <Element, ElementOps>::
- IGTabularSequence (INumber n, IBoundIndicator b)
- : ivImpl (&ivOps)
- { if (n == 0) n++;
- ivOps.ivAllocatedElements = n;
- ivOps.ivLast = ivOps.ivAllocatedElements - 1;
- ivOps.ivFirst = ivOps.ivNumberOfElements = 0;
- (Node*&)ivOps.ivNodes = new Node [ivOps.ivAllocatedElements];
- }
-
- template <class Element, class ElementOps>
- inline IGTabularSequence <Element, ElementOps>::
- IGTabularSequence (IGTabularSequence < Element, ElementOps > const& sequence)
- : ivImpl (&ivOps)
- { ivOps.ivAllocatedElements = sequence.ivOps.ivAllocatedElements;
- ivOps.ivLast = ivOps.ivAllocatedElements - 1;
- ivOps.ivFirst = ivOps.ivNumberOfElements = 0;
- (Node*&)ivOps.ivNodes = new Node [ivOps.ivAllocatedElements];
- ivOps.copy (sequence.ivOps);
- }
-
- template <class Element, class ElementOps>
- inline IGTabularSequence <Element, ElementOps>::
- ~IGTabularSequence ()
- { delete (Node*) ivOps.ivNodes;
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- add (Element const& element, ICursor& cursor)
- { addAsLast (element, cursor);
- return True;
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- add (Element const& element)
- { Cursor cursor (*this);
- return add (element, cursor);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- addAllFrom (IGTabularSequence < Element, ElementOps > const& sequence)
- {
- #ifndef INO_CHECKS
- ICHECK (this != &sequence,
- IIdenticalCollectionException, "identical collection in addAllFrom")
- #endif
- ivImpl.addAllFrom (sequence.ivImpl);
- }
-
- template <class Element, class ElementOps>
- inline Element const& IGTabularSequence <Element, ElementOps>::
- elementAt (ICursor const& cursor) const
- { checkCursor (cursor);
- return ((Node*)ivOps.ivNodes)
- [((Cursor const&)cursor).ivImpl.ivIndex].ivElement;
- }
-
- template <class Element, class ElementOps>
- inline Element& IGTabularSequence <Element, ElementOps>::
- elementAt (ICursor const& cursor)
- { checkCursor (cursor);
- return ((Node*) ivOps.ivNodes)
- [((Cursor const&)cursor).ivImpl.ivIndex].ivElement;
- }
-
- template <class Element, class ElementOps>
- inline Element const& IGTabularSequence <Element, ElementOps>::
- anyElement () const
- { return firstElement ();
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- removeAt (ICursor const& cursor)
- { checkCursor (cursor);
- INumber index = ((Cursor&)cursor).ivImpl.ivIndex;
- ivImpl.removeAt (index);
- }
-
- template < class Element, class ElementOps >
- inline INumber IGTabularSequence < Element, ElementOps >::
- removeAll (Boolean (*predicate) (Element const&, void*), void* env)
- { return ivImpl.removeAll (predicate, env);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- replaceAt (ICursor const& cursor, Element const& element)
- { checkCursor (cursor);
- cvElementOps.assign
- (((Node*) ivOps.ivNodes)
- [((Cursor const&)cursor).ivImpl.ivIndex].ivElement,
- element);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- removeAll ()
- { ivOps.ivLast = ivOps.ivAllocatedElements - 1;
- ivOps.ivFirst = ivOps.ivNumberOfElements = 0;
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- isBounded () const
- { return False;
- }
-
- template <class Element, class ElementOps>
- inline INumber IGTabularSequence <Element, ElementOps>::
- maxNumberOfElements () const
- { ICHECK (False, INotBoundedException,
- "maxNumberOfElements is undefined for unbounded collection")
- return 0;
- }
-
- template <class Element, class ElementOps>
- inline INumber IGTabularSequence <Element, ElementOps>::
- numberOfElements () const
- { return ivOps.ivNumberOfElements;
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- isEmpty () const
- { return ivOps.ivNumberOfElements == 0;
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- isFull () const
- { return False;
- }
-
- template <class Element, class ElementOps>
- inline ICursor* IGTabularSequence <Element, ElementOps>::
- newCursor () const
- { return new Cursor (*this);
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- setToFirst (ICursor& cursor) const
- { checkCursorIsForThis (cursor);
- return ivImpl.setToFirst (((Cursor&)cursor).ivImpl);
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- setToNext (ICursor& cursor) const
- { checkCursor (cursor);
- return ivImpl.setToNext (((Cursor&)cursor).ivImpl);
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- allElementsDo (Boolean (*function) (Element&, void*), void* env)
- { return ivImpl.allElementsDo (function, env);
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- allElementsDo (IIterator < Element > & iterator)
- { return ivImpl.allElementsDo (&iterator);
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- allElementsDo (Boolean (*function) (Element const&, void*),
- void* env) const
- { return ivImpl.allElementsDo (function, env);
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- allElementsDo (IConstantIterator < Element > & iterator) const
- { return ivImpl.allElementsDo (&iterator);
- }
-
- template <class Element, class ElementOps>
- inline IGTabularSequence <Element, ElementOps>&
- IGTabularSequence <Element, ElementOps>::
- operator = (IGTabularSequence < Element, ElementOps > const& sequence)
- { ivImpl.operator= (sequence.ivImpl);
- return *this;
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- removeFirst ()
- { checkNotEmpty ();
- INumber index = ivOps.ivFirst;
- ivImpl.removeAt (index);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- removeLast ()
- { checkNotEmpty ();
- INumber index = ivOps.ivLast;
- ivImpl.removeAt (index);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- removeAtPosition (IPosition position)
- { checkPositionExists (position);
- ITabularSequenceImpl::Cursor cursor;
- ivImpl.setToPosition (position, cursor);
- ivImpl.removeAt (cursor.ivIndex);
- }
-
- template <class Element, class ElementOps>
- inline Element const& IGTabularSequence <Element, ElementOps>::
- firstElement () const
- { checkNotEmpty ();
- return ((Node*) ivOps.ivNodes) [ivOps.ivFirst].ivElement;
- }
-
- template <class Element, class ElementOps>
- inline Element const& IGTabularSequence <Element, ElementOps>::
- lastElement () const
- { checkNotEmpty ();
- return ((Node*) ivOps.ivNodes) [ivOps.ivLast].ivElement;
- }
-
- template <class Element, class ElementOps>
- inline Element const& IGTabularSequence <Element, ElementOps>::
- elementAtPosition (IPosition position) const
- { checkPositionExists (position);
- ITabularSequenceImpl::Cursor cursor;
- ivImpl.setToPosition (position, cursor);
- return ((Node*) ivOps.ivNodes) [cursor.ivIndex].ivElement;
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- setToLast (ICursor& cursor) const
- { checkCursorIsForThis (cursor);
- return ivImpl.setToLast (((Cursor&)cursor).ivImpl);
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- setToPrevious (ICursor& cursor) const
- { checkCursor (cursor);
- return ivImpl.setToPrevious (((Cursor&)cursor).ivImpl);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- setToPosition (IPosition position, ICursor& cursor) const
- { checkPositionExists (position);
- checkCursorIsForThis (cursor);
- ivImpl.setToPosition (position, ((Cursor&)cursor).ivImpl);
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- isFirst (ICursor const& cursor) const
- { checkCursor (cursor);
- return ((Cursor const&)cursor).ivImpl.ivIndex == ivOps.ivFirst;
- }
-
- template <class Element, class ElementOps>
- inline Boolean IGTabularSequence <Element, ElementOps>::
- isLast (ICursor const& cursor) const
- { checkCursor (cursor);
- return ((Cursor const&)cursor).ivImpl.ivIndex == ivOps.ivLast;
- }
-
- template <class Element, class ElementOps>
- inline long IGTabularSequence <Element, ElementOps>::
- compare (IGTabularSequence < Element, ElementOps > const& sequence,
- long (*comparisonFunction) (Element const&, Element const&)) const {
- return ivImpl.compare (sequence.ivImpl, comparisonFunction);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- addAsFirst (Element const& element)
- { Cursor cursor (*this);
- addAsFirst (element, cursor);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- addAsFirst (Element const& element, ICursor& cursor)
- { checkCursorIsForThis (cursor);
- ivImpl.addAsFirst (&element, ((Cursor&)cursor).ivImpl);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- addAsLast (Element const& element)
- { Cursor cursor (*this);
- addAsLast (element, cursor);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- addAsLast (Element const& element, ICursor& cursor)
- { checkCursorIsForThis (cursor);
- ivImpl.addAsLast (&element, ((Cursor&)cursor).ivImpl);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- addAsNext (Element const& element, ICursor& cursor)
- { checkCursor (cursor);
- ivImpl.addAsNext (&element, ((Cursor&)cursor).ivImpl);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- addAsPrevious (Element const& element, ICursor& cursor)
- { checkCursor (cursor);
- ivImpl.addAsPrevious (&element, ((Cursor&)cursor).ivImpl);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- addAtPosition (IPosition position, Element const& element)
- { Cursor cursor (*this);
- addAtPosition (position, element, cursor);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- addAtPosition (IPosition position,
- Element const& element,
- ICursor& cursor)
- { checkPositionForAdd (position);
- checkCursorIsForThis (cursor);
- ivImpl.addAtPosition (position, &element, ((Cursor&)cursor).ivImpl);
- }
-
- template <class Element, class ElementOps>
- inline void IGTabularSequence <Element, ElementOps>::
- sort (long (*comparisonFunction) (Element const&, Element const&))
- { ivImpl.sort (comparisonFunction);
- }