Move to new syntax of out parameters
authorMaciej Piechotka <uzytkownik2@gmail.com>
Tue, 20 Sep 2011 16:56:00 +0000 (18:56 +0200)
committerMaciej Piechotka <uzytkownik2@gmail.com>
Tue, 20 Sep 2011 16:56:00 +0000 (18:56 +0200)
gee/abstractmap.vala
gee/hashmap.vala
gee/traversable.vala
gee/treemap.vala
gee/treeset.vala

index ea6982d..33a1ab6 100644 (file)
@@ -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);
        }
 
        /**
index aeb5c96..57f1412 100644 (file)
@@ -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;
        }
index a9ade84..9af35eb 100644 (file)
@@ -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 ();
index 9da2b8e..02587c6 100644 (file)
@@ -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);
                }
 
index 55be728..6bcc0a5 100644 (file)
@@ -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;