summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-05-30 21:23:25 +0000
committerRich Hickey <richhickey@gmail.com>2008-05-30 21:23:25 +0000
commitdbeb11e22fd1a30610b07cf27505e5ec0fd6e1e7 (patch)
tree4f2ee70746644f2adeb683864eeb6363a338a685 /src
parent2c04ba2ab5288e9d0952a4174889da422d73783d (diff)
added aset!, aclone
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/Numbers.java55
-rw-r--r--src/primmath.clj16
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