summaryrefslogtreecommitdiff
path: root/src/jvm
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2009-06-24 12:19:18 -0400
committerRich Hickey <richhickey@gmail.com>2009-06-24 12:19:18 -0400
commit9b6b549df3d2d835f6c2305e6962e31b21b374af (patch)
treec25bcc2390f07c313e345a00607940a969cb5169 /src/jvm
parent72de405ca6454ecf5d76a170c7ac09900af5539f (diff)
perf tweaks in reduce
Diffstat (limited to 'src/jvm')
-rw-r--r--src/jvm/clojure/lang/ArrayChunk.java6
-rw-r--r--src/jvm/clojure/lang/IChunk.java1
2 files changed, 7 insertions, 0 deletions
diff --git a/src/jvm/clojure/lang/ArrayChunk.java b/src/jvm/clojure/lang/ArrayChunk.java
index 90264c57..d5a5a77b 100644
--- a/src/jvm/clojure/lang/ArrayChunk.java
+++ b/src/jvm/clojure/lang/ArrayChunk.java
@@ -46,4 +46,10 @@ public IChunk dropFirst(){
return new ArrayChunk(array, off + 1, end);
}
+public Object reduce(IFn f, Object start) throws Exception{
+ Object ret = f.invoke(start, array[off]);
+ for(int x = off + 1; x < end; x++)
+ ret = f.invoke(ret, array[x]);
+ return ret;
+}
}
diff --git a/src/jvm/clojure/lang/IChunk.java b/src/jvm/clojure/lang/IChunk.java
index 53e9bf08..fd667161 100644
--- a/src/jvm/clojure/lang/IChunk.java
+++ b/src/jvm/clojure/lang/IChunk.java
@@ -16,4 +16,5 @@ public interface IChunk extends Indexed{
IChunk dropFirst();
+Object reduce(IFn f, Object start) throws Exception;
}