Class: Set
  
  
  
Overview
  
  
    
      Class Method Summary
      collapse
    
    
  
    
      Instance Method Summary
      collapse
    
    
  
  
  
  
  
  
  
  
  
  Methods included from Enumerable
  #each_async, #to_json, #to_set
  Constructor Details
  
    
  
  
    #initialize(enum = nil, &block)  ⇒ Set 
  
  
  
  
    Returns a new instance of Set.
   
 
  
    | 
9
10
11
12
13
14
15
16
17
18
19
20 | # File 'opal/stdlib/set.rb', line 9
def initialize(enum = nil, &block)
  @hash = {}
  return if enum.nil?
  raise ArgumentError, 'value must be enumerable' unless Enumerable === enum
  if block
    enum.each { |item| add yield(item) }
  else
    merge(enum)
  end
end | 
 
  
 
  
    Class Method Details
    
      
  
  
    | 
5
6
7 | # File 'opal/stdlib/set.rb', line 5
def self.[](*ary)
  new(ary)
end | 
 
    
   
  
    Instance Method Details
    
      
  
  
    #-(enum)  ⇒ Object 
  
  
    Also known as:
    difference
    
  
  
  
    | 
27
28
29
30
31
32
33 | # File 'opal/stdlib/set.rb', line 27
def -(enum)
  unless enum.respond_to? :each
    raise ArgumentError, 'value must be enumerable'
  end
  dup.subtract(enum)
end | 
 
    
      
  
  
    #==(other)  ⇒ Object 
  
  
  
  
    | 
40
41
42
43
44
45
46
47
48
49
50 | # File 'opal/stdlib/set.rb', line 40
def ==(other)
  if equal?(other)
    true
  elsif other.instance_of?(self.class)
    @hash == other.instance_variable_get(:@hash)
  elsif other.is_a?(Set) && size == other.size
    other.all? { |o| @hash.include?(o) }
  else
    false
  end
end | 
 
    
      
  
  
    #add(o)  ⇒ Object 
  
  
    Also known as:
    <<
    
  
  
  
    | 
52
53
54
55 | # File 'opal/stdlib/set.rb', line 52
def add(o)
  @hash[o] = true
  self
end | 
 
    
      
  
  
    | 
118
119
120
121
122
123
124 | # File 'opal/stdlib/set.rb', line 118
def add?(o)
  if include?(o)
    nil
  else
    add(o)
  end
end | 
 
    
      
  
  
    #classify(&block)  ⇒ Object 
  
  
  
  
    | 
58
59
60
61
62
63
64
65
66 | # File 'opal/stdlib/set.rb', line 58
def classify(&block)
  return enum_for(:classify) unless block_given?
  result = Hash.new { |h, k| h[k] = self.class.new }
  each { |item| result[yield(item)].add item }
  result
end | 
 
    
      
  
  
    | 
140
141
142
143 | # File 'opal/stdlib/set.rb', line 140
def clear
  @hash.clear
  self
end | 
 
    
      
  
  
    #collect!(&block)  ⇒ Object 
  
  
    Also known as:
    map!
    
  
  
  
    | 
68
69
70
71
72
73 | # File 'opal/stdlib/set.rb', line 68
def collect!(&block)
  return enum_for(:collect!) unless block_given?
  result = self.class.new
  each { |item| result << yield(item) }
  replace result
end | 
 
    
      
  
  
    #delete(o)  ⇒ Object 
  
  
  
  
    | 
76
77
78
79 | # File 'opal/stdlib/set.rb', line 76
def delete(o)
  @hash.delete(o)
  self
end | 
 
    
      
  
  
    | 
81
82
83
84
85
86 | # File 'opal/stdlib/set.rb', line 81
def delete?(o)
  if include?(o)
    delete(o)
    self
  end
end | 
 
    
      
  
  
    #delete_if  ⇒ Object 
  
  
  
  
    | 
88
89
90
91
92
93
94 | # File 'opal/stdlib/set.rb', line 88
def delete_if
  return enum_for(:delete_if) unless block_given?
      select { |o| yield o }.each { |o| @hash.delete(o) }
  self
end | 
 
    
      
  
  
    #disjoint?(set)  ⇒ Boolean 
  
  
  
  
    | 
221
222
223 | # File 'opal/stdlib/set.rb', line 221
def disjoint?(set)
  !intersect?(set)
end | 
 
    
      
  
  
    | 
22
23
24
25 | # File 'opal/stdlib/set.rb', line 22
def dup
  result = self.class.new
  result.merge(self)
end | 
 
    
      
  
  
    #each(&block)  ⇒ Object 
  
  
  
  
    | 
126
127
128
129
130 | # File 'opal/stdlib/set.rb', line 126
def each(&block)
  return enum_for(:each) unless block_given?
  @hash.each_key(&block)
  self
end | 
 
    
      
  
  
    | 
132
133
134 | # File 'opal/stdlib/set.rb', line 132
def empty?
  @hash.empty?
end | 
 
    
      
  
  
    #eql?(other)  ⇒ Boolean 
  
  
  
  
    | 
136
137
138 | # File 'opal/stdlib/set.rb', line 136
def eql?(other)
  @hash.eql?(other.instance_eval { @hash })
end | 
 
    
      
  
  
    #include?(o)  ⇒ Boolean 
  
  
    Also known as:
    member?
    
  
  
  
    | 
145
146
147 | # File 'opal/stdlib/set.rb', line 145
def include?(o)
  @hash.include?(o)
end | 
 
    
      
  
  
    | 
36
37
38 | # File 'opal/stdlib/set.rb', line 36
def inspect
  "#<Set: {#{to_a.join(',')}}>"
end | 
 
    
      
  
  
    #intersect?(set)  ⇒ Boolean 
  
  
  
  
    | 
211
212
213
214
215
216
217
218
219 | # File 'opal/stdlib/set.rb', line 211
def intersect?(set)
  raise ArgumentError, 'value must be a set' unless set.is_a?(Set)
  if size < set.size
    any? { |o| set.include?(o) }
  else
    set.any? { |o| include?(o) }
  end
end | 
 
    
      
  
  
    | 
96
97
98
99
100 | # File 'opal/stdlib/set.rb', line 96
def keep_if
  return enum_for(:keep_if) unless block_given?
  reject { |o| yield o }.each { |o| @hash.delete(o) }
  self
end | 
 
    
      
  
  
    #merge(enum)  ⇒ Object 
  
  
  
  
    | 
150
151
152
153 | # File 'opal/stdlib/set.rb', line 150
def merge(enum)
  enum.each { |item| add item }
  self
end | 
 
    
      
  
  
    #proper_subset?(set)  ⇒ Boolean 
  
  
    Also known as:
    <
    
  
  
  
    | 
203
204
205
206
207 | # File 'opal/stdlib/set.rb', line 203
def proper_subset?(set)
  set.is_a?(Set) || raise(ArgumentError, 'value must be a set')
  return false if set.size <= size
  all? { |o| set.include?(o) }
end | 
 
    
      
  
  
    #proper_superset?(set)  ⇒ Boolean 
  
  
    Also known as:
    >
    
  
  
  
    | 
187
188
189
190
191 | # File 'opal/stdlib/set.rb', line 187
def proper_superset?(set)
  set.is_a?(Set) || raise(ArgumentError, 'value must be a set')
  return false if size <= set.size
  set.all? { |o| include?(o) }
end | 
 
    
      
  
  
    #reject!(&block)  ⇒ Object 
  
  
  
  
    | 
102
103
104
105
106
107 | # File 'opal/stdlib/set.rb', line 102
def reject!(&block)
  return enum_for(:reject!) unless block_given?
  before = size
  delete_if(&block)
  size == before ? nil : self
end | 
 
    
      
  
  
    #replace(enum)  ⇒ Object 
  
  
  
  
    | 
155
156
157
158
159
160 | # File 'opal/stdlib/set.rb', line 155
def replace(enum)
  clear
  merge(enum)
  self
end | 
 
    
      
  
  
    #select!(&block)  ⇒ Object 
  
  
    Also known as:
    filter!
    
  
  
  
    | 
109
110
111
112
113
114 | # File 'opal/stdlib/set.rb', line 109
def select!(&block)
  return enum_for(:select!) unless block_given?
  before = size
  keep_if(&block)
  size == before ? nil : self
end | 
 
    
      
  
  
    #size  ⇒ Object 
  
  
    Also known as:
    length
    
  
  
  
    | 
162
163
164 | # File 'opal/stdlib/set.rb', line 162
def size
  @hash.size
end | 
 
    
      
  
  
    #subset?(set)  ⇒ Boolean 
  
  
    Also known as:
    <=
    
  
  
  
    | 
195
196
197
198
199 | # File 'opal/stdlib/set.rb', line 195
def subset?(set)
  set.is_a?(Set) || raise(ArgumentError, 'value must be a set')
  return false if set.size < size
  all? { |o| set.include?(o) }
end | 
 
    
      
  
  
    #subtract(enum)  ⇒ Object 
  
  
  
  
    | 
167
168
169
170 | # File 'opal/stdlib/set.rb', line 167
def subtract(enum)
  enum.each { |item| delete item }
  self
end | 
 
    
      
  
  
    #superset?(set)  ⇒ Boolean 
  
  
    Also known as:
    >=
    
  
  
  
    | 
179
180
181
182
183 | # File 'opal/stdlib/set.rb', line 179
def superset?(set)
  set.is_a?(Set) || raise(ArgumentError, 'value must be a set')
  return false if size < set.size
  set.all? { |o| include?(o) }
end | 
 
    
      
  
  
    | 
228
229
230 | # File 'opal/stdlib/set.rb', line 228
def to_a
  @hash.keys
end | 
 
    
      
  
  
    #|(enum)  ⇒ Object 
  
  
    Also known as:
    +, union
    
  
  
  
    | 
172
173
174
175
176
177 | # File 'opal/stdlib/set.rb', line 172
def |(enum)
  unless enum.respond_to? :each
    raise ArgumentError, 'value must be enumerable'
  end
  dup.merge(enum)
end |