diff options
author | Rich Hickey <richhickey@gmail.com> | 2007-12-07 14:36:12 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2007-12-07 14:36:12 +0000 |
commit | 1be538f157cb9e8138dd15ea5cfb2acc5d288755 (patch) | |
tree | 646f20972df95e6afd6ad1825ef93158b2f75e1b | |
parent | 14287172ee1ea7549e83e115e8b943a94c444736 (diff) |
all map entries implement Map.Entry, added key and val functions on Map.Entries
-rw-r--r-- | src/boot.clj | 7 | ||||
-rw-r--r-- | src/jvm/clojure/lang/IMapEntry.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/MapEntry.java | 12 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentArrayMap.java | 24 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentTreeMap.java | 13 |
5 files changed, 59 insertions, 1 deletions
diff --git a/src/boot.clj b/src/boot.clj index 869ad38a..cea2a5e9 100644 --- a/src/boot.clj +++ b/src/boot.clj @@ -286,6 +286,12 @@ (defn vals [map] (. clojure.lang.RT (vals map))) +(defn key [#^java.util.Map$Entry e] + (. e (getKey))) + +(defn val [#^java.util.Map$Entry e] + (. e (getValue))) + (defn rseq [smap] (. smap (rseq))) @@ -780,6 +786,7 @@ complement constantly identity seq count peek pop nth contains get assoc dissoc find keys vals merge + key val rseq sym name namespace locking .. -> defmulti defmethod remove-method binding find-var diff --git a/src/jvm/clojure/lang/IMapEntry.java b/src/jvm/clojure/lang/IMapEntry.java index 2793c2a3..5d551fbe 100644 --- a/src/jvm/clojure/lang/IMapEntry.java +++ b/src/jvm/clojure/lang/IMapEntry.java @@ -10,7 +10,9 @@ package clojure.lang;
-public interface IMapEntry {
+import java.util.Map;
+
+public interface IMapEntry extends Map.Entry{
Object key();
Object val();
diff --git a/src/jvm/clojure/lang/MapEntry.java b/src/jvm/clojure/lang/MapEntry.java index f4e824df..e5fbd2e2 100644 --- a/src/jvm/clojure/lang/MapEntry.java +++ b/src/jvm/clojure/lang/MapEntry.java @@ -36,6 +36,18 @@ public Object val(){ return _val;
}
+public Object getKey(){
+ return key();
+}
+
+public Object getValue(){
+ return val();
+}
+
+public Object setValue(Object value){
+ throw new UnsupportedOperationException();
+}
+
public boolean containsKey(Object key){
return RT.equal(_key, key);
}
diff --git a/src/jvm/clojure/lang/PersistentArrayMap.java b/src/jvm/clojure/lang/PersistentArrayMap.java index 9a44d45f..01343bfe 100644 --- a/src/jvm/clojure/lang/PersistentArrayMap.java +++ b/src/jvm/clojure/lang/PersistentArrayMap.java @@ -209,6 +209,18 @@ static class Seq extends ASeq implements IMapEntry{ return array[i + 1];
}
+ public Object getKey(){
+ return key();
+ }
+
+ public Object getValue(){
+ return val();
+ }
+
+ public Object setValue(Object value){
+ throw new UnsupportedOperationException();
+ }
+
public Object first(){
return this;
}
@@ -263,5 +275,17 @@ static class Iter implements Iterator, IMapEntry{ public Object val(){
return array[i + 1];
}
+
+ public Object getKey(){
+ return key();
+ }
+
+ public Object getValue(){
+ return val();
+ }
+
+ public Object setValue(Object value){
+ throw new UnsupportedOperationException();
+ }
}
}
diff --git a/src/jvm/clojure/lang/PersistentTreeMap.java b/src/jvm/clojure/lang/PersistentTreeMap.java index e3ad3546..f0db84ee 100644 --- a/src/jvm/clojure/lang/PersistentTreeMap.java +++ b/src/jvm/clojure/lang/PersistentTreeMap.java @@ -419,6 +419,19 @@ static abstract class Node implements IMapEntry{ return null; } + + public Object getKey(){ + return key(); + } + + public Object getValue(){ + return val(); + } + + public Object setValue(Object value){ + throw new UnsupportedOperationException(); + } + Node left(){ return null; } |