1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
use std::collections::BTreeMap;

pub mod expands;

/// BTreeMapU expands BTreeMap
pub trait BTreeMapU<K, V> {
    /// Returns a copy of the BTreeMap where the keys have become the values and the values the keys.
    /// # Example
    ///
    /// ```
    /// use std::collections::BTreeMap;
    /// use underscore::btreemap::BTreeMapU;
    ///
    /// let mut sample = BTreeMap::new();
    /// sample.insert(1isize, 1usize);
    /// sample.insert(2isize, 2usize);
    ///
    /// let inverted = sample.invert();
    /// // => BTreeMap { 1usize: 1isize, 2usize: 2isize }
    /// ```
    fn invert(self) -> BTreeMap<V, K>;

    /// Return a copy of the BTreeMap, filtered to only have values for the whitelisted keys.
    /// # Example
    ///
    /// ```
    /// use std::collections::BTreeMap;
    /// use underscore::btreemap::BTreeMapU;
    ///
    /// let mut sample = BTreeMap::new();
    /// sample.insert(1isize, 1usize);
    /// sample.insert(2isize, 2usize);
    ///
    /// let picked = sample.pick(&vec!(1isize));
    /// // => BTreeMap { 1isize: 1usize }
    /// ```
    fn pick(self, keys: &Vec<K>) -> BTreeMap<K, V>;

    /// Return a copy of the BTreeMap, filtered to only have values for the vector whitelisted keys.
    /// pick_by_filter filters keys to pick by function.
    /// # Example
    ///
    /// ```
    /// use std::collections::BTreeMap;
    /// use underscore::btreemap::BTreeMapU;
    ///
    /// #[allow(unused_variable)]
    /// fn sample_filter(x: &isize, y: &usize) -> bool {
    ///     if *x == 1 { return true; }
    ///     return false;
    /// }
    ///
    /// let mut sample = BTreeMap::new();
    /// sample.insert(1isize, 1usize);
    /// sample.insert(2isize, 2usize);
    ///
    /// let picked = sample.pick_by_filter(sample_filter);
    /// // => BTreeMap { 1isize: 1usize }
    /// ```
    fn pick_by_filter<F: Fn(&K, &V) -> bool>(self, f: F) -> BTreeMap<K,V>;

    /// Return a copy of the BTreeMap, filtered to omit the blacklisted keys (or array of keys).
    /// omit_by_filter filters keys to pick by function.
    ///
    /// ```
    /// use std::collections::BTreeMap;
    /// use underscore::btreemap::BTreeMapU;
    ///
    /// let mut sample = BTreeMap::new();
    /// sample.insert(1isize, 1usize);
    /// sample.insert(2isize, 2usize);
    ///
    /// let omitted = sample.omit(&vec!(1isize));
    /// // => BTreeMap { 2isize: 2usize }
    /// ```
    fn omit(self, keys: &Vec<K>) -> BTreeMap<K, V>;

    /// Return a copy of the BTreeMap, filtered to omit the blacklisted keys (or array of keys).
    /// omit_by_filter filters keys to pick by function.
    /// # Example
    ///
    /// ```
    /// use std::collections::BTreeMap;
    /// use underscore::btreemap::BTreeMapU;
    ///
    /// #[allow(unused_variable)]
    /// fn sample_filter(x: &isize, y: &usize) -> bool {
    ///     if *x == 1 { return true; }
    ///     return false;
    /// }
    ///
    /// let mut sample = BTreeMap::new();
    /// sample.insert(1isize, 1usize);
    /// sample.insert(2isize, 2usize);
    ///
    /// let omitted = sample.omit_by_filter(sample_filter);
    /// // => BTreeMap { 1usize: 1isize }
    /// ```
    fn omit_by_filter<F: Fn(&K, &V) -> bool>(self, f: F) -> BTreeMap<K, V>;

    /// Fill in undefined properties in BTreeMap with the first value present in the following list of defaults objects.
    /// # Example
    ///
    /// ```
    /// use std::collections::BTreeMap;
    /// use underscore::btreemap::BTreeMapU;
    ///
    /// let mut origin = BTreeMap::new();
    /// origin.insert(1isize, 1usize);
    /// origin.insert(2isize, 2usize);
    ///
    /// let mut appends = BTreeMap::new();
    /// appends.insert(1isize, 10000usize);
    /// appends.insert(3isize, 3usize);
    ///
    /// let defaults = origin.defaults(appends);
    /// // => BTreeMap { 1isize: 1usize, 2isize: 2usize, 3isize: 3usize }
    /// ```
    fn defaults(self, appends: BTreeMap<K, V>) -> BTreeMap<K, V>;

    /// Convert a BTreeMap into a vector of (key, value) tuple pairs.
    /// # Example
    ///
    /// ```
    /// use std::collections::BTreeMap;
    /// use underscore::btreemap::BTreeMapU;
    ///
    /// let mut sample = BTreeMap::new();
    /// sample.insert(1isize, 1usize);
    /// sample.insert(2isize, 2usize);
    ///
    /// let pairs = sample.pairs();
    /// // => Vec<(1isize, 1usize), (2isize, 2usize)>
    /// ```
    fn pairs<'a>(&'a self) -> Vec<(&'a K, &'a V)>;
}