summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-02-04 18:29:16 +0000
committerRich Hickey <richhickey@gmail.com>2008-02-04 18:29:16 +0000
commit4ee2a3c25be7bb57375683f3a807fb75ed972ab8 (patch)
treea2ccdf4bc221d5554d1b9083fe1c6a2c6ca53126 /src
parent92c7fe2d253ea34ce6d10610c3248a1e321ee673 (diff)
added get and contains support for strings and arrays, treating as associative, keyed by index, like vectors
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/RT.java17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index adf62580..8521e0f8 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -380,6 +380,12 @@ static public Object get(Object coll, Object key){
Map m = (Map) coll;
return m.get(key);
}
+ else if(key instanceof Number && (coll instanceof String || coll.getClass().isArray()))
+ {
+ int n = ((Number) key).intValue();
+ return nth(coll, n);
+ }
+
throw new UnsupportedOperationException("get not supported on this type");
}
@@ -395,6 +401,11 @@ static public Object get(Object coll, Object key, Object notFound){
return m.get(key);
return notFound;
}
+ else if(key instanceof Number && (coll instanceof String || coll.getClass().isArray()))
+ {
+ int n = ((Number) key).intValue();
+ return n >= 0 && n < count(coll) ? nth(coll, n) : notFound;
+ }
throw new UnsupportedOperationException("get not supported on this type");
}
@@ -414,6 +425,12 @@ static public Object contains(Object coll, Object key){
Map m = (Map) coll;
return m.containsKey(key) ? T : F;
}
+ else if(key instanceof Number && (coll instanceof String || coll.getClass().isArray()))
+ {
+ int n = ((Number) key).intValue();
+ return n >= 0 && n < count(coll);
+ }
+
throw new UnsupportedOperationException("contains not supported on this type");
}