summaryrefslogtreecommitdiff
path: root/src/jvm/clojure/lang/Numbers.java
diff options
context:
space:
mode:
authorunknown <Ninja@.(none)>2009-11-11 16:34:14 +1100
committerRich Hickey <richhickey@gmail.com>2009-11-24 08:30:52 -0500
commitf966d6efab1463be32213d87343aa17c9003234b (patch)
tree8a2ed5a7014212dc864c48bc596ae5fe66db539d /src/jvm/clojure/lang/Numbers.java
parentfc5157d5b85b62dbf8e809d3caf014c792abd718 (diff)
#209 Unifying array support for primatives
Signed-off-by: Rich Hickey <richhickey@gmail.com>
Diffstat (limited to 'src/jvm/clojure/lang/Numbers.java')
-rw-r--r--src/jvm/clojure/lang/Numbers.java140
1 files changed, 140 insertions, 0 deletions
diff --git a/src/jvm/clojure/lang/Numbers.java b/src/jvm/clojure/lang/Numbers.java
index 8d5fd855..04002085 100644
--- a/src/jvm/clojure/lang/Numbers.java
+++ b/src/jvm/clojure/lang/Numbers.java
@@ -1537,6 +1537,146 @@ static public long[] long_array(Object sizeOrSeq){
}
}
+static public short[] short_array(int size, Object init){
+ short[] ret = new short[size];
+ if(init instanceof Short)
+ {
+ short s = (Short) init;
+ for(int i = 0; i < ret.length; i++)
+ ret[i] = s;
+ }
+ else
+ {
+ ISeq s = RT.seq(init);
+ for(int i = 0; i < size && s != null; i++, s = s.next())
+ ret[i] = (Short) s.first();
+ }
+ return ret;
+}
+
+static public short[] short_array(Object sizeOrSeq){
+ if(sizeOrSeq instanceof Number)
+ return new short[((Number) sizeOrSeq).intValue()];
+ else
+ {
+ ISeq s = RT.seq(sizeOrSeq);
+ int size = RT.count(s);
+ short[] ret = new short[size];
+ for(int i = 0; i < size && s != null; i++, s = s.next())
+ ret[i] = (Short) s.first();
+ return ret;
+ }
+}
+
+static public char[] char_array(int size, Object init){
+ char[] ret = new char[size];
+ if(init instanceof Character)
+ {
+ char c = (Character) init;
+ for(int i = 0; i < ret.length; i++)
+ ret[i] = c;
+ }
+ else
+ {
+ ISeq s = RT.seq(init);
+ for(int i = 0; i < size && s != null; i++, s = s.next())
+ ret[i] = (Character) s.first();
+ }
+ return ret;
+}
+
+static public char[] char_array(Object sizeOrSeq){
+ if(sizeOrSeq instanceof Number)
+ return new char[((Number) sizeOrSeq).intValue()];
+ else
+ {
+ ISeq s = RT.seq(sizeOrSeq);
+ int size = RT.count(s);
+ char[] ret = new char[size];
+ for(int i = 0; i < size && s != null; i++, s = s.next())
+ ret[i] = (Character) s.first();
+ return ret;
+ }
+}
+
+static public byte[] byte_array(int size, Object init){
+ byte[] ret = new byte[size];
+ if(init instanceof Byte)
+ {
+ byte b = (Byte) init;
+ for(int i = 0; i < ret.length; i++)
+ ret[i] = b;
+ }
+ else
+ {
+ ISeq s = RT.seq(init);
+ for(int i = 0; i < size && s != null; i++, s = s.next())
+ ret[i] = (Byte) s.first();
+ }
+ return ret;
+}
+
+static public byte[] byte_array(Object sizeOrSeq){
+ if(sizeOrSeq instanceof Number)
+ return new byte[((Number) sizeOrSeq).intValue()];
+ else
+ {
+ ISeq s = RT.seq(sizeOrSeq);
+ int size = RT.count(s);
+ byte[] ret = new byte[size];
+ for(int i = 0; i < size && s != null; i++, s = s.next())
+ ret[i] = (Byte)s.first();
+ return ret;
+ }
+}
+
+static public boolean[] boolean_array(int size, Object init){
+ boolean[] ret = new boolean[size];
+ if(init instanceof Boolean)
+ {
+ boolean b = (Boolean) init;
+ for(int i = 0; i < ret.length; i++)
+ ret[i] = b;
+ }
+ else
+ {
+ ISeq s = RT.seq(init);
+ for(int i = 0; i < size && s != null; i++, s = s.next())
+ ret[i] = (Boolean)s.first();
+ }
+ return ret;
+}
+
+static public boolean[] boolean_array(Object sizeOrSeq){
+ if(sizeOrSeq instanceof Number)
+ return new boolean[((Number) sizeOrSeq).intValue()];
+ else
+ {
+ ISeq s = RT.seq(sizeOrSeq);
+ int size = RT.count(s);
+ boolean[] ret = new boolean[size];
+ for(int i = 0; i < size && s != null; i++, s = s.next())
+ ret[i] = (Boolean)s.first();
+ return ret;
+ }
+}
+
+static public boolean[] booleans(Object array){
+ return (boolean[]) array;
+}
+
+static public byte[] bytes(Object array){
+ return (byte[]) array;
+}
+
+static public char[] chars(Object array){
+ return (char[]) array;
+}
+
+static public short[] shorts(Object array){
+ return (short[]) array;
+}
+
static public float[] floats(Object array){
return (float[]) array;
}