Change soft-fail to use the config, rather than env
[rbx.git] / kernel / core / list.rb
blob13e9daf75506d3e38f981f0e0c9fd85bc1628d13
1 # depends on: class.rb
3 ##
4 # A linked-list data structure.
6 class List
7   ivar_as_index :count => 0, :first => 1, :last => 2
9   # List does not have ivars
10   def __ivars__ ; nil         ; end
11   
12   def count
13     @count
14   end
15   
16   def first
17     @first
18   end
19   
20   def last
21     @last
22   end
23   
24   def initialize
25     @count = 0
26     @first = nil
27     @last = nil
28   end
30   def <<(obj)
31     node = Node.new(obj)
32     unless @first
33       @first = node
34     end
36     if @last
37       @last.next = node
38       @last = node
39     else
40       @last = node
41     end
43     @count += 1
44   end
46   def shift
47     return nil unless @count > 0
48     node = @first
49     @first = node.next
50     @count -= 1
51     return node.object
52   end
54   def each(&blk)
55     node = @first
56     while node
57       blk.call node.object
58       node = node.next
59     end
61     return nil
62   end
64   def inspect
65     "#<List:0x%x @count=%p>" % [object_id, count]
66   end
68   class Node
69     ivar_as_index :object => 0, :next => 1
71     # Node does not have ivars
72     def __ivars__ ; nil         ; end
74     
75     def object
76       @object
77     end
78     
79     def next
80       @next
81     end
83     def initialize(obj)
84       @object = obj
85       @next = nil
86     end
88     def next=(obj)
89       @next = obj
90     end
91   end
92 end