Sha256: d39fbfdb9a0b042398e234fd7899b44fd1fe4464d700b094123bd80ec02910df
Contents?: true
Size: 1.26 KB
Versions: 1
Compression:
Stored size: 1.26 KB
Contents
require "forwardable" require "hamster/immutable" require "hamster/list" module Hamster def self.stack(*items) items.reduce(EmptyStack) { |stack, item| stack.push(item) } end class Stack extend Forwardable include Immutable attr_reader :list def_delegator :self, :list, :to_list def initialize @list = EmptyList end def empty? @list.empty? end def size @list.size end def_delegator :self, :size, :length def peek @list.head end def_delegator :self, :peek, :top def push(item) transform { @list = @list.cons(item) } end def_delegator :self, :push, :<< def_delegator :self, :push, :enqueue def pop list = @list.tail if list.empty? EmptyStack else transform { @list = list } end end def_delegator :self, :pop, :dequeue def clear EmptyStack end def eql?(other) instance_of?(other.class) && @list.eql?(other.instance_variable_get(:@list)) end def_delegator :self, :eql?, :== def to_a @list.to_a end def_delegator :self, :to_a, :entries def to_ary @list.to_ary end def inspect @list.inspect end end EmptyStack = Hamster::Stack.new end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
hamster-1.0.1.pre.rc.1 | lib/hamster/stack.rb |