summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2007-08-30 18:06:36 +0000
committerRich Hickey <richhickey@gmail.com>2007-08-30 18:06:36 +0000
commitcb96c6d66d4e77b162359495840199cb94e0ccbf (patch)
tree08b289c93329441dcb45703309cfefef1252ebcb
parentbdaeb6f6706d1e89fe289f41662507531c01fce4 (diff)
made Iterable
-rw-r--r--src/jvm/clojure/lang/PersistentVector.java26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/jvm/clojure/lang/PersistentVector.java b/src/jvm/clojure/lang/PersistentVector.java
index d572bffa..8e4f0973 100644
--- a/src/jvm/clojure/lang/PersistentVector.java
+++ b/src/jvm/clojure/lang/PersistentVector.java
@@ -12,11 +12,9 @@
package clojure.lang;
-import java.util.Vector;
-import java.util.Random;
-import java.util.List;
+import java.util.*;
-public class PersistentVector extends Obj implements IPersistentArray, IPersistentList{
+public class PersistentVector extends Obj implements IPersistentArray, IPersistentList, Iterable{
final int cnt;
final int shift;
final Object[] root;
@@ -164,7 +162,27 @@ public PersistentVector withMeta(IPersistentMap meta){
return new PersistentVector(meta, cnt, shift, root);
}
+public Iterator iterator(){
+ //todo - something more efficient
+ return new Iterator(){
+ int i = 0;
+
+ public boolean hasNext(){
+ return i < cnt;
+ }
+
+ public Object next(){
+ return nth(i++);
+ }
+
+ public void remove(){
+ throw new UnsupportedOperationException();
+ }
+ };
+}
+
static class Seq extends ASeq implements IndexedSeq{
+ //todo - something more efficient
final PersistentVector v;
final int i;