diff options
-rw-r--r-- | src/jvm/clojure/lang/PersistentArray.java | 12 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentArrayList.java | 7 |
2 files changed, 10 insertions, 9 deletions
diff --git a/src/jvm/clojure/lang/PersistentArray.java b/src/jvm/clojure/lang/PersistentArray.java index 1ef6ab7c..dd85b12f 100644 --- a/src/jvm/clojure/lang/PersistentArray.java +++ b/src/jvm/clojure/lang/PersistentArray.java @@ -71,17 +71,17 @@ static class Master{ int load; final int maxLoad; final float loadFactor; - int[] basis; - volatile Master next; + final int[] basis; + Master next; - Master(int size,Object defaultVal, float loadFactor){ + Master(int size,Object defaultVal, float loadFactor, int[] basis){ this.array = new Entry[size];//new AtomicReferenceArray(size); this.defaultVal = defaultVal; this.rev = 0;//new AtomicInteger(0); this.load = 0;//new AtomicInteger(0); this.maxLoad = (int) (size * loadFactor); this.loadFactor = loadFactor; - basis = null; + this.basis = basis; next = null; } @@ -210,7 +210,7 @@ static class ValIter implements Iterator{ } static class Data{ -Master master; +final Master master; final int rev; final int baseline; final BitSet history; @@ -234,7 +234,7 @@ public PersistentArray(int size, Object defaultVal){ } public PersistentArray(int size, Object defaultVal, float loadFactor){ - this.data = new Data(new Master(size, defaultVal,loadFactor),0,0,null); + this.data = new Data(new Master(size, defaultVal,loadFactor,null),0,0,null); } PersistentArray(Master master,int rev,int baseline, BitSet history){ diff --git a/src/jvm/clojure/lang/PersistentArrayList.java b/src/jvm/clojure/lang/PersistentArrayList.java index c0276c27..f3e62434 100644 --- a/src/jvm/clojure/lang/PersistentArrayList.java +++ b/src/jvm/clojure/lang/PersistentArrayList.java @@ -95,12 +95,13 @@ private void grow() { if(data.master.next != null) //this master has been trimmed, but this rev is not yet propagated
trim();
- Master newMaster = new Master(data.master.array.length * 2, data.master.defaultVal, data.master.loadFactor);
+ Master newMaster = new Master(data.master.array.length * 2, data.master.defaultVal, data.master.loadFactor
+ ,data.master.basis);
newMaster.rev = data.master.rev;
newMaster.load = data.master.load;
- newMaster.basis = data.master.basis;
System.arraycopy(data.master.array, 0, newMaster.array, 0, data.master.array.length);
- data.master = newMaster;
+ this.data = new Data(newMaster,data.rev,data.baseline,data.history);
+ //data.master = newMaster;
}
protected PersistentArray create(Master master,int rev,int baseline, BitSet history){
|