summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2007-12-07 14:36:12 +0000
committerRich Hickey <richhickey@gmail.com>2007-12-07 14:36:12 +0000
commit1be538f157cb9e8138dd15ea5cfb2acc5d288755 (patch)
tree646f20972df95e6afd6ad1825ef93158b2f75e1b
parent14287172ee1ea7549e83e115e8b943a94c444736 (diff)
all map entries implement Map.Entry, added key and val functions on Map.Entries
-rw-r--r--src/boot.clj7
-rw-r--r--src/jvm/clojure/lang/IMapEntry.java4
-rw-r--r--src/jvm/clojure/lang/MapEntry.java12
-rw-r--r--src/jvm/clojure/lang/PersistentArrayMap.java24
-rw-r--r--src/jvm/clojure/lang/PersistentTreeMap.java13
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;
}