59 lines
841 B
Ruby
59 lines
841 B
Ruby
|
# This file contains the Ruby code from book of
|
||
|
# "Data Structures and Algorithms
|
||
|
# with Object-Oriented Design Patterns in Ruby"
|
||
|
# by Bruno R. Preiss.
|
||
|
#
|
||
|
# Copyright (c) 2004 by Bruno R. Preiss, P.Eng. All rights reserved.
|
||
|
|
||
|
class Container < AbstractObject
|
||
|
|
||
|
include ::Enumerable
|
||
|
|
||
|
def initialize
|
||
|
super
|
||
|
@count = 0
|
||
|
end
|
||
|
|
||
|
attr_reader :count
|
||
|
|
||
|
def purge
|
||
|
@count = 0
|
||
|
end
|
||
|
|
||
|
def empty?
|
||
|
count == 0
|
||
|
end
|
||
|
|
||
|
def full?
|
||
|
false
|
||
|
end
|
||
|
|
||
|
abstractmethod :iter
|
||
|
|
||
|
def each
|
||
|
i = iter
|
||
|
while i.more?
|
||
|
yield i.succ
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def to_s
|
||
|
s = ""
|
||
|
each do |obj|
|
||
|
s << ", " if not s.empty?
|
||
|
s << obj.to_s
|
||
|
end
|
||
|
type.name + "{" + s + "}"
|
||
|
end
|
||
|
|
||
|
def accept(visitor)
|
||
|
assert { visitor.is_a?(Visitor) }
|
||
|
each do |obj|
|
||
|
break if visitor.done?
|
||
|
visitor.visit(obj)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|