Class: Sass::Util::SubsetMap
- Inherits:
-
Object
- Object
- Sass::Util::SubsetMap
- Defined in:
- .ruby-sass/lib/sass/util/subset_map.rb
Overview
A map from sets to values. A value is set by providing a set (the “set-set”) and a value, which is then recorded as corresponding to that set. Values are accessed by providing a set (the “get-set”) and returning all values that correspond to set-sets that are subsets of the get-set.
SubsetMap preserves the order of values as they're inserted.
Instance Method Summary (collapse)
-
#[](set) ⇒ Array
Same as #get, but doesn't return the subsets of the argument for which values were found.
-
#[]=(set, value) ⇒ Object
Associates a value with a set.
-
#each_value {|Object| ... } ⇒ Object
Iterates over each value in the subset map.
-
#empty? ⇒ Boolean
Whether or not this SubsetMap has any key-value pairs.
-
#get(set) ⇒ Array<(Object, #to_set)>
Returns all values associated with subsets of `set`.
-
#initialize ⇒ SubsetMap
constructor
Creates a new, empty SubsetMap.
Constructor Details
#initialize ⇒ SubsetMap
Creates a new, empty SubsetMap.
23 24 25 26 |
# File '.ruby-sass/lib/sass/util/subset_map.rb', line 23 def initialize @hash = {} @vals = [] end |
Constructor Details
#initialize ⇒ SubsetMap
Creates a new, empty SubsetMap.
23 24 25 26 |
# File '.ruby-sass/lib/sass/util/subset_map.rb', line 23 def initialize @hash = {} @vals = [] end |
Instance Method Details
#[](set) ⇒ Array
Same as #get, but doesn't return the subsets of the argument for which values were found.
96 97 98 |
# File '.ruby-sass/lib/sass/util/subset_map.rb', line 96 def [](set) get(set).map {|v, _| v} end |
#[]=(set, value) ⇒ Object
Associates a value with a set. When `set` or any of its supersets is accessed, `value` will be among the values returned.
Note that if the same `set` is passed to this method multiple times, all given `value`s will be associated with that `set`.
This runs in `O(n)` time, where `n` is the size of `set`.
47 48 49 50 51 52 53 54 55 56 |
# File '.ruby-sass/lib/sass/util/subset_map.rb', line 47 def []=(set, value) raise ArgumentError.new("SubsetMap keys may not be empty.") if set.empty? index = @vals.size @vals << value set.each do |k| @hash[k] ||= [] @hash[k] << [set, set.to_set, index] end end |
#each_value {|Object| ... } ⇒ Object
Iterates over each value in the subset map. Ignores keys completely. If multiple keys have the same value, this will return them multiple times.
104 105 106 |
# File '.ruby-sass/lib/sass/util/subset_map.rb', line 104 def each_value @vals.each {|v| yield v} end |
#empty? ⇒ Boolean
Whether or not this SubsetMap has any key-value pairs.
31 32 33 |
# File '.ruby-sass/lib/sass/util/subset_map.rb', line 31 def empty? @hash.empty? end |
#get(set) ⇒ Array<(Object, #to_set)>
Returns all values associated with subsets of `set`.
In the worst case, this runs in `O(m*max(n, log m))` time, where `n` is the size of `set` and `m` is the number of associations in the map. However, unless many keys in the map overlap with `set`, `m` will typically be much smaller.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File '.ruby-sass/lib/sass/util/subset_map.rb', line 73 def get(set) res = set.map do |k| subsets = @hash[k] next unless subsets subsets.map do |subenum, subset, index| next unless subset.subset?(set) [index, subenum] end end.flatten(1) res.compact! res.uniq! res.sort! res.map! {|i, s| [@vals[i], s]} res end |