class Zip::EntrySet

:nodoc:all

def <<(entry)

def <<(entry)
  @entry_set[to_key(entry)] = entry if entry
end

def ==(other)

def ==(other)
  return false unless other.kind_of?(EntrySet)
  @entry_set.values == other.entry_set.values
end

def delete(entry)

def delete(entry)
  entry if @entry_set.delete(to_key(entry))
end

def dup

deep clone
def dup
  EntrySet.new(@entry_set.values.map(&:dup))
end

def each

def each
  @entry_set = sorted_entries.dup.each do |_, value|
    yield(value)
  end
end

def entries

def entries
  sorted_entries.values
end

def find_entry(entry)

def find_entry(entry)
  @entry_set[to_key(entry)]
end

def glob(pattern, flags = ::File::FNM_PATHNAME | ::File::FNM_DOTMATCH | ::File::FNM_EXTGLOB)

def glob(pattern, flags = ::File::FNM_PATHNAME | ::File::FNM_DOTMATCH | ::File::FNM_EXTGLOB)
  entries.map do |entry|
    next nil unless ::File.fnmatch(pattern, entry.name.chomp('/'), flags)
    yield(entry) if block_given?
    entry
  end.compact
end

def include?(entry)

def include?(entry)
  @entry_set.include?(to_key(entry))
end

def initialize(an_enumerable = [])

def initialize(an_enumerable = [])
  super()
  @entry_set = {}
  an_enumerable.each { |o| push(o) }
end

def parent(entry)

def parent(entry)
  @entry_set[to_key(entry.parent_as_string)]
end

def size

def size
  @entry_set.size
end

def sorted_entries

def sorted_entries
  ::Zip.sort_entries ? Hash[@entry_set.sort] : @entry_set
end

def to_key(entry)

def to_key(entry)
  k = entry.to_s.chomp('/')
  k.downcase! if ::Zip.case_insensitive_match
  k
end