[webbeans-commits] Webbeans SVN: r2944 - ri/trunk/impl/src/main/java/org/jboss/webbeans/util/collections.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Wed Jul 1 11:48:31 EDT 2009


Author: pete.muir at jboss.org
Date: 2009-07-01 11:48:31 -0400 (Wed, 01 Jul 2009)
New Revision: 2944

Added:
   ri/trunk/impl/src/main/java/org/jboss/webbeans/util/collections/Iterators.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/util/collections/UnmodifiableIterator.java
Log:
Add an iterator concat function

Added: ri/trunk/impl/src/main/java/org/jboss/webbeans/util/collections/Iterators.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/util/collections/Iterators.java	                        (rev 0)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/util/collections/Iterators.java	2009-07-01 15:48:31 UTC (rev 2944)
@@ -0,0 +1,122 @@
+/*
+ * 
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * 
+ * Copyright (C) 2007 Google Inc.
+ *
+ * Licensed 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.
+ */
+package org.jboss.webbeans.util.collections;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * @author Pete Muir
+ * @author Kevin Bourrillion
+ * @author Scott Bonneau
+ * 
+ */
+public class Iterators
+{
+
+   static final UnmodifiableIterator<Object> EMPTY_ITERATOR = new UnmodifiableIterator<Object>()
+   {
+      public boolean hasNext()
+      {
+         return false;
+      }
+
+      public Object next()
+      {
+         throw new NoSuchElementException();
+      }
+   };
+
+   /** Returns the empty {@code Iterator}. */
+   // Casting to any type is safe since there are no actual elements.
+   @SuppressWarnings("unchecked")
+   public static <T> UnmodifiableIterator<T> emptyIterator()
+   {
+      return (UnmodifiableIterator<T>) EMPTY_ITERATOR;
+   }
+   
+   public static <T> Iterable<T> concat(final Iterable<? extends Iterable<? extends T>> inputs)
+   {
+      return new Iterable<T>()
+      {
+
+         public Iterator<T> iterator()
+         {
+            return concat(inputs.iterator());
+         }
+         
+      };
+   }
+
+   /**
+    * Combines multiple iterators into a single iterator. The returned iterator
+    * iterates across the elements of each iterator in {@code inputs}. The input
+    * iterators are not polled until necessary.
+    * 
+    * <p>
+    * The returned iterator supports {@code remove()} when the corresponding
+    * input iterator supports it. The methods of the returned iterator may throw
+    * {@code NullPointerException} if any of the input iterators are null.
+    */
+   public static <T> Iterator<T> concat(final Iterator<? extends Iterable<? extends T>> inputs)
+   {
+      if (inputs == null)
+      {
+         throw new NullPointerException();
+      }
+
+      return new Iterator<T>()
+      {
+         Iterator<? extends T> current = emptyIterator();
+         Iterator<? extends T> removeFrom;
+
+         public boolean hasNext()
+         {
+            boolean currentHasNext;
+            while (!(currentHasNext = current.hasNext()) && inputs.hasNext())
+            {
+               current = inputs.next().iterator();
+            }
+            return currentHasNext;
+         }
+
+         public T next()
+         {
+            if (!hasNext())
+            {
+               throw new NoSuchElementException();
+            }
+            removeFrom = current;
+            return current.next();
+         }
+
+         public void remove()
+         {
+            if (removeFrom == null)
+            {
+               throw new IllegalStateException("no calls to next() since last call to remove()");
+            }
+            removeFrom.remove();
+            removeFrom = null;
+         }
+      };
+   }
+
+}


Property changes on: ri/trunk/impl/src/main/java/org/jboss/webbeans/util/collections/Iterators.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: ri/trunk/impl/src/main/java/org/jboss/webbeans/util/collections/UnmodifiableIterator.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/util/collections/UnmodifiableIterator.java	                        (rev 0)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/util/collections/UnmodifiableIterator.java	2009-07-01 15:48:31 UTC (rev 2944)
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package org.jboss.webbeans.util.collections;
+
+import java.util.Iterator;
+
+/**
+ * An iterator that does not support {@link #remove}.
+ *
+ * @author Jared Levy
+ */
+public abstract class UnmodifiableIterator<E> implements Iterator<E> {
+  /**
+   * Guaranteed to throw an exception and leave the underlying data unmodified.
+   *
+   * @throws UnsupportedOperationExcepti!
 on always
+   */
+  public final void remove() {
+    throw new UnsupportedOperationException();
+  }
+}
+

Property changes on: ri/trunk/impl/src/main/java/org/jboss/webbeans/util/collections/UnmodifiableIterator.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain




More information about the weld-commits mailing list