diff options
author | Rich Hickey <richhickey@gmail.com> | 2010-02-09 14:51:24 -0500 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2010-02-09 14:51:24 -0500 |
commit | d4bfd14ddd426b9d6f72fb52d8fa5257a62fd55c (patch) | |
tree | 1833e44eb9d0bb42ee2af1008a685226e9e3ca38 | |
parent | 2855e34106b2cacd4614f2b7e31f1536b4b849bc (diff) |
added object-array
-rw-r--r-- | src/clj/clojure/core.clj | 6 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 14 |
2 files changed, 18 insertions, 2 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index 23d91afa..76d96529 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -3690,6 +3690,12 @@ ([size-or-seq] (. clojure.lang.Numbers double_array size-or-seq)) ([size init-val-or-seq] (. clojure.lang.Numbers double_array size init-val-or-seq))) +(defn object-array + "Creates an array of objects" + {:inline (fn [arg] `(. clojure.lang.RT object_array ~arg)) + :inline-arities #{1}} + ([size-or-seq] (. clojure.lang.RT object_array size-or-seq))) + (defn int-array "Creates an array of ints" {:inline (fn [& args] `(. clojure.lang.Numbers int_array ~@args)) diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index 044cd9ea..9fa16a4c 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -1075,8 +1075,18 @@ static public ISeq arrayToList(Object[] a) throws Exception{ return ret; } -static public Object[] objectArray(int n){ - return new Object[n]; +static public Object[] object_array(Object sizeOrSeq){ + if(sizeOrSeq instanceof Number) + return new Object[((Number) sizeOrSeq).intValue()]; + else + { + ISeq s = RT.seq(sizeOrSeq); + int size = RT.count(s); + Object[] ret = new Object[size]; + for(int i = 0; i < size && s != null; i++, s = s.next()) + ret[i] = s.first(); + return ret; + } } static public Object[] toArray(Object coll) throws Exception{ |