diff options
author | Rich Hickey <richhickey@gmail.com> | 2006-10-09 18:49:42 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2006-10-09 18:49:42 +0000 |
commit | 5019080db104c1857d36948871901b4803b3e4b6 (patch) | |
tree | 3cca0985fef3acf7827f1324bb0ac775b201b150 /src | |
parent | bb50ab5256b62f29b48a03faca6bfaa116aff2ea (diff) |
added keys,vals seqs
Diffstat (limited to 'src')
-rw-r--r-- | src/cli/runtime/APersistentMap.cs | 43 | ||||
-rw-r--r-- | src/cli/runtime/RT.cs | 10 | ||||
-rw-r--r-- | src/jvm/clojure/lang/APersistentMap.java | 44 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 8 |
4 files changed, 105 insertions, 0 deletions
diff --git a/src/cli/runtime/APersistentMap.cs b/src/cli/runtime/APersistentMap.cs index e107e857..e96cdad0 100644 --- a/src/cli/runtime/APersistentMap.cs +++ b/src/cli/runtime/APersistentMap.cs @@ -67,6 +67,49 @@ override public int GetHashCode() { abstract public IPersistentMap without(object key);
+ public class KeySeq : ASeq{
+ ISeq _seq;
+
+ static public KeySeq create(ISeq seq){
+ if(seq == null)
+ return null;
+ return new KeySeq(seq);
+ }
+
+ private KeySeq(ISeq seq) {
+ this._seq = seq;
+ }
+
+ public override Object first() {
+ return ((IMapEntry)_seq.first()).key();
+ }
+
+ public override ISeq rest() {
+ return create(_seq.rest());
+ }
+}
+
+public class ValSeq : ASeq{
+ ISeq _seq;
+
+ static public ValSeq create(ISeq seq){
+ if(seq == null)
+ return null;
+ return new ValSeq(seq);
+ }
+
+ private ValSeq(ISeq seq) {
+ this._seq = seq;
+ }
+
+ public override Object first() {
+ return ((IMapEntry)_seq.first()).val();
+ }
+
+ public override ISeq rest() {
+ return create(_seq.rest());
+ }
+}
#endregion
diff --git a/src/cli/runtime/RT.cs b/src/cli/runtime/RT.cs index ef30e8f2..059bdad6 100644 --- a/src/cli/runtime/RT.cs +++ b/src/cli/runtime/RT.cs @@ -105,6 +105,16 @@ static public ISeq seq(Object coll) { throw new ArgumentException("Don't know how to create ISeq from arg");
}
+static public ISeq keys(Object coll)
+ {
+ return APersistentMap.KeySeq.create(seq(coll));
+ }
+
+static public ISeq vals(Object coll)
+ {
+ return APersistentMap.ValSeq.create(seq(coll));
+ }
+
static public Object meta(Object x)
{
if (x == null)
diff --git a/src/jvm/clojure/lang/APersistentMap.java b/src/jvm/clojure/lang/APersistentMap.java index f0e2d8da..4b5805fd 100644 --- a/src/jvm/clojure/lang/APersistentMap.java +++ b/src/jvm/clojure/lang/APersistentMap.java @@ -66,4 +66,48 @@ public int hashCode() { return _hash;
}
+static public class KeySeq extends ASeq{
+ ISeq seq;
+
+ static public KeySeq create(ISeq seq){
+ if(seq == null)
+ return null;
+ return new KeySeq(seq);
+ }
+
+ private KeySeq(ISeq seq) {
+ this.seq = seq;
+ }
+
+ public Object first() {
+ return ((IMapEntry)seq.first()).key();
+ }
+
+ public ISeq rest() {
+ return create(seq.rest());
+ }
+}
+
+static public class ValSeq extends ASeq{
+ ISeq seq;
+
+ static public ValSeq create(ISeq seq){
+ if(seq == null)
+ return null;
+ return new ValSeq(seq);
+ }
+
+ private ValSeq(ISeq seq) {
+ this.seq = seq;
+ }
+
+ public Object first() {
+ return ((IMapEntry)seq.first()).val();
+ }
+
+ public ISeq rest() {
+ return create(seq.rest());
+ }
+}
+
}
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index 037d8ca1..17b0999e 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -104,6 +104,14 @@ static public ISeq seq(Object coll) { throw new IllegalAccessError("Don't know how to create ISeq from arg"); } +static public ISeq keys(Object coll) { + return APersistentMap.KeySeq.create(seq(coll)); +} + +static public ISeq vals(Object coll) { + return APersistentMap.ValSeq.create(seq(coll)); +} + static public Object meta(Object x) { if(x == null) return null; |