#--
# Copyright 2007 by Stefan Rusterholz.
# All rights reserved.
# See LICENSE.txt for permissions.
#++



# The same as hash, except that keys are normalized
# before all operations, which allows to e.g. create
# a case insensitive hash or a hash that doesn't differ
# between strings and symbols...
class NormalizedHash < Hash
def [](key)
super(normalize(key))
end

def []=(key, value)
super(normalize(key), value)
end

def has_key?(key)
super(normalize(key))
end

def values_at(*keys)
super(*keys.map{ |m| normalize(m) })
end

def merge(hash)
result = self.dup
result.merge!(hash)
result
end

def merge!(hash)
hash.each { |key, value|
self[key] = value
}
end

def normalize(key)
key
end
end