Temporary tag for this failure. Updated CI spec coming.
[rbx.git] / kernel / core / list.rb
blobca9dfbec114e2a70167d06a3baa23b5a980b7437
1 # depends on: class.rb
3 class List
4   ivar_as_index :count => 0, :first => 1, :last => 2
6   # List does not have ivars
7   def __ivars__ ; nil         ; end
8   
9   def count
10     @count
11   end
12   
13   def first
14     @first
15   end
16   
17   def last
18     @last
19   end
20   
21   def initialize
22     @count = 0
23     @first = nil
24     @last = nil
25   end
27   def <<(obj)
28     node = Node.new(obj)
29     unless @first
30       @first = node
31     end
33     if @last
34       @last.next = node
35       @last = node
36     else
37       @last = node
38     end
40     @count += 1
41   end
43   def shift
44     return nil unless @count > 0
45     node = @first
46     @first = node.next
47     @count -= 1
48     return node.object
49   end
51   def each(&blk)
52     node = @first
53     while node
54       blk.call node.object
55       node = node.next
56     end
58     return nil
59   end
61   def inspect
62     "#<List:0x%x @count=%p>" % [object_id, count]
63   end
65   class Node
66     ivar_as_index :object => 0, :next => 1
68     # Node does not have ivars
69     def __ivars__ ; nil         ; end
71     
72     def object
73       @object
74     end
75     
76     def next
77       @next
78     end
80     def initialize(obj)
81       @object = obj
82       @next = nil
83     end
85     def next=(obj)
86       @next = obj
87     end
88   end
89 end