Sha256: 6af441e6822cab1fece6d1e7a11e5d7e21c4c83020e2491961400b3043e7f092

Contents?: true

Size: 1.64 KB

Versions: 4

Compression:

Stored size: 1.64 KB

Contents

# Copyright: Copyright (c) 2004  Nicolas Despres. All rights reserved.
# Author: Nicolas Despres  <polrop@lrde.epita.fr>.
# License: Gnu General Public License.

# $LastChangedBy: ertai $
# $Id: abstract_node.rb 186 2005-04-03 00:07:45Z ertai $


require 'abstract'
require 'array_each_pair'

class AbstractNode
  include Abstract

  def initialize(data=nil, *sub_nodes)
    @data = data
    self.each_node { |sub_node| check_sub_node_type(sub_node) }
  end

  attr_reader :data, :sub_nodes

  def [](index)
    @sub_nodes[index]
  end

  def []=(index, sub_node)
    check_sub_node_type(sub_node)
    @sub_nodes[index] = sub_node
  end

  def merge!(sub_nodes)
    sub_nodes.each { |index, sub_node| self[index] = sub_node }
  end

  def each_pair(&block)
    @sub_nodes.each_pair { |index, sub_node| block[index, sub_node] }
  end

  def each_node(&block)
    @sub_nodes.each_pair { |index, sub_node| block[sub_node] }
  end

  alias :each :each_node

  def each_index(&block)
    @sub_nodes.each_pair { |index, sub_node| block[index] }
  end

  def delete(index)
    @sub_nodes.delete(index)
  end

  def nb_sub_nodes
    @sub_nodes.size
  end

  alias size nb_sub_nodes
  alias length nb_sub_nodes

  def leaf?
    @sub_nodes.empty?
  end

  def pre_depth_first(index=nil, &block)
    block[index, self]
    @sub_nodes.each_pair do |index, sub_node|
      sub_node.pre_depth_first(index, &block)
    end
    nil
  end

#   FIXME: implement me
#   def breadth_first(&block)
#   end

  protected
  def check_sub_node_type(sub_node)
    unless sub_node.is_a?(self.class)
      raise(TypeError, "`#{sub_node}' - must be a #{self.class}")
    end
  end

end # class AbstractNode


Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
ttk-0.1.576 ruby_ex/abstract_node.rb
ttk-0.1.579 ruby_ex/abstract_node.rb
ttk-0.1.580 ruby_ex/abstract_node.rb
vcs-0.2.148 ruby_ex/abstract_node.rb