class Ardm::OrderedSet
An ordered set of things
{OrderedSet} implements set behavior and keeps track of the order in which entries were added.
{OrderedSet} allows to inject a class that implements {OrderedSet::Cache::API} at construction time, and will use that cache implementation to enforce set semantics and perform internal caching of insertion order.
@see OrderedSet::Cache::API
@see OrderedSet::Cache
@see SubjectSet::NameCache
@api private
Attributes
This set’s entries
The order in this Array is not guaranteed to be the order in which the entries were inserted. Use each
to access the entries in insertion order.
@return [Array]
this set's entries
@api private
Public Class Methods
Initialize an OrderedSet
@param [#each] entries
the entries to initialize this set with
@param [Class<Cache::API>] cache
the cache implementation to use
@api private
# File lib/ardm/support/ordered_set.rb, line 218 def initialize(entries = [], cache = Cache) @cache = cache.new @entries = [] merge(entries.to_ary) end
Public Instance Methods
Add or update an entry in the set
If the entry to add isn’t part of the set already, it will be added. If an entry with the same cache key as the entry to add is part of the set already, it will be replaced with the given entry.
@param [Object] entry
the entry to be added
@return [OrderedSet] self
@api private
# File lib/ardm/support/ordered_set.rb, line 258 def <<(entry) if index = @cache[entry] entries[index] = entry else @cache[entry] = size entries << entry end self end
Get the entry at the given index
@param [Integer] index
the index of the desired entry
@return [Object, nil]
the entry at the given index, or nil if no entry is present
@api private
# File lib/ardm/support/ordered_set.rb, line 241 def [](index) entries[index] end
Removes all entries and returns self
@return [OrderedSet] self
@api private
# File lib/ardm/support/ordered_set.rb, line 301 def clear @cache.clear entries.clear self end
Delete an entry from this OrderedSet
@param [Object] entry
the entry to delete
@return [Object, nil]
the deleted entry or nil
@api private
# File lib/ardm/support/ordered_set.rb, line 290 def delete(entry) if index = @cache.delete(entry) entries.delete_at(index) end end
Iterate over each entry in the set
@yield [entry]
all entries in the set
@yieldparam [Object] entry
an entry in the set
@return [OrderedSet] self
@api private
# File lib/ardm/support/ordered_set.rb, line 318 def each entries.each { |entry| yield(entry) } self end
Check if there are any entries
@return [Boolean]
true if the set is empty
@api private
# File lib/ardm/support/ordered_set.rb, line 339 def empty? entries.empty? end
Check if the entry exists in the set
@param [Object] entry
the entry to test for
@return [Boolean]
true if entry is included in the set
@api private
# File lib/ardm/support/ordered_set.rb, line 352 def include?(entry) entries.include?(entry) end
Return the index for the entry in the set
@param [Object] entry
the entry to check the set for
@return [Integer, nil]
the index for the entry, or nil if it does not exist
@api private
# File lib/ardm/support/ordered_set.rb, line 365 def index(entry) @cache[entry] end
Initialize a copy of OrderedSet
@api private
# File lib/ardm/support/ordered_set.rb, line 227 def initialize_copy(*) @cache = @cache.dup @entries = @entries.dup end
Merge with another Enumerable object
@param [#each] other
the Enumerable to merge with this OrderedSet
@return [OrderedSet] self
@api private
# File lib/ardm/support/ordered_set.rb, line 276 def merge(other) other.each { |entry| self << entry } self end
The number of entries
@return [Integer]
the number of entries
@api private
# File lib/ardm/support/ordered_set.rb, line 329 def size entries.size end
Convert the OrderedSet
into an Array
@return [Array]
an array containing all the OrderedSet's entries
@api private
# File lib/ardm/support/ordered_set.rb, line 375 def to_ary entries end