aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/ruby-msg/lib/orderedhash.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/ruby-msg/lib/orderedhash.rb')
-rw-r--r--vendor/ruby-msg/lib/orderedhash.rb218
1 files changed, 0 insertions, 218 deletions
diff --git a/vendor/ruby-msg/lib/orderedhash.rb b/vendor/ruby-msg/lib/orderedhash.rb
deleted file mode 100644
index 16a4f5860..000000000
--- a/vendor/ruby-msg/lib/orderedhash.rb
+++ /dev/null
@@ -1,218 +0,0 @@
-# = OrderedHash
-#
-# == Version
-# 1.2006.07.13 (change of the first number means Big Change)
-#
-# == Description
-# Hash which preserves order of added items (like PHP array).
-#
-# == Usage
-#
-# (see examples directory under the ruby gems root directory)
-#
-# require 'rubygems'
-# require 'ordered_hash'
-#
-# hsh = OrderedHash.new
-# hsh['z'] = 1
-# hsh['a'] = 2
-# hsh['c'] = 3
-# p hsh.keys # ['z','a','c']
-#
-# == Source
-# http://simplypowerful.1984.cz/goodlibs/1.2006.07.13
-#
-# == Author
-# jan molic (/mig/at_sign/1984/dot/cz/)
-#
-# == Thanks to
-# Andrew Johnson for his suggestions and fixes of Hash[], merge, to_a, inspect and shift
-# Desmond Dsouza for == fixes
-#
-# == Licence
-# You can redistribute it and/or modify it under the same terms of Ruby's license;
-# either the dual license version in 2003, or any later version.
-#
-
-class OrderedHash < Hash
-
- attr_accessor :order
-
- class << self
-
- def [] *args
- hsh = OrderedHash.new
- if Hash === args[0]
- hsh.replace args[0]
- elsif (args.size % 2) != 0
- raise ArgumentError, "odd number of elements for Hash"
- else
- hsh[args.shift] = args.shift while args.size > 0
- end
- hsh
- end
-
- end
-
- def initialize(*a, &b)
- super
- @order = []
- end
-
- def store_only a,b
- store a,b
- end
-
- alias orig_store store
-
- def store a,b
- @order.push a unless has_key? a
- super a,b
- end
-
- alias []= store
-
- def == hsh2
- return hsh2==self if !hsh2.is_a?(OrderedHash)
- return false if @order != hsh2.order
- super hsh2
- end
-
- def clear
- @order = []
- super
- end
-
- def delete key
- @order.delete key
- super
- end
-
- def each_key
- @order.each { |k| yield k }
- self
- end
-
- def each_value
- @order.each { |k| yield self[k] }
- self
- end
-
- def each
- @order.each { |k| yield k,self[k] }
- self
- end
-
- alias each_pair each
-
- def delete_if
- @order.clone.each { |k|
- delete k if yield
- }
- self
- end
-
- def values
- ary = []
- @order.each { |k| ary.push self[k] }
- ary
- end
-
- def keys
- @order
- end
-
- def invert
- hsh2 = Hash.new
- @order.each { |k| hsh2[self[k]] = k }
- hsh2
- end
-
- def reject &block
- self.dup.delete_if( &block )
- end
-
- def reject! &block
- hsh2 = reject( &block )
- self == hsh2 ? nil : hsh2
- end
-
- def replace hsh2
- @order = hsh2.keys
- super hsh2
- end
-
- def shift
- key = @order.first
- key ? [key,delete(key)] : super
- end
-
- def unshift k,v
- unless self.include? k
- @order.unshift k
- orig_store(k,v)
- true
- else
- false
- end
- end
-
- def push k,v
- unless self.include? k
- @order.push k
- orig_store(k,v)
- true
- else
- false
- end
- end
-
- def pop
- key = @order.last
- key ? [key,delete(key)] : nil
- end
-
- def first
- self[@order.first]
- end
-
- def last
- self[@order.last]
- end
-
- def to_a
- ary = []
- each { |k,v| ary << [k,v] }
- ary
- end
-
- def to_s
- self.to_a.to_s
- end
-
- def inspect
- ary = []
- each {|k,v| ary << k.inspect + "=>" + v.inspect}
- '{' + ary.join(", ") + '}'
- end
-
- def update hsh2
- hsh2.each { |k,v| self[k] = v }
- self
- end
-
- alias :merge! update
-
- def merge hsh2
- self.dup update(hsh2)
- end
-
- def select
- ary = []
- each { |k,v| ary << [k,v] if yield k,v }
- ary
- end
-
-end
-
-#=end