diff options
-rw-r--r-- | src/cli/runtime/PerisistentArrayList.cs | 16 | ||||
-rw-r--r-- | src/cli/runtime/PersistentArray.cs | 19 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentArray.java | 16 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentArrayList.java | 12 |
4 files changed, 48 insertions, 15 deletions
diff --git a/src/cli/runtime/PerisistentArrayList.cs b/src/cli/runtime/PerisistentArrayList.cs index 5fe1bc11..06eb3d6f 100644 --- a/src/cli/runtime/PerisistentArrayList.cs +++ b/src/cli/runtime/PerisistentArrayList.cs @@ -75,7 +75,9 @@ public PersistentArrayList add(Object val) { public PersistentArrayList remove() {
if(_count == 0)
throw new InvalidOperationException();
- return new PersistentArrayList(data.master, data.rev, data.baseline, data.history, _count - 1);
+ PersistentArrayList ret = new PersistentArrayList(data.master, data.rev, data.baseline, data.history, _count - 1);
+ ret._meta = _meta;
+ return ret;
}
@@ -94,12 +96,16 @@ private void grow() { }
override internal PersistentArray create(Master master,int rev,int baseline, BitArray history){
- return new PersistentArrayList(data.master, rev, baseline, history,_count);
-}
+ PersistentArray ret = new PersistentArrayList(data.master, rev, baseline, history,_count);
+ ret._meta = _meta;
+ return ret;
+ }
override internal PersistentArray create(int size, Object defaultVal, float loadFactor) {
- return new PersistentArrayList(size, defaultVal, loadFactor,_count);
-}
+ PersistentArray ret = new PersistentArrayList(size, defaultVal, loadFactor,_count);
+ ret._meta = _meta;
+ return ret;
+ }
}
}
diff --git a/src/cli/runtime/PersistentArray.cs b/src/cli/runtime/PersistentArray.cs index 912e31cc..73b7a369 100644 --- a/src/cli/runtime/PersistentArray.cs +++ b/src/cli/runtime/PersistentArray.cs @@ -44,7 +44,7 @@ namespace clojure.lang * Java implementation is lock-free
*/
-public class PersistentArray : IEnumerable, IArray{
+public class PersistentArray : Obj, IEnumerable, IArray{
#region IEnumerable Members
@@ -61,6 +61,13 @@ public class PersistentArray : IEnumerable, IArray{ return new Seq(this, 0);
return null;
}
+
+ public override Obj withMeta(IPersistentMap meta)
+ {
+ Obj ret = (Obj)MemberwiseClone();
+ ret._meta = meta;
+ return ret;
+ }
internal class Master{
internal readonly Entry[] array;
@@ -460,16 +467,20 @@ if (data.master.rev == data.rev) internal virtual PersistentArray create(Master master, int rev, int baseline, BitArray history)
{
- return new PersistentArray(data.master, rev, baseline, history);
+ PersistentArray ret = new PersistentArray(data.master, rev, baseline, history);
+ ret._meta = _meta;
+ return ret;
}
internal virtual PersistentArray create(int size, Object defaultVal, float loadFactor)
{
- return new PersistentArray(size, defaultVal, loadFactor);
+ PersistentArray ret = new PersistentArray(size, defaultVal, loadFactor);
+ ret._meta = _meta;
+ return ret;
}
-/*
+//*
[STAThread]
static public void Main(String[] args){
if(args.Length != 3)
diff --git a/src/jvm/clojure/lang/PersistentArray.java b/src/jvm/clojure/lang/PersistentArray.java index a2f5d7b4..9a51c526 100644 --- a/src/jvm/clojure/lang/PersistentArray.java +++ b/src/jvm/clojure/lang/PersistentArray.java @@ -46,7 +46,7 @@ import java.util.Random; * I added hybrid most-recent-sequential-range + shared-bitset idea, multi-thread-safety */ -public class PersistentArray implements Iterable, IArray { +public class PersistentArray extends Obj implements Iterable, IArray, Cloneable { public Iterator iterator(){ return new ValIter(this); @@ -58,6 +58,12 @@ public ISeq seq() { return null; } +public Obj withMeta(IPersistentMap meta) throws Exception { + Obj ret = (Obj) clone(); + ret._meta = meta; + return ret; +} + static class Master{ final Entry[] array; final Object defaultVal; @@ -429,11 +435,15 @@ private PersistentArray getSetArray(){ } protected PersistentArray create(Master master,int rev,int baseline, BitSet history){ - return new PersistentArray(data.master, rev, baseline, history); + PersistentArray ret = new PersistentArray(data.master, rev, baseline, history); + ret._meta = _meta; + return ret; } protected PersistentArray create(int size, Object defaultVal, float loadFactor) { - return new PersistentArray(size, defaultVal, loadFactor); + PersistentArray ret = new PersistentArray(size, defaultVal, loadFactor); + ret._meta = _meta; + return ret; } static public void main(String[] args){ diff --git a/src/jvm/clojure/lang/PersistentArrayList.java b/src/jvm/clojure/lang/PersistentArrayList.java index fc786304..34d9b7a6 100644 --- a/src/jvm/clojure/lang/PersistentArrayList.java +++ b/src/jvm/clojure/lang/PersistentArrayList.java @@ -73,7 +73,9 @@ public PersistentArrayList add(Object val) { public PersistentArrayList remove() {
if(_count == 0)
throw new IllegalAccessError();
- return new PersistentArrayList(data.master, data.rev, data.baseline, data.history, _count - 1);
+ PersistentArrayList ret = new PersistentArrayList(data.master, data.rev, data.baseline, data.history, _count - 1);
+ ret._meta = _meta;
+ return ret;
}
@@ -92,11 +94,15 @@ private void grow() { }
protected PersistentArray create(Master master,int rev,int baseline, BitSet history){
- return new PersistentArrayList(data.master, rev, baseline, history,_count);
+ PersistentArray ret = new PersistentArrayList(data.master, rev, baseline, history,_count);
+ ret._meta = _meta;
+ return ret;
}
protected PersistentArray create(int size, Object defaultVal, float loadFactor) {
- return new PersistentArrayList(size, defaultVal, loadFactor,_count);
+ PersistentArray ret = new PersistentArrayList(size, defaultVal, loadFactor,_count);
+ ret._meta = _meta;
+ return ret;
}
}
|