Class: CharacterSet::RubyFallback::Set

Inherits:
Object
  • Object
show all
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

SortedSet

Constant Summary collapse

Set =
self

Class Method Summary collapse

Instance Method Summary collapse

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

Returns:

  • (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

#classifyObject



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

#clearObject



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

Returns:

  • (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_ifObject



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

Returns:

  • (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

Returns:

  • (Boolean)


61
62
63
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 61

def empty?
  @hash.empty?
end

#eql?(o) ⇒ Boolean

Returns:

  • (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

#freezeObject



51
52
53
54
# File 'lib/character_set/ruby_fallback/vendored_set_classes.rb', line 51

def freeze
  @hash.freeze
  super
end

#hashObject



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?, ===

Returns:

  • (Boolean)


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, **options)
  super
  @hash = orig.instance_variable_get(:@hash).clone(**options)
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

Returns:

  • (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_ifObject



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: <

Returns:

  • (Boolean)


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: >

Returns:

  • (Boolean)


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

#sizeObject 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: <=

Returns:

  • (Boolean)


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: >=

Returns:

  • (Boolean)


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_aObject



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