Class: PEROBS::BTreeNodeLink

Inherits:
Object
  • Object
show all
Defined in:
lib/perobs/BTreeNodeLink.rb

Overview

This class is used to form the links between the in-memory BTreeNode objects. The link is based on the address of the node in the file. The class objects transparently convert the address into a corresponding BTreeNode object and pass on all method calls.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tree, node_or_address) ⇒ BTreeNodeLink

Create a new BTreeNodeLink object.

Parameters:

  • tree (BTree)

    The BTree that holds the nodes.

  • node_or_address (BTreeNode or BTreeNodeLink or Integer)

    a BTreeNode, BTreeNodeLink reference or the node address in the file.



43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/perobs/BTreeNodeLink.rb', line 43

def initialize(tree, node_or_address)
  @tree = tree
  if node_or_address.is_a?(BTreeNode) ||
     node_or_address.is_a?(BTreeNodeLink)
    @node_address = node_or_address.node_address
  elsif node_or_address.is_a?(Integer)
    @node_address = node_or_address
  else
    PEROBS.log.fatal "Unsupported argument type #{node_or_address.class}"
  end
  if @node_address == 0
    PEROBS.log.fatal "Node address may not be 0"
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object

All calls to a BTreeNodeLink object will be forwarded to the corresponding BTreeNode object. If that



60
61
62
63
# File 'lib/perobs/BTreeNodeLink.rb', line 60

def method_missing(method, *args, &block)
  #$stderr.puts "Method missing: #{method}"
  get_node.send(method, *args, &block)
end

Instance Attribute Details

#node_addressObject (readonly)

Returns the value of attribute node_address.



36
37
38
# File 'lib/perobs/BTreeNodeLink.rb', line 36

def node_address
  @node_address
end

Instance Method Details

#!=(node) ⇒ Boolean

Compare this node to another node.

Returns:

  • (Boolean)

    true if node address is not identical, false otherwise



116
117
118
119
120
121
122
# File 'lib/perobs/BTreeNodeLink.rb', line 116

def !=(node)
  if node.nil?
    return !@node_address.nil?
  end

  @node_address != node.node_address
end

#==(node) ⇒ Boolean

Compare this node to another node.

Returns:

  • (Boolean)

    true if node address is identical, false otherwise



110
111
112
# File 'lib/perobs/BTreeNodeLink.rb', line 110

def ==(node)
  @node_address == node.node_address
end

Check the link to a sub-node. This method silently ignores all errors if the sub-node does not exist.

Returns:

  • (Boolean)

    True if link is OK, false otherweise



131
132
133
134
135
136
137
# File 'lib/perobs/BTreeNodeLink.rb', line 131

def check_node_link(branch, stack)
  begin
    return get_node.check_node_link(branch, stack)
  rescue
    return false
  end
end

#childrenObject



84
85
86
# File 'lib/perobs/BTreeNodeLink.rb', line 84

def children
  get_node.children
end

#get(key) ⇒ Object



88
89
90
# File 'lib/perobs/BTreeNodeLink.rb', line 88

def get(key)
  get_node.get(key)
end

#get_nodeObject



144
145
146
# File 'lib/perobs/BTreeNodeLink.rb', line 144

def get_node
  @tree.node_cache.get(@node_address)
end

#insert(key, value) ⇒ Object



96
97
98
# File 'lib/perobs/BTreeNodeLink.rb', line 96

def insert(key, value)
  get_node.insert(key, value)
end

#insert_element(key, voc) ⇒ Object



100
101
102
# File 'lib/perobs/BTreeNodeLink.rb', line 100

def insert_element(key, voc)
  get_node.insert_element(key, voc)
end

#is_leafObject

Directly define some commonly used methods to avoid the method_missing overhead.



72
73
74
# File 'lib/perobs/BTreeNodeLink.rb', line 72

def is_leaf
  get_node.is_leaf
end

#is_top?Boolean

Returns:

  • (Boolean)


124
125
126
# File 'lib/perobs/BTreeNodeLink.rb', line 124

def is_top?
  get_node.is_top?
end

#keysObject



76
77
78
# File 'lib/perobs/BTreeNodeLink.rb', line 76

def keys
  get_node.keys
end

#respond_to?(method, include_private = false) ⇒ Boolean

Make it properly introspectable.

Returns:

  • (Boolean)


66
67
68
# File 'lib/perobs/BTreeNodeLink.rb', line 66

def respond_to?(method, include_private = false)
  get_node.respond_to?(method)
end

#search_key_index(key) ⇒ Object



92
93
94
# File 'lib/perobs/BTreeNodeLink.rb', line 92

def search_key_index(key)
  get_node.search_key_index(key)
end

#split_nodeObject



104
105
106
# File 'lib/perobs/BTreeNodeLink.rb', line 104

def split_node
  get_node.split_node
end

#to_sObject

Returns Textual version of the BTreeNode.

Returns:

  • Textual version of the BTreeNode



140
141
142
# File 'lib/perobs/BTreeNodeLink.rb', line 140

def to_s
  get_node.to_s
end

#valuesObject



80
81
82
# File 'lib/perobs/BTreeNodeLink.rb', line 80

def values
  get_node.values
end