diff options
author | Rich Hickey <richhickey@gmail.com> | 2006-07-04 18:02:35 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2006-07-04 18:02:35 +0000 |
commit | 45928ffe7f2b9e59633fb7931f2a3c75c9d6589f (patch) | |
tree | cdade057178a2795ee134ea946cefff882c7c035 /src/cli/runtime/PersistentListMap.cs | |
parent | 86a8196bbba908bf6cf3f5d9ab3d3ebb7f94a646 (diff) |
added val to add(), throws exception if key present
Diffstat (limited to 'src/cli/runtime/PersistentListMap.cs')
-rw-r--r-- | src/cli/runtime/PersistentListMap.cs | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/cli/runtime/PersistentListMap.cs b/src/cli/runtime/PersistentListMap.cs index dc432fcd..04065097 100644 --- a/src/cli/runtime/PersistentListMap.cs +++ b/src/cli/runtime/PersistentListMap.cs @@ -60,8 +60,8 @@ public virtual IMapEntry find(Object key){ return null;
}
-public virtual IPersistentMap add(Object key){
- return put(key, null);
+public virtual IPersistentMap add(Object key, Object val){
+ return put(key, val);
}
public virtual IPersistentMap put(Object key, Object val){
@@ -185,6 +185,15 @@ internal class Tail : PersistentListMap { return null;
}
+ override public IPersistentMap add(Object key, Object val)
+ {
+ if (equalKey(key, _key))
+ {
+ throw new Exception("Key already present");
+ }
+ return new Link(key, val, this);
+ }
+
override public IPersistentMap put(Object key, Object val)
{
if(equalKey(key,_key)) //replace
@@ -255,6 +264,16 @@ internal class Link : PersistentListMap { return _rest.find(key);
}
+ override public IPersistentMap add(Object key, Object val)
+ {
+ IMapEntry e = find(key);
+ if(e != null)
+ {
+ throw new Exception("Key already present");
+ }
+ return new Link(key,val,this);
+ }
+
override public IPersistentMap put(Object key, Object val)
{
IMapEntry e = find(key);
|