You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by cr...@apache.org on 2002/08/04 01:53:45 UTC

cvs commit: jakarta-struts/src/share/org/apache/struts/taglib/logic IterateTag.java

craigmcc    2002/08/03 16:53:45

  Modified:    src/share/org/apache/struts/taglib/logic IterateTag.java
  Log:
  Improve the performance of iterating over an array of objects, by avoiding the
  need to copy the array into a list.  Unfortunately, that still doesn't help
  for arrays of primitives :-(.
  
  PR: Bugzilla #11394
  Submitted by:	Eric Friedman <eric.d.friedman at wellsfargo.com>
  
  Revision  Changes    Path
  1.15      +17 -9     jakarta-struts/src/share/org/apache/struts/taglib/logic/IterateTag.java
  
  Index: IterateTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/logic/IterateTag.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- IterateTag.java	12 Mar 2002 05:35:40 -0000	1.14
  +++ IterateTag.java	3 Aug 2002 23:53:45 -0000	1.15
  @@ -65,6 +65,7 @@
   
   import java.lang.reflect.Array;
   import java.util.ArrayList;
  +import java.util.Arrays;
   import java.util.Collection;
   import java.util.Enumeration;
   import java.util.Iterator;
  @@ -311,12 +312,19 @@
   
   	// Construct an iterator for this collection
   	if (collection.getClass().isArray()) {
  -            int length = Array.getLength(collection);
  -            ArrayList c = new ArrayList(length);
  -            for (int i = 0; i < length; i++) {
  -                c.add(Array.get(collection, i));
  +            try {
  +                // If we're lucky, it is an array of objects
  +                // that we can iterate over with no copying
  +                iterator = Arrays.asList((Object[]) collection).iterator();
  +            } catch (ClassCastException e) {
  +                // Rats -- it is an array of primitives
  +                int length = Array.getLength(collection);
  +                ArrayList c = new ArrayList(length);
  +                for (int i = 0; i < length; i++) {
  +                    c.add(Array.get(collection, i));
  +                }
  +                iterator = c.iterator();
               }
  -            iterator = c.iterator();
   	} else if (collection instanceof Collection)
   	    iterator = ((Collection) collection).iterator();
   	else if (collection instanceof Iterator)
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>