summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cli/runtime/PersistentListIdentityMap.cs47
-rw-r--r--src/cli/runtime/PersistentListMap.cs48
-rw-r--r--src/org/clojure/runtime/PersistentListIdentityMap.java41
-rw-r--r--src/org/clojure/runtime/PersistentListMap.java74
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);