diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-05-30 21:23:25 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-05-30 21:23:25 +0000 |
commit | dbeb11e22fd1a30610b07cf27505e5ec0fd6e1e7 (patch) | |
tree | 4f2ee70746644f2adeb683864eeb6363a338a685 | |
parent | 2c04ba2ab5288e9d0952a4174889da422d73783d (diff) |
added aset!, aclone
-rw-r--r-- | src/jvm/clojure/lang/Numbers.java | 55 | ||||
-rw-r--r-- | src/primmath.clj | 16 |
2 files changed, 71 insertions, 0 deletions
diff --git a/src/jvm/clojure/lang/Numbers.java b/src/jvm/clojure/lang/Numbers.java index d10d99e2..e833e693 100644 --- a/src/jvm/clojure/lang/Numbers.java +++ b/src/jvm/clojure/lang/Numbers.java @@ -1251,6 +1251,25 @@ static BitOps bitOps(Object x){ // executor.invokeAll(ops); // } +static final public class Indexer{ + int i; + + public Indexer(int i){ + this.i = i; + } + + public final int get(){ + return i; + } + + public final int inc(){ + return i += 1; + } + public final int inc(int n){ + return i += n; + } + +} static public class F{ static public float add(float x, float y) {return x + y;} static public float subtract(float x, float y) {return x - y;} @@ -1272,10 +1291,19 @@ static public class F{ return xs[i]; } + static public float aset(float[] xs, int i, float v){ + xs[i] = v; + return v; + } + static public int alength(float[] xs){ return xs.length; } + static public float[] aclone(float[] xs){ + return xs.clone(); + } + static public float[] vec(int size, Object init){ float[] ret = new float[size]; if(init instanceof Number) @@ -1648,10 +1676,19 @@ static public class D{ return xs[i]; } + static public double aset(double[] xs, int i, double v){ + xs[i] = v; + return v; + } + static public int alength(double[] xs){ return xs.length; } + static public double[] aclone(double[] xs){ + return xs.clone(); + } + static public double[] vec(int size, Object init){ double[] ret = new double[size]; if(init instanceof Number) @@ -2022,10 +2059,19 @@ static public class I{ return xs[i]; } + static public int aset(int[] xs, int i, int v){ + xs[i] = v; + return v; + } + static public int alength(int[] xs){ return xs.length; } + static public int[] aclone(int[] xs){ + return xs.clone(); + } + static public int[] vec(int size, Object init){ int[] ret = new int[size]; if(init instanceof Number) @@ -2397,10 +2443,19 @@ static public class L{ return xs[i]; } + static public long aset(long[] xs, int i, long v){ + xs[i] = v; + return v; + } + static public int alength(long[] xs){ return xs.length; } + static public long[] aclone(long[] xs){ + return xs.clone(); + } + static public long[] vec(int size, Object init){ long[] ret = new long[size]; if(init instanceof Number) diff --git a/src/primmath.clj b/src/primmath.clj index 87f78ccb..877968ba 100644 --- a/src/primmath.clj +++ b/src/primmath.clj @@ -27,6 +27,10 @@ (definline negate [x] `(. Numbers$I negate ~x)) (definline aget [xs i] `(. Numbers$I aget ~xs ~i)) + +(definline aset! [xs i v] `(. Numbers$I aset ~xs ~i ~v)) +(definline aclone [xs] `(. Numbers$I aclone ~xs)) + (definline alength [xs] `(. Numbers$I alength ~xs)) (defn array @@ -103,6 +107,10 @@ (definline negate [x] `(. Numbers$L negate ~x)) (definline aget [xs i] `(. Numbers$L aget ~xs ~i)) + +(definline aset! [xs i v] `(. Numbers$L aset ~xs ~i ~v)) +(definline aclone [xs] `(. Numbers$L aclone ~xs)) + (definline alength [xs] `(. Numbers$L alength ~xs)) (defn array @@ -179,6 +187,10 @@ (definline negate [x] `(. Numbers$F negate ~x)) (definline aget [xs i] `(. Numbers$F aget ~xs ~i)) + +(definline aset! [xs i v] `(. Numbers$F aset ~xs ~i ~v)) +(definline aclone [xs] `(. Numbers$F aclone ~xs)) + (definline alength [xs] `(. Numbers$F alength ~xs)) (defn array @@ -255,6 +267,10 @@ (definline negate [x] `(. Numbers$D negate ~x)) (definline aget [xs i] `(. Numbers$D aget ~xs ~i)) + +(definline aset! [xs i v] `(. Numbers$D aset ~xs ~i ~v)) +(definline aclone [xs] `(. Numbers$D aclone ~xs)) + (definline alength [xs] `(. Numbers$D alength ~xs)) (defn array |