[libgee] Move to new syntax of out parameters



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]