diff options
author | Rich Hickey <richhickey@gmail.com> | 2006-06-09 13:14:02 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2006-06-09 13:14:02 +0000 |
commit | e4e5b0612f3acbcd223e8a7c27510bf9a2dde856 (patch) | |
tree | 221c8f9ae40359b665ce65b02c2eaec4700b4948 /src | |
parent | abb9f4e91313a368103e73f729de5792d3c5e435 (diff) |
made ISequential
Diffstat (limited to 'src')
-rw-r--r-- | src/cli/runtime/PersistentListIdentityMap.cs | 47 | ||||
-rw-r--r-- | src/cli/runtime/PersistentListMap.cs | 48 | ||||
-rw-r--r-- | src/org/clojure/runtime/PersistentListIdentityMap.java | 41 | ||||
-rw-r--r-- | src/org/clojure/runtime/PersistentListMap.java | 74 |
4 files changed, 188 insertions, 22 deletions
diff --git a/src/cli/runtime/PersistentListIdentityMap.cs b/src/cli/runtime/PersistentListIdentityMap.cs index 17f0794a..330aeb5b 100644 --- a/src/cli/runtime/PersistentListIdentityMap.cs +++ b/src/cli/runtime/PersistentListIdentityMap.cs @@ -31,7 +31,7 @@ namespace org.clojure.runtime * code duplication here is kind of gross, but most efficient
*/
- public class PersistentListIdentityMap : IPersistentMap, IMapEntry
+ public class PersistentListIdentityMap : IPersistentMap, IMapEntry, ISeq, ISequential
{
static public PersistentListIdentityMap EMPTY = new PersistentListIdentityMap();
@@ -96,6 +96,21 @@ namespace org.clojure.runtime return 0;
}
+ virtual public Object first()
+ {
+ return null;
+ }
+
+ virtual public ISeq rest()
+ {
+ return null;
+ }
+
+ virtual public ISeq seq()
+ {
+ return null;
+ }
+
internal class Iter : IEnumerator
{
PersistentListIdentityMap e;
@@ -207,6 +222,21 @@ namespace org.clojure.runtime return EMPTY;
return this;
}
+
+ override public Object first()
+ {
+ return this;
+ }
+
+ override public ISeq rest()
+ {
+ return null;
+ }
+
+ override public ISeq seq()
+ {
+ return this;
+ }
}
internal class Link : PersistentListIdentityMap
@@ -289,6 +319,21 @@ namespace org.clojure.runtime return count();
}
+ override public Object first()
+ {
+ return this;
+ }
+
+ override public ISeq rest()
+ {
+ return _rest;
+ }
+
+ override public ISeq seq()
+ {
+ return this;
+ }
+
PersistentListIdentityMap create(Object k, Object v, IPersistentMap r)
{
if (r == EMPTY)
diff --git a/src/cli/runtime/PersistentListMap.cs b/src/cli/runtime/PersistentListMap.cs index fa7b3874..8f53d0db 100644 --- a/src/cli/runtime/PersistentListMap.cs +++ b/src/cli/runtime/PersistentListMap.cs @@ -27,7 +27,7 @@ namespace org.clojure.runtime *
* null keys and values are ok, but you won't be able to distinguish a null value via get - use contains/find
*/
-public class PersistentListMap : IPersistentMap, IMapEntry
+public class PersistentListMap : IPersistentMap, IMapEntry, ISeq, ISequential
{
static public PersistentListMap EMPTY = new PersistentListMap();
@@ -80,6 +80,22 @@ public virtual int capacity(){ return 0;
}
+virtual public Object first()
+ {
+ return null;
+ }
+
+virtual public ISeq rest()
+ {
+ return null;
+ }
+
+virtual public ISeq seq()
+ {
+ return null;
+ }
+
+
internal class Iter : IEnumerator{
PersistentListMap e;
bool first = true;
@@ -185,6 +201,21 @@ internal class Tail : PersistentListMap { return EMPTY;
return this;
}
+
+ override public Object first()
+ {
+ return this;
+ }
+
+ override public ISeq rest()
+ {
+ return null;
+ }
+
+ override public ISeq seq()
+ {
+ return this;
+ }
}
internal class Link : PersistentListMap {
@@ -257,6 +288,21 @@ internal class Link : PersistentListMap { return count();
}
+ override public Object first()
+ {
+ return this;
+ }
+
+ override public ISeq rest()
+ {
+ return _rest;
+ }
+
+ override public ISeq seq()
+ {
+ return this;
+ }
+
PersistentListMap create(Object k, Object v, IPersistentMap r)
{
if(r == EMPTY)
diff --git a/src/org/clojure/runtime/PersistentListIdentityMap.java b/src/org/clojure/runtime/PersistentListIdentityMap.java index 7aa982b9..bd3bd4d4 100644 --- a/src/org/clojure/runtime/PersistentListIdentityMap.java +++ b/src/org/clojure/runtime/PersistentListIdentityMap.java @@ -28,7 +28,7 @@ import java.util.Iterator; * code duplication here is kind of gross, but most efficient
*/
-public class PersistentListIdentityMap implements IPersistentMap, IMapEntry
+public class PersistentListIdentityMap implements IPersistentMap, IMapEntry, ISeq, ISequential
{
static public PersistentListIdentityMap EMPTY = new PersistentListIdentityMap();
@@ -81,6 +81,19 @@ public int capacity(){ return 0;
}
+public Object first() {
+ return null;
+}
+
+public ISeq rest() {
+ return null;
+}
+
+public ISeq seq() {
+ return null;
+}
+
+
static class Iter implements Iterator{
PersistentListIdentityMap e;
@@ -168,6 +181,18 @@ static class Tail extends PersistentListIdentityMap { return EMPTY;
return this;
}
+
+ public Object first() {
+ return this;
+ }
+
+ public ISeq rest() {
+ return null;
+ }
+
+ public ISeq seq() {
+ return this;
+ }
}
static class Link extends PersistentListIdentityMap {
@@ -238,7 +263,19 @@ static class Link extends PersistentListIdentityMap { return count();
}
- PersistentListIdentityMap create(Object k,Object v,PersistentListIdentityMap r){
+ public Object first() {
+ return this;
+ }
+
+ public ISeq rest() {
+ return _rest;
+ }
+
+ public ISeq seq() {
+ return this;
+ }
+
+ PersistentListIdentityMap create(Object k,Object v,PersistentListIdentityMap r){
if(r == EMPTY)
return new Tail(k,v);
return new Link(k, v, r);
diff --git a/src/org/clojure/runtime/PersistentListMap.java b/src/org/clojure/runtime/PersistentListMap.java index 942d98cc..314da4cc 100644 --- a/src/org/clojure/runtime/PersistentListMap.java +++ b/src/org/clojure/runtime/PersistentListMap.java @@ -26,7 +26,7 @@ import java.util.Iterator; * * null keys and values are ok, but you won't be able to distinguish a null value via get - use contains/find */ -public class PersistentListMap implements IPersistentMap, IMapEntry +public class PersistentListMap implements IPersistentMap, IMapEntry, ISeq, ISequential { static public PersistentListMap EMPTY = new PersistentListMap(); @@ -35,6 +35,7 @@ static public PersistentListMap create(Object key, Object val){ return new Tail(key, val); } + public Object key(){ return null; } @@ -79,27 +80,39 @@ public int capacity(){ return 0; } +public Object first() { + return null; +} + +public ISeq rest() { + return null; +} + +public ISeq seq() { + return null; +} + static class Iter implements Iterator{ - PersistentListMap e; + PersistentListMap e; - Iter(PersistentListMap e) - { - this.e = e; - } + Iter(PersistentListMap e) + { + this.e = e; + } - public boolean hasNext(){ - return e != EMPTY; - } + public boolean hasNext(){ + return e != EMPTY; + } - public Object next(){ - PersistentListMap ret = e; - e = e.next(); - return ret; - } + public Object next(){ + PersistentListMap ret = e; + e = e.next(); + return ret; + } - public void remove(){ - throw new UnsupportedOperationException(); - } + public void remove(){ + throw new UnsupportedOperationException(); + } } public Iterator iterator(){ @@ -166,6 +179,19 @@ static class Tail extends PersistentListMap { return EMPTY; return this; } + + public Object first() { + return this; + } + + public ISeq rest() { + return null; + } + + public ISeq seq() { + return this; + } + } static class Link extends PersistentListMap { @@ -236,7 +262,19 @@ static class Link extends PersistentListMap { return count(); } - PersistentListMap create(Object k,Object v,PersistentListMap r){ + public Object first() { + return this; + } + + public ISeq rest() { + return _rest; + } + + public ISeq seq() { + return this; + } + + PersistentListMap create(Object k,Object v,PersistentListMap r){ if(r == EMPTY) return new Tail(k,v); return new Link(k, v, r); |