Sha256: 54f81e5db72b17dfcf6fd30cc766ff36ed6d9b9be2612594c57cd8a6b9638831

Contents?: true

Size: 1.13 KB

Versions: 45

Compression:

Stored size: 1.13 KB

Contents

#          Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
# All files in this distribution are subject to the terms of the Ruby license.

require(File.join(File.dirname(__FILE__), 'blankslate'))

# Basically an Set, but with Order, ain't that obivous?
class OrderedSet < BlankSlate
  def self.[](*args)
    new(*args)
  end

  # Create new instances, optionally pass the first set
  def initialize(*args)
    if args.size == 1
      @set = args.shift
    else
      @set = *args
    end

    @set ||= []
    @set = [@set] unless ::Array === @set
    @set.uniq!
  end

  %w[ push unshift << ].each do |meth|
    class_eval %[
      def #{meth} *args
        @set.delete(*args)
        @set.#{meth}(*args)
      end
    ]
  end

  def []= *args
    @set.map! do |e|
      if ::Array === args.last
        args.last.include?(e) ? nil : e
      else
        args.last == e ? nil : e
      end
    end
    @set.__send__(:[]=, *args)
    @set.compact!
  end

  # Delegate everything, but controlled, keep elements unique.
  # Warning, this is not really atomic.
  def method_missing(meth, *args, &block)
    @set.__send__(meth, *args, &block)
  end
end

Version data entries

45 entries across 45 versions & 5 rubygems

Version Path
Pistos-ramaze-2008.09 lib/ramaze/snippets/ordered_set.rb
Pistos-ramaze-2008.12 lib/ramaze/snippets/ordered_set.rb
Pistos-ramaze-2009.01 lib/ramaze/snippets/ordered_set.rb
Pistos-ramaze-2009.02 lib/ramaze/snippets/ordered_set.rb
Pistos-ramaze-2009.04.08 lib/ramaze/snippets/ordered_set.rb
Pistos-ramaze-2009.06.12 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2008.10 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2008.12 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2009.01 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2009.04.01 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2009.04.08 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2009.04.18 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2009.04.22 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2009.04 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2009.05.08 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2009.05 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2009.06.04 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2009.06.12 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2009.06 lib/ramaze/snippets/ordered_set.rb
manveru-ramaze-2009.07 lib/ramaze/snippets/ordered_set.rb