diff options
author | Rich Hickey <richhickey@gmail.com> | 2006-06-10 17:40:26 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2006-06-10 17:40:26 +0000 |
commit | 37ac3ad43d5dd08fddcbe701c82d3f28ac8f6261 (patch) | |
tree | 2733d105257b64b2cee5a1890276cc47d0d4c84a /src/cli/runtime | |
parent | 18278e3602831bb711ef1c69b92466c4e9f485ec (diff) |
added PersistentArrayMap.EMPTY, exception decls
Diffstat (limited to 'src/cli/runtime')
-rw-r--r-- | src/cli/runtime/PersistentArrayIdentityMap.cs | 9 | ||||
-rw-r--r-- | src/cli/runtime/PersistentArrayMap.cs | 13 | ||||
-rw-r--r-- | src/cli/runtime/PersistentHybridIdentityMap.cs | 2 | ||||
-rw-r--r-- | src/cli/runtime/PersistentHybridMap.cs | 2 |
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) {
|