|
@@ -5,7 +5,7 @@ namespace Invercargill.DataStructures {
|
|
|
|
|
|
private class SeriesNode<T> {
|
|
private class SeriesNode<T> {
|
|
public bool is_red;
|
|
public bool is_red;
|
|
- public Series<T> values { get; private set; }
|
|
|
|
|
|
+ public Vector<T> values { get; private set; }
|
|
public SeriesNode<T> left_child { get; set; }
|
|
public SeriesNode<T> left_child { get; set; }
|
|
public SeriesNode<T> right_child { get; set; }
|
|
public SeriesNode<T> right_child { get; set; }
|
|
public SeriesNode<T> parent { get; set; }
|
|
public SeriesNode<T> parent { get; set; }
|
|
@@ -14,7 +14,7 @@ namespace Invercargill.DataStructures {
|
|
is_red = true;
|
|
is_red = true;
|
|
left_child = nil;
|
|
left_child = nil;
|
|
right_child = nil;
|
|
right_child = nil;
|
|
- values = new Series<T>();
|
|
|
|
|
|
+ values = new Vector<T>();
|
|
values.add(item);
|
|
values.add(item);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -22,14 +22,10 @@ namespace Invercargill.DataStructures {
|
|
is_red = false;
|
|
is_red = false;
|
|
left_child = this;
|
|
left_child = this;
|
|
right_child = this;
|
|
right_child = this;
|
|
- values = new Series<T>();
|
|
|
|
|
|
+ values = new Vector<T>();
|
|
}
|
|
}
|
|
|
|
|
|
public T sample() {
|
|
public T sample() {
|
|
- assert_nonnull (this);
|
|
|
|
- assert_nonnull (left_child);
|
|
|
|
- assert_nonnull (right_child);
|
|
|
|
- assert_nonnull (values);
|
|
|
|
return values.first_or_default();
|
|
return values.first_or_default();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -37,11 +33,6 @@ namespace Invercargill.DataStructures {
|
|
values.add(value);
|
|
values.add(value);
|
|
}
|
|
}
|
|
|
|
|
|
- ~SeriesNode() {
|
|
|
|
- if(values.count() > 0)
|
|
|
|
- print(@"Byebye $((int)sample())\n");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
// public void remove_all_values_where (PredicateDelegate<T> predicate) {
|
|
// public void remove_all_values_where (PredicateDelegate<T> predicate) {
|
|
// values = values.where(v => !predicate(v)).to_buffer();
|
|
// values = values.where(v => !predicate(v)).to_buffer();
|
|
// }
|
|
// }
|
|
@@ -49,15 +40,15 @@ namespace Invercargill.DataStructures {
|
|
|
|
|
|
private SeriesNode<T> root;
|
|
private SeriesNode<T> root;
|
|
private SeriesNode<T> nil;
|
|
private SeriesNode<T> nil;
|
|
- private HashSet<SeriesNode<T>> nodes;
|
|
|
|
private RWLock rw_lock;
|
|
private RWLock rw_lock;
|
|
|
|
+ private Vector<SeriesNode<T>> node_refs;
|
|
private CompareDelegate<T> comparitor;
|
|
private CompareDelegate<T> comparitor;
|
|
private int n_items;
|
|
private int n_items;
|
|
|
|
|
|
public SortedSeries(owned CompareDelegate<T>? comparitor = null) {
|
|
public SortedSeries(owned CompareDelegate<T>? comparitor = null) {
|
|
nil = new SeriesNode<T>.nil();
|
|
nil = new SeriesNode<T>.nil();
|
|
- nodes = new HashSet<SeriesNode<T>> ();
|
|
|
|
- nodes.add(nil);
|
|
|
|
|
|
+ node_refs = new Vector<SeriesNode<T>>();
|
|
|
|
+ node_refs.add(nil);
|
|
root = nil;
|
|
root = nil;
|
|
rw_lock = RWLock();
|
|
rw_lock = RWLock();
|
|
n_items = 0;
|
|
n_items = 0;
|
|
@@ -105,7 +96,7 @@ namespace Invercargill.DataStructures {
|
|
}
|
|
}
|
|
|
|
|
|
var new_node = new SeriesNode<T> (item, nil);
|
|
var new_node = new SeriesNode<T> (item, nil);
|
|
- nodes.add(new_node);
|
|
|
|
|
|
+ node_refs.add(nil);
|
|
new_node.parent = parent;
|
|
new_node.parent = parent;
|
|
if(parent == null) {
|
|
if(parent == null) {
|
|
root = new_node;
|
|
root = new_node;
|