class Sass::OrderedHash
while also keeping track of the order in which elements were set.
It keeps the semantics and most of the efficiency of normal hashes
This class is based on the Ruby 1.9 ordered hashes.
def [](key)
def [](key) @hash[key] && @hash[key].value end
def []=(key, value)
def []=(key, value) node = Node.new(key, value) if old = @hash[key] if old.prev old.prev.next = old.next else # old is @first and @last @first = @last = nil end end if @first.nil? @first = @last = node else node.prev = @last @last.next = node @last = node end @hash[key] = node value end
def each
def each return unless @first yield [@first.key, @first.value] node = @first yield [node.key, node.value] while node = node.next self end
def initialize
def initialize @hash = {} end
def initialize_copy(other)
def initialize_copy(other) @hash = other.instance_variable_get('@hash').clone end
def values
def values self.map { |k, v| v } end