Class: CharacterSet::RubyFallback::Set
- Inherits:
-
Object
- Object
- CharacterSet::RubyFallback::Set
- Includes:
- Enumerable
- Defined in:
- lib/character_set/ruby_fallback/vendored_set_classes.rb
Overview
set, vendored from github.com/ruby/set/blob/master/lib/set.rb, with comments removed and linted.
Direct Known Subclasses
Constant Summary collapse
- Set =
self
Class Method Summary collapse
Instance Method Summary collapse
- #&(enum) ⇒ Object (also: #intersection)
- #-(enum) ⇒ Object (also: #difference)
- #<=>(set) ⇒ Object
- #==(other) ⇒ Object
- #^(enum) ⇒ Object
- #add(o) ⇒ Object (also: #<<)
- #add?(o) ⇒ Boolean
- #classify ⇒ Object
- #clear ⇒ Object
- #delete(o) ⇒ Object
- #delete?(o) ⇒ Boolean
- #delete_if ⇒ Object
- #disjoint?(set) ⇒ Boolean
- #divide(&func) ⇒ Object
- #each(&block) ⇒ Object
- #empty? ⇒ Boolean
- #eql?(o) ⇒ Boolean
- #freeze ⇒ Object
- #hash ⇒ Object
- #include?(o) ⇒ Boolean (also: #member?, #===)
-
#initialize(enum = nil, &block) ⇒ Set
constructor
A new instance of Set.
- #initialize_clone(orig) ⇒ Object
- #initialize_dup(orig) ⇒ Object
- #intersect?(set) ⇒ Boolean
- #keep_if ⇒ Object
- #merge(*enums, **_rest) ⇒ Object
- #proper_subset?(set) ⇒ Boolean (also: #<)
- #proper_superset?(set) ⇒ Boolean (also: #>)
- #reject!(&block) ⇒ Object
- #select!(&block) ⇒ Object (also: #filter!)
- #size ⇒ Object (also: #length)
- #subset?(set) ⇒ Boolean (also: #<=)
- #subtract(enum) ⇒ Object
- #superset?(set) ⇒ Boolean (also: #>=)
- #to_a ⇒ Object
- #|(enum) ⇒ Object (also: #+, #union)
Constructor Details
#initialize(enum = nil, &block) ⇒ Set
Returns a new instance of Set.
11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 11 def initialize(enum = nil, &block) @hash = Hash.new(false) enum.nil? and return if block do_with_enum(enum) { |o| add(block[o]) } else merge(enum) end end |
Class Method Details
.[](*ary) ⇒ Object
7 8 9 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 7 def self.[](*ary) new(ary) end |
Instance Method Details
#&(enum) ⇒ Object Also known as: intersection
237 238 239 240 241 242 243 244 245 246 247 248 249 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 237 def &(enum) n = self.class.new if enum.is_a?(Set) if enum.size > size each { |o| n.add(o) if enum.include?(o) } else enum.each { |o| n.add(o) if include?(o) } end else do_with_enum(enum) { |o| n.add(o) if include?(o) } end n end |
#-(enum) ⇒ Object Also known as: difference
232 233 234 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 232 def -(enum) dup.subtract(enum) end |
#<=>(set) ⇒ Object
127 128 129 130 131 132 133 134 135 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 127 def <=>(set) return unless set.is_a?(Set) case size <=> set.size when -1 then -1 if proper_subset?(set) when +1 then +1 if proper_superset?(set) else 0 if self.==(set) end end |
#==(other) ⇒ Object
258 259 260 261 262 263 264 265 266 267 268 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 258 def ==(other) if self.equal?(other) true elsif other.instance_of?(self.class) @hash == other.instance_variable_get(:@hash) elsif other.is_a?(Set) && self.size == other.size other.all? { |o| @hash.include?(o) } else false end end |
#^(enum) ⇒ Object
252 253 254 255 256 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 252 def ^(enum) n = Set.new(enum) each { |o| n.add(o) unless n.delete?(o) } n end |
#add(o) ⇒ Object Also known as: <<
162 163 164 165 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 162 def add(o) @hash[o] = true self end |
#add?(o) ⇒ Boolean
168 169 170 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 168 def add?(o) add(o) unless include?(o) end |
#classify ⇒ Object
281 282 283 284 285 286 287 288 289 290 291 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 281 def classify block_given? or return enum_for(__method__) { size } h = {} each { |i| (h[yield(i)] ||= self.class.new).add(i) } h end |
#clear ⇒ Object
65 66 67 68 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 65 def clear @hash.clear self end |
#delete(o) ⇒ Object
172 173 174 175 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 172 def delete(o) @hash.delete(o) self end |
#delete?(o) ⇒ Boolean
177 178 179 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 177 def delete?(o) delete(o) if include?(o) end |
#delete_if ⇒ Object
181 182 183 184 185 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 181 def delete_if block_given? or return enum_for(__method__) { size } select { |o| yield o }.each { |o| @hash.delete(o) } self end |
#disjoint?(set) ⇒ Boolean
152 153 154 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 152 def disjoint?(set) !intersect?(set) end |
#divide(&func) ⇒ Object
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 293 def divide(&func) func or return enum_for(__method__) { size } if func.arity == 2 require 'tsort' class << dig = {} include TSort alias tsort_each_node each_key def tsort_each_child(node, &block) fetch(node).each(&block) end end each { |u| dig[u] = a = [] each{ |v| func.call(u, v) and a << v } } set = Set.new() dig.each_strongly_connected_component { |css| set.add(self.class.new(css)) } set else Set.new(classify(&func).values) end end |
#each(&block) ⇒ Object
156 157 158 159 160 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 156 def each(&block) block_given? or return enum_for(__method__) { size } @hash.each_key(&block) self end |
#empty? ⇒ Boolean
61 62 63 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 61 def empty? @hash.empty? end |
#eql?(o) ⇒ Boolean
274 275 276 277 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 274 def eql?(o) return false unless o.is_a?(Set) @hash.eql?(o.instance_variable_get(:@hash)) end |
#freeze ⇒ Object
51 52 53 54 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 51 def freeze @hash.freeze super end |
#hash ⇒ Object
270 271 272 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 270 def hash @hash.hash end |
#include?(o) ⇒ Boolean Also known as: member?, ===
74 75 76 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 74 def include?(o) @hash[o] end |
#initialize_clone(orig) ⇒ Object
40 41 42 43 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 40 def initialize_clone(orig, **) super @hash = orig.instance_variable_get(:@hash).clone(**) end |
#initialize_dup(orig) ⇒ Object
34 35 36 37 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 34 def initialize_dup(orig) super @hash = orig.instance_variable_get(:@hash).dup end |
#intersect?(set) ⇒ Boolean
137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 137 def intersect?(set) case set when Set if size < set.size any? { |o| set.include?(o) } else set.any? { |o| include?(o) } end when Enumerable set.any? { |o| include?(o) } else raise ArgumentError, "value must be enumerable" end end |
#keep_if ⇒ Object
187 188 189 190 191 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 187 def keep_if block_given? or return enum_for(__method__) { size } reject { |o| yield o }.each { |o| @hash.delete(o) } self end |
#merge(*enums, **_rest) ⇒ Object
209 210 211 212 213 214 215 216 217 218 219 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 209 def merge(*enums, **_rest) enums.each do |enum| if enum.instance_of?(self.class) @hash.update(enum.instance_variable_get(:@hash)) else do_with_enum(enum) { |o| add(o) } end end self end |
#proper_subset?(set) ⇒ Boolean Also known as: <
115 116 117 118 119 120 121 122 123 124 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 115 def proper_subset?(set) case when set.instance_of?(self.class) && @hash.respond_to?(:<) @hash < set.instance_variable_get(:@hash) when set.is_a?(Set) size < set.size && all? { |o| set.include?(o) } else raise ArgumentError, "value must be a set" end end |
#proper_superset?(set) ⇒ Boolean Also known as: >
91 92 93 94 95 96 97 98 99 100 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 91 def proper_superset?(set) case when set.instance_of?(self.class) && @hash.respond_to?(:>) @hash > set.instance_variable_get(:@hash) when set.is_a?(Set) size > set.size && set.all? { |o| include?(o) } else raise ArgumentError, "value must be a set" end end |
#reject!(&block) ⇒ Object
193 194 195 196 197 198 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 193 def reject!(&block) block_given? or return enum_for(__method__) { size } n = size delete_if(&block) self if size != n end |
#select!(&block) ⇒ Object Also known as: filter!
200 201 202 203 204 205 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 200 def select!(&block) block_given? or return enum_for(__method__) { size } n = size keep_if(&block) self if size != n end |
#size ⇒ Object Also known as: length
56 57 58 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 56 def size @hash.size end |
#subset?(set) ⇒ Boolean Also known as: <=
103 104 105 106 107 108 109 110 111 112 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 103 def subset?(set) case when set.instance_of?(self.class) && @hash.respond_to?(:<=) @hash <= set.instance_variable_get(:@hash) when set.is_a?(Set) size <= set.size && all? { |o| set.include?(o) } else raise ArgumentError, "value must be a set" end end |
#subtract(enum) ⇒ Object
221 222 223 224 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 221 def subtract(enum) do_with_enum(enum) { |o| delete(o) } self end |
#superset?(set) ⇒ Boolean Also known as: >=
79 80 81 82 83 84 85 86 87 88 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 79 def superset?(set) case when set.instance_of?(self.class) && @hash.respond_to?(:>=) @hash >= set.instance_variable_get(:@hash) when set.is_a?(Set) size >= set.size && set.all? { |o| include?(o) } else raise ArgumentError, "value must be a set" end end |
#to_a ⇒ Object
70 71 72 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 70 def to_a @hash.keys end |
#|(enum) ⇒ Object Also known as: +, union
226 227 228 |
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 226 def |(enum) dup.merge(enum) end |