Class: Set

Inherits:
Object
  • Object
show all
Defined in:
lib/persistent_dmnd/jruby_9_2_set_workaround.rb

Instance Method Summary collapse

Instance Method Details

#<=>(other) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 62

def <=>(other)
  original = persistent_dmnd_workaround_original_spaceship(other)
  return original if original

  return unless other.is_a?(::Set)
  case size <=> other.size
  when -1 then -1 if proper_subset?(other)
  when +1 then +1 if proper_superset?(other)
  else 0 if self.==(other)
  end
end

#==(other) ⇒ Object



75
76
77
78
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 75

def ==(other)
  persistent_dmnd_workaround_original_equal(other) ||
    (other.is_a?(::Set) && size == other.size && other.all? { |o| include?(o) })
end

#disjoint?(set) ⇒ Boolean

Returns:

  • (Boolean)


119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 119

def disjoint?(set)
  persistent_dmnd_workaround_original_disjoint?(set)
rescue ArgumentError => e
  raise unless e.message == "value must be a set" && set.is_a?(::Set)

  !(
    if size < set.size
      any? { |o| set.include?(o) }
    else
      set.any? { |o| include?(o) }
    end
  )
end

#flattenObject



151
152
153
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 151

def flatten
  self.class.new.flatten_merge(self)
end

#flatten!Object



155
156
157
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 155

def flatten!
  replace(flatten) if any? { |o| o.is_a?(::Set) }
end

#flatten_merge(set, seen = ::Set.new) ⇒ Object



133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 133

def flatten_merge(set, seen = ::Set.new)
  set.each do |o|
    if o.is_a?(::Set)
      if seen.include?(o_id = o.object_id)
        raise ArgumentError, "tried to flatten recursive Set"
      end

      seen.add(o_id)
      flatten_merge(o, seen)
      seen.delete(o_id)
    else
      add(o)
    end
  end

  self
end

#intersect?(set) ⇒ Boolean

Returns:

  • (Boolean)


108
109
110
111
112
113
114
115
116
117
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 108

def intersect?(set)
  persistent_dmnd_workaround_original_intersect?(set)
rescue ArgumentError => e
  raise unless e.message == "value must be a set" && set.is_a?(::Set)
  if size < set.size
    any? { |o| set.include?(o) }
  else
    set.any? { |o| include?(o) }
  end
end

#persistent_dmnd_workaround_original_disjoint?Object



53
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 53

alias_method :persistent_dmnd_workaround_original_disjoint?, :disjoint?

#persistent_dmnd_workaround_original_equalObject

Save existing Set methods



47
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 47

alias_method :persistent_dmnd_workaround_original_equal, :==

#persistent_dmnd_workaround_original_flattenObject



55
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 55

alias_method :persistent_dmnd_workaround_original_flatten, :flatten

#persistent_dmnd_workaround_original_flatten!Object



56
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 56

alias_method :persistent_dmnd_workaround_original_flatten!, :flatten!

#persistent_dmnd_workaround_original_flatten_mergeObject



54
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 54

alias_method :persistent_dmnd_workaround_original_flatten_merge, :flatten_merge

#persistent_dmnd_workaround_original_intersect?Object



52
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 52

alias_method :persistent_dmnd_workaround_original_intersect?, :intersect?

#persistent_dmnd_workaround_original_proper_subset?Object



51
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 51

alias_method :persistent_dmnd_workaround_original_proper_subset?, :proper_subset?

#persistent_dmnd_workaround_original_proper_superset?Object



49
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 49

alias_method :persistent_dmnd_workaround_original_proper_superset?, :proper_superset?

#persistent_dmnd_workaround_original_spaceshipObject



57
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 57

alias_method :persistent_dmnd_workaround_original_spaceship, :<=>

#persistent_dmnd_workaround_original_subset?Object



50
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 50

alias_method :persistent_dmnd_workaround_original_subset?, :subset?

#persistent_dmnd_workaround_original_superset?Object



48
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 48

alias_method :persistent_dmnd_workaround_original_superset?, :superset?

#proper_subset?(set) ⇒ Boolean Also known as: <

Returns:

  • (Boolean)


101
102
103
104
105
106
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 101

def proper_subset?(set)
  persistent_dmnd_workaround_original_proper_subset?(set)
rescue ArgumentError => e
  raise unless e.message == "value must be a set" && set.is_a?(::Set)
  size < set.size && all? { |o| set.include?(o) }
end

#proper_superset?(set) ⇒ Boolean Also known as: >

Returns:

  • (Boolean)


87
88
89
90
91
92
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 87

def proper_superset?(set)
  persistent_dmnd_workaround_original_proper_superset?(set)
rescue ArgumentError => e
  raise unless e.message == "value must be a set" && set.is_a?(::Set)
  size > set.size && set.all? { |o| include?(o) }
end

#subset?(set) ⇒ Boolean Also known as: <=

Returns:

  • (Boolean)


94
95
96
97
98
99
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 94

def subset?(set)
  persistent_dmnd_workaround_original_subset?(set)
rescue ArgumentError => e
  raise unless e.message == "value must be a set" && set.is_a?(::Set)
  size <= set.size && all? { |o| set.include?(o) }
end

#superset?(set) ⇒ Boolean Also known as: >=

Returns:

  • (Boolean)


80
81
82
83
84
85
# File 'lib/persistent_dmnd/jruby_9_2_set_workaround.rb', line 80

def superset?(set)
  persistent_dmnd_workaround_original_superset?(set)
rescue ArgumentError => e
  raise unless e.message == "value must be a set" && set.is_a?(::Set)
  size >= set.size && set.all? { |o| include?(o) }
end