From c4ee0df8ba2cf7cc6aaa785c8df20a91b1719021 Mon Sep 17 00:00:00 2001 From: hsbt Date: Sat, 4 Apr 2015 12:31:31 +0000 Subject: * lib/rake/*: Gemify rake [fix GH-862][Feature #11025] * test/rake/*: ditto. * tool/rbinstall.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50163 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rake/linked_list.rb | 103 ------------------------------------------------ 1 file changed, 103 deletions(-) delete mode 100644 lib/rake/linked_list.rb (limited to 'lib/rake/linked_list.rb') diff --git a/lib/rake/linked_list.rb b/lib/rake/linked_list.rb deleted file mode 100644 index b5ab797808..0000000000 --- a/lib/rake/linked_list.rb +++ /dev/null @@ -1,103 +0,0 @@ -module Rake - - # Polylithic linked list structure used to implement several data - # structures in Rake. - class LinkedList - include Enumerable - - attr_reader :head, :tail - - def initialize(head, tail=EMPTY) - @head = head - @tail = tail - end - - # Polymorphically add a new element to the head of a list. The - # type of head node will be the same list type as the tail. - def conj(item) - self.class.cons(item, self) - end - - # Is the list empty? - def empty? - false - end - - # Lists are structurally equivalent. - def ==(other) - current = self - while ! current.empty? && ! other.empty? - return false if current.head != other.head - current = current.tail - other = other.tail - end - current.empty? && other.empty? - end - - # Convert to string: LL(item, item...) - def to_s - items = map { |item| item.to_s }.join(", ") - "LL(#{items})" - end - - # Same as +to_s+, but with inspected items. - def inspect - items = map { |item| item.inspect }.join(", ") - "LL(#{items})" - end - - # For each item in the list. - def each - current = self - while ! current.empty? - yield(current.head) - current = current.tail - end - self - end - - # Make a list out of the given arguments. This method is - # polymorphic - def self.make(*args) - result = empty - args.reverse_each do |item| - result = cons(item, result) - end - result - end - - # Cons a new head onto the tail list. - def self.cons(head, tail) - new(head, tail) - end - - # The standard empty list class for the given LinkedList class. - def self.empty - self::EMPTY - end - - # Represent an empty list, using the Null Object Pattern. - # - # When inheriting from the LinkedList class, you should implement - # a type specific Empty class as well. Make sure you set the class - # instance variable @parent to the associated list class (this - # allows conj, cons and make to work polymorphically). - class EmptyLinkedList < LinkedList - @parent = LinkedList - - def initialize - end - - def empty? - true - end - - def self.cons(head, tail) - @parent.cons(head, tail) - end - end - - EMPTY = EmptyLinkedList.new - end - -end -- cgit v1.2.3