summaryrefslogtreecommitdiff
path: root/src/cli/runtime/PersistentArray.cs
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2006-08-11 13:30:18 +0000
committerRich Hickey <richhickey@gmail.com>2006-08-11 13:30:18 +0000
commit0addb40116e9a293c5f0a0f0040a9f4862964c92 (patch)
treec320953fb32047e3fb521cf6e9f4d72b0f9961d9 /src/cli/runtime/PersistentArray.cs
parent28fe593fca2b06b203cb3ce3e6b7ea3eee7dd9a7 (diff)
made Master members final
Diffstat (limited to 'src/cli/runtime/PersistentArray.cs')
-rw-r--r--src/cli/runtime/PersistentArray.cs19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/cli/runtime/PersistentArray.cs b/src/cli/runtime/PersistentArray.cs
index ced36518..40e1fbc0 100644
--- a/src/cli/runtime/PersistentArray.cs
+++ b/src/cli/runtime/PersistentArray.cs
@@ -11,7 +11,6 @@
/* rich Jun 2, 2006 */
using System;
-using System.Threading;
using System.Collections;
namespace clojure.lang
@@ -41,7 +40,6 @@ namespace clojure.lang
*
* See Cohen for basic idea
* I added hybrid most-recent-sequential-range + shared-bitset idea, multi-thread-safety
- * Java implementation is lock-free
*/
public class PersistentArray : APersistentArray, IEnumerable
@@ -77,15 +75,17 @@ internal class Master{
internal int load;
internal readonly int maxLoad;
internal readonly float loadFactor;
- internal int[] basis;
- internal volatile Master next;
-
- internal Master(int size,Object defaultVal, float loadFactor){
+ internal readonly int[] basis;
+ internal Master next;
+
+ internal Master(int size, Object defaultVal, float loadFactor, int[] basis)
+ {
this.array = new Entry[size];
this.defaultVal = defaultVal;
this.rev = 0;
this.load = 0;
this.maxLoad = (int)(size * loadFactor);
+ this.basis = basis;
this.loadFactor = loadFactor;
}
internal Master(Master parent)
@@ -233,10 +233,11 @@ public void Reset()
}
internal class Data{
- internal Master master;
+ internal readonly Master master;
internal readonly int rev;
internal readonly int baseline;
internal readonly BitArray history;
+
public Data(Master master, int rev, int baseline, BitArray history)
{
this.master = master;
@@ -259,7 +260,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);
}
internal PersistentArray(Master master, int rev, int baseline, BitArray history)
@@ -359,7 +360,7 @@ public void isolate()
}
Entry getEntry(int i){
-for (Entry e = (Entry)data.master.array[i]; e != null; e = e.rest())
+for (Entry e = data.master.array[i]; e != null; e = e.rest())
{
if (e.rev <= data.rev)
{