summaryrefslogtreecommitdiff
path: root/src/cli/runtime
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2006-06-10 17:40:26 +0000
committerRich Hickey <richhickey@gmail.com>2006-06-10 17:40:26 +0000
commit37ac3ad43d5dd08fddcbe701c82d3f28ac8f6261 (patch)
tree2733d105257b64b2cee5a1890276cc47d0d4c84a /src/cli/runtime
parent18278e3602831bb711ef1c69b92466c4e9f485ec (diff)
added PersistentArrayMap.EMPTY, exception decls
Diffstat (limited to 'src/cli/runtime')
-rw-r--r--src/cli/runtime/PersistentArrayIdentityMap.cs9
-rw-r--r--src/cli/runtime/PersistentArrayMap.cs13
-rw-r--r--src/cli/runtime/PersistentHybridIdentityMap.cs2
-rw-r--r--src/cli/runtime/PersistentHybridMap.cs2
4 files changed, 21 insertions, 5 deletions
diff --git a/src/cli/runtime/PersistentArrayIdentityMap.cs b/src/cli/runtime/PersistentArrayIdentityMap.cs
index b6cc57bc..232a143a 100644
--- a/src/cli/runtime/PersistentArrayIdentityMap.cs
+++ b/src/cli/runtime/PersistentArrayIdentityMap.cs
@@ -16,7 +16,14 @@ namespace org.clojure.runtime
* ArrayMap using identity (==) comparison instead of equals
*/
public class PersistentArrayIdentityMap : PersistentArrayMap {
-public PersistentArrayIdentityMap() {
+
+new public static PersistentArrayIdentityMap EMPTY = new PersistentArrayIdentityMap();
+
+override public IPersistentMap empty() {
+ return EMPTY;
+}
+
+PersistentArrayIdentityMap() {
}
public PersistentArrayIdentityMap(Object[] init) :base(init) {
diff --git a/src/cli/runtime/PersistentArrayMap.cs b/src/cli/runtime/PersistentArrayMap.cs
index f6a30be7..ebb217a4 100644
--- a/src/cli/runtime/PersistentArrayMap.cs
+++ b/src/cli/runtime/PersistentArrayMap.cs
@@ -29,7 +29,9 @@ public class PersistentArrayMap : IPersistentMap, ISequential {
internal readonly Object[] array;
-public PersistentArrayMap(){
+ public static PersistentArrayMap EMPTY = new PersistentArrayMap();
+
+protected PersistentArrayMap(){
this.array = RT.EMPTY_ARRAY;
}
@@ -86,7 +88,10 @@ public IPersistentMap remove(Object key) {
int i = indexOf(key);
if(i >= 0) //have key, will remove
{
- Object[] newArray = new Object[array.Length - 2];
+ int newlen = array.Length - 2;
+ if (newlen == 0)
+ return empty();
+ Object[] newArray = new Object[newlen];
for(int s=0,d=0;s<array.Length;s += 2)
{
if(!equalKey(array[s],key)) //skip removal key
@@ -102,6 +107,10 @@ public IPersistentMap remove(Object key) {
return this;
}
+virtual public IPersistentMap empty() {
+ return EMPTY;
+}
+
public Object get(Object key) {
int i = indexOf(key);
if(i >= 0)
diff --git a/src/cli/runtime/PersistentHybridIdentityMap.cs b/src/cli/runtime/PersistentHybridIdentityMap.cs
index 069a14fb..e1e420e8 100644
--- a/src/cli/runtime/PersistentHybridIdentityMap.cs
+++ b/src/cli/runtime/PersistentHybridIdentityMap.cs
@@ -34,7 +34,7 @@ override public PersistentArrayMap createArrayMap(Object[] init) {
}
override internal IPersistentMap createArrayMap() {
- return new PersistentArrayIdentityMap();
+ return PersistentArrayIdentityMap.EMPTY;
}
override internal IPersistentMap createHashtableMap(Object[] init) {
diff --git a/src/cli/runtime/PersistentHybridMap.cs b/src/cli/runtime/PersistentHybridMap.cs
index 7c0cc88e..67cbfb28 100644
--- a/src/cli/runtime/PersistentHybridMap.cs
+++ b/src/cli/runtime/PersistentHybridMap.cs
@@ -89,7 +89,7 @@ virtual public PersistentArrayMap createArrayMap(Object[] init) {
}
virtual internal IPersistentMap createArrayMap() {
- return new PersistentArrayMap();
+ return PersistentArrayMap.EMPTY;
}
virtual internal IPersistentMap createHashtableMap(Object[] init) {