aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/set.rb18
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/set.rb b/lib/set.rb
index b668738ebb..5da196d1e0 100644
--- a/lib/set.rb
+++ b/lib/set.rb
@@ -477,6 +477,19 @@ class Set
@hash.eql?(o.instance_variable_get(:@hash))
end
+ # Resets the internal state after modification to existing elements
+ # and returns self.
+ #
+ # Elements will be reindexed and deduplicated.
+ def reset
+ if @hash.respond_to?(:rehash)
+ @hash.rehash # This should perform frozenness check.
+ else
+ raise "can't modify frozen #{self.class.name}" if frozen?
+ end
+ self
+ end
+
# Returns true if obj is a member of the set, and false otherwise.
#
# Used in case statements:
@@ -731,6 +744,11 @@ class SortedSet < Set
to_a
super
end
+
+ def rehash
+ @keys = nil
+ super
+ end
END
end
# a hack to shut up warning