activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tab...@apache.org
Subject svn commit: r662877 - /activemq/activemq-cpp/trunk/src/main/decaf/util/ListIterator.h
Date Tue, 03 Jun 2008 20:41:21 GMT
Author: tabish
Date: Tue Jun  3 13:41:20 2008
New Revision: 662877

URL: http://svn.apache.org/viewvc?rev=662877&view=rev
Log:
Adding a ListIterator interface to decaf.

Added:
    activemq/activemq-cpp/trunk/src/main/decaf/util/ListIterator.h

Added: activemq/activemq-cpp/trunk/src/main/decaf/util/ListIterator.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/decaf/util/ListIterator.h?rev=662877&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/decaf/util/ListIterator.h (added)
+++ activemq/activemq-cpp/trunk/src/main/decaf/util/ListIterator.h Tue Jun  3 13:41:20 2008
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DECAF_UTIL_LISTITERATOR_H_
+#define _DECAF_UTIL_LISTITERATOR_H_
+
+#include <decaf/til/Iterator.h>
+
+namespace decaf{
+namespace util{
+
+    /**
+     * An iterator for lists that allows the programmer to traverse the list
+     * in either direction, modify the list during iteration, and obtain the
+     * iterator's current position in the list.
+     *
+     * Note that the remove() and set(Object) methods are not defined in terms
+     * of the cursor position; they are defined to operate on the last element
+     * returned by a call to next() or previous().
+     */
+    template< typename E>
+    class ListIterator : public decaf::util::Iterator<E> {
+    public:
+
+        virtual ~ListIterator() {}
+
+        /**
+         * Inserts the specified element into the list (optional operation). The
+         * element is inserted immediately before the next element that would be
+         * returned by next, if any, and after the next element that would be
+         * returned by previous, if any. (If the list contains no elements, the
+         * new element becomes the sole element on the list.) The new element is
+         * inserted before the implicit cursor: a subsequent call to next would
+         * be unaffected, and a subsequent call to previous would return the new
+         * element. (This call increases by one the value that would be returned
+         * by a call to nextIndex or previousIndex.)
+         *
+         * @param e - the element to insert.
+         * @throw UnsupportedOperationException - if the add method is not
+         * supported by this list iterator.
+         * @throw IllegalArgumentException - if some aspect of this element
+         * prevents it from being added to this list.
+         */
+        virtual void add( const E& e )
+            throw ( decaf::lang::exceptions::UnsupportedOperationException,
+                    decaf::lang::exceptions::IllegalArgumentException ) = 0;
+
+        /**
+         * Replaces the last element returned by next or previous with the
+         * specified element (optional operation). This call can be made only
+         * if neither ListIterator.remove nor ListIterator.add have been
+         * called after the last call to next or previous.
+         *
+         * @param e - the element with which to replace the last element
+         * returned by next or previous.
+         * @throw UnsupportedOperationException - if the add method is not
+         * supported by this list iterator.
+         * @throw IllegalArgumentException - if some aspect of this element
+         * prevents it from being added to this list.
+         * @throw IllegalStateException - if neither next nor previous have been
+         * called, or remove or add have been called after the last call to next
+         * or previous.
+         */
+        virtual void set( const E& e ) = 0;
+
+        /**
+         * Returns the previous element in the list. This method may be called
+         * repeatedly to iterate through the list backwards, or intermixed with
+         * calls to next to go back and forth. (Note that alternating calls to
+         * next and previous will return the same element repeatedly.)
+         *
+         * @return the previous element in the list.
+         * @throw NoSuchElementException - if the iteration has no previous element.
+         */
+        virtual const E& previous() = 0;
+
+        /**
+         * Returns the index of the element that would be returned by a
+         * subsequent call to next. (Returns list size if the list iterator
+         * is at the end of the list.)
+         *
+         * @return the index of the element that would be returned by a
+         * subsequent call to next, or list size if list iterator is at end
+         * of list.
+         */
+        virtual int nextIndex() = 0;
+
+        /**
+         * Returns the index of the element that would be returned by a
+         * subsequent call to previous. (Returns -1 if the list iterator is
+         * at the beginning of the list.)
+         *
+         * @return the index of the element that would be returned by a
+         * subsequent call to previous, or -1 if list iterator is at beginning
+         * of list.
+         */
+        virtual int previousIndex() = 0;
+
+    };
+
+}}
+
+#endif /*_DECAF_UTIL_LISTITERATOR_H_*/



Mime
View raw message