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
|
|
|