[libgee] Move to new syntax of out parameters
- From: Maciej Marcin Piechotka <mpiechotka src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgee] Move to new syntax of out parameters
- Date: Tue, 20 Sep 2011 16:56:36 +0000 (UTC)
commit 78946cc45d354634247e000f10db0fcd57fa0192
Author: Maciej Piechotka <uzytkownik2 gmail com>
Date: Tue Sep 20 18:56:00 2011 +0200
Move to new syntax of out parameters
gee/abstractmap.vala | 7 +------
gee/hashmap.vala | 6 +++---
gee/traversable.vala | 10 ++++++++++
gee/treemap.vala | 40 ++++++++++++++++++----------------------
gee/treeset.vala | 21 +++++++++------------
5 files changed, 41 insertions(+), 43 deletions(-)
---
diff --git a/gee/abstractmap.vala b/gee/abstractmap.vala
index ea6982d..33a1ab6 100644
--- a/gee/abstractmap.vala
+++ b/gee/abstractmap.vala
@@ -104,12 +104,7 @@ public abstract class Gee.AbstractMap<K,V> : Object, Traversable<Map.Entry<K,V>>
* { inheritDoc}
*/
public bool remove (K key, out V? value = null) {
- V removed_value;
- bool result = unset (key, out removed_value);
- if (&value != null) {
- value = removed_value;
- }
- return result;
+ return unset (key, out value);
}
/**
diff --git a/gee/hashmap.vala b/gee/hashmap.vala
index aeb5c96..57f1412 100644
--- a/gee/hashmap.vala
+++ b/gee/hashmap.vala
@@ -211,9 +211,7 @@ public class Gee.HashMap<K,V> : Gee.AbstractMap<K,V> {
if (*node != null) {
Node<K,V> next = (owned) (*node)->next;
- if (&value != null) {
- value = (owned) (*node)->value;
- }
+ value = (owned) (*node)->value;
(*node)->key = null;
(*node)->value = null;
@@ -225,6 +223,8 @@ public class Gee.HashMap<K,V> : Gee.AbstractMap<K,V> {
resize ();
_stamp++;
return true;
+ } else {
+ value = null;
}
return false;
}
diff --git a/gee/traversable.vala b/gee/traversable.vala
index a9ade84..9af35eb 100644
--- a/gee/traversable.vala
+++ b/gee/traversable.vala
@@ -142,6 +142,7 @@ public interface Gee.Traversable<G> : Object
return stream<A>((state, item, out val) => {
switch (state) {
case Stream.YIELD:
+ val = null;
return Stream.CONTINUE;
case Stream.CONTINUE:
val = new Lazy<A>(() => {
@@ -151,6 +152,7 @@ public interface Gee.Traversable<G> : Object
});
return Stream.YIELD;
case Stream.END:
+ val = null;
return Stream.END;
default:
assert_not_reached ();
@@ -181,6 +183,7 @@ public interface Gee.Traversable<G> : Object
switch (state) {
case Stream.YIELD:
if (seed_emitted) {
+ val = null;
return Stream.CONTINUE;
} else {
val = new Lazy<A>.from_value (seed);
@@ -196,6 +199,7 @@ public interface Gee.Traversable<G> : Object
});
return Stream.YIELD;
case Stream.END:
+ val = null;
return Stream.END;
default:
assert_not_reached ();
@@ -253,6 +257,7 @@ public interface Gee.Traversable<G> : Object
return input.stream<G> ((state, item, out val) => {
switch (state) {
case Stream.YIELD:
+ val = null;
return Stream.CONTINUE;
case Stream.CONTINUE:
G g = item.get ();
@@ -260,9 +265,11 @@ public interface Gee.Traversable<G> : Object
val = item;
return Stream.YIELD;
} else {
+ val = null;
return Stream.CONTINUE;
}
case Stream.END:
+ val = null;
return Stream.END;
default:
assert_not_reached ();
@@ -282,6 +289,7 @@ public interface Gee.Traversable<G> : Object
return input.stream<G> ((state, item, out val) => {
switch (state) {
case Stream.YIELD:
+ val = null;
if (offset > 0) {
return Stream.CONTINUE;
} else if (length > 0) {
@@ -297,10 +305,12 @@ public interface Gee.Traversable<G> : Object
val = item;
return Stream.YIELD;
} else {
+ val = null;
offset--;
return Stream.CONTINUE;
}
case Stream.END:
+ val = null;
return Stream.END;
default:
assert_not_reached ();
diff --git a/gee/treemap.vala b/gee/treemap.vala
index 9da2b8e..02587c6 100644
--- a/gee/treemap.vala
+++ b/gee/treemap.vala
@@ -195,8 +195,9 @@ public class Gee.TreeMap<K,V> : Gee.AbstractSortedMap<K,V> {
return null;
}
- private bool set_to_node (ref Node<K, V>? node, K key, V value, out V old_value, Node<K, V>? prev, Node<K, V>? next) {
+ private bool set_to_node (ref Node<K, V>? node, K key, V value, out V? old_value, Node<K, V>? prev, Node<K, V>? next) {
if (node == null) {
+ old_value = null;
node = new Node<K,V> (key, value, prev, next);
if (prev == null) {
first = node;
@@ -212,6 +213,7 @@ public class Gee.TreeMap<K,V> : Gee.AbstractSortedMap<K,V> {
bool changed;
if (cmp == 0) {
if (value_equal_func (value, node.value)) {
+ old_value = null;
changed = false;
} else {
old_value = (owned) node.value;
@@ -257,12 +259,8 @@ public class Gee.TreeMap<K,V> : Gee.AbstractSortedMap<K,V> {
private void fix_removal (ref Node<K,V> node, out K? key = null, out V? value) {
Node<K,V> n = (owned) node;
- if (&key != null)
- key = (owned) n.key;
- else
- n.key = null;
- if (&value != null)
- value = (owned) n.value;
+ key = (owned) n.key;
+ value = (owned) n.value;
if (n.prev != null) {
n.prev.next = n.next;
} else {
@@ -293,12 +291,18 @@ public class Gee.TreeMap<K,V> : Gee.AbstractSortedMap<K,V> {
fix_up (ref node);
}
- private bool remove_from_node (ref Node<K, V>? node, K key, out V value, out unowned Node<K, V>? prev = null, out unowned Node<K, V>? next = null) {
+ private bool remove_from_node (ref Node<K, V>? node, K key, out V? value, out unowned Node<K, V>? prev = null, out unowned Node<K, V>? next = null) {
if (node == null) {
+ value = null;
+ next = null;
+ prev = null;
return false;
} else if (key_compare_func (key, node.key) < 0) {
weak Node<K,V> left = node.left;
if (left == null) {
+ value = null;
+ next = null;
+ prev = null;
return false;
}
if (node.left != null && is_black (left) && is_black (left.left)) {
@@ -314,10 +318,8 @@ public class Gee.TreeMap<K,V> : Gee.AbstractSortedMap<K,V> {
weak Node<K,V>? r = node.right;
if (key_compare_func (key, node.key) == 0 && r == null) {
- if (&prev != null)
- prev = node.prev;
- if (&next != null)
- next = node.next;
+ prev = node.prev;
+ next = node.next;
fix_removal (ref node, null, out value);
return true;
}
@@ -326,10 +328,8 @@ public class Gee.TreeMap<K,V> : Gee.AbstractSortedMap<K,V> {
}
if (key_compare_func (key, node.key) == 0) {
value = (owned) node.value;
- if (&prev != null)
- prev = node.prev;
- if (&next != null)
- next = node;
+ prev = node.prev;
+ next = node;
remove_minimal (ref node.right, out node.key, out node.value);
fix_up (ref node);
return true;
@@ -357,12 +357,7 @@ public class Gee.TreeMap<K,V> : Gee.AbstractSortedMap<K,V> {
* { inheritDoc}
*/
public override bool unset (K key, out V? value = null) {
- V node_value;
- bool b = remove_from_node (ref root, key, out node_value);
-
- if (&value != null) {
- value = (owned) node_value;
- }
+ bool b = remove_from_node (ref root, key, out value);
if (root != null) {
root.color = Node.Color.BLACK;
@@ -822,6 +817,7 @@ public class Gee.TreeMap<K,V> : Gee.AbstractSortedMap<K,V> {
}
public override bool unset (K key, out V? value = null) {
+ value = null;
return range.in_range (key) && map.unset (key, out value);
}
diff --git a/gee/treeset.vala b/gee/treeset.vala
index 55be728..6bcc0a5 100644
--- a/gee/treeset.vala
+++ b/gee/treeset.vala
@@ -219,10 +219,7 @@ public class Gee.TreeSet<G> : AbstractSortedSet<G> {
private inline void fix_removal (ref Node<G> node, out G? key = null) {
Node<G> n = (owned)node;
- if (&key != null)
- key = (owned) n.key;
- else
- n.key = null;
+ key = (owned) n.key;
if (n.prev != null) {
n.prev.next = n.next;
} else {
@@ -257,10 +254,14 @@ public class Gee.TreeSet<G> : AbstractSortedSet<G> {
stdout.printf ("Removing %s from %s\n", (string)item, node != null ? (string)node.key : null);
#endif
if (node == null) {
+ prev = null;
+ next = null;
return false;
} else if (compare_func (item, node.key) < 0) {
weak Node<G> left = node.left;
if (left == null) {
+ prev = null;
+ next = null;
return false;
}
if (is_black (left) && is_black (left.left)) {
@@ -276,10 +277,8 @@ public class Gee.TreeSet<G> : AbstractSortedSet<G> {
weak Node<G>? r = node.right;
if (compare_func (item, node.key) == 0 && r == null) {
- if (&prev != null)
- prev = node.prev;
- if (&next != null)
- next = node.next;
+ prev = node.prev;
+ next = node.next;
fix_removal (ref node, null);
return true;
}
@@ -287,10 +286,8 @@ public class Gee.TreeSet<G> : AbstractSortedSet<G> {
move_red_right (ref node);
}
if (compare_func (item, node.key) == 0) {
- if (&prev != null)
- prev = node.prev;
- if (&next != null)
- next = node;
+ prev = node.prev;
+ next = node;
remove_minimal (ref node.right, out node.key);
fix_up (ref node);
return true;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]