]> git.lizzy.rs Git - rust.git/commitdiff
auto merge of #15945 : treeman/rust/doc-smallint-update, r=alexcrichton
authorbors <bors@rust-lang.org>
Thu, 24 Jul 2014 22:51:10 +0000 (22:51 +0000)
committerbors <bors@rust-lang.org>
Thu, 24 Jul 2014 22:51:10 +0000 (22:51 +0000)
Forgot two methods, but @alexcrichton was a bit too quick to accept  #15943, so I made a new PR.

src/libcollections/smallintmap.rs

index 3bc2dbe5cbbb399ff02674b287f628dd031ee3fa..994a6d6c5f3b95120880ee902a76e89146d5b2e1 100644 (file)
@@ -279,6 +279,50 @@ pub fn move_iter(&mut self)
 }
 
 impl<V:Clone> SmallIntMap<V> {
+    /// Update a value in the map. If the key already exists in the map,
+    /// modify the value with `ff` taking `oldval, newval`.
+    /// Otherwise set the value to `newval`.
+    /// Return `true` if the key did not already exist in the map.
+    ///
+    /// # Example
+    ///
+    /// ```
+    /// use std::collections::SmallIntMap;
+    ///
+    /// let mut map = SmallIntMap::new();
+    ///
+    /// // Key does not exist, will do a simple insert
+    /// assert!(map.update(1, vec![1i, 2], |old, new| old.append(new.as_slice())));
+    /// assert_eq!(map.get(&1), &vec![1i, 2]);
+    ///
+    /// // Key exists, update the value
+    /// assert!(!map.update(1, vec![3i, 4], |old, new| old.append(new.as_slice())));
+    /// assert_eq!(map.get(&1), &vec![1i, 2, 3, 4]);
+    /// ```
+    pub fn update(&mut self, key: uint, newval: V, ff: |V, V| -> V) -> bool {
+        self.update_with_key(key, newval, |_k, v, v1| ff(v,v1))
+    }
+
+    /// Update a value in the map. If the key already exists in the map,
+    /// modify the value with `ff` taking `key, oldval, newval`.
+    /// Otherwise set the value to `newval`.
+    /// Return `true` if the key did not already exist in the map.
+    ///
+    /// # Example
+    ///
+    /// ```
+    /// use std::collections::SmallIntMap;
+    ///
+    /// let mut map = SmallIntMap::new();
+    ///
+    /// // Key does not exist, will do a simple insert
+    /// assert!(map.update_with_key(7, 10, |key, old, new| (old + new) % key));
+    /// assert_eq!(map.get(&7), &10);
+    ///
+    /// // Key exists, update the value
+    /// assert!(!map.update_with_key(7, 20, |key, old, new| (old + new) % key));
+    /// assert_eq!(map.get(&7), &2);
+    /// ```
     pub fn update_with_key(&mut self,
                            key: uint,
                            val: V,
@@ -290,10 +334,6 @@ pub fn update_with_key(&mut self,
         };
         self.insert(key, new_val)
     }
-
-    pub fn update(&mut self, key: uint, newval: V, ff: |V, V| -> V) -> bool {
-        self.update_with_key(key, newval, |_k, v, v1| ff(v,v1))
-    }
 }
 
 impl<V: fmt::Show> fmt::Show for SmallIntMap<V> {