Class: Hyperactive::Tree::Node

Inherits:
Record::Bass show all
Includes:
Cleaner::Accessors
Defined in:
lib/hyperactive/tree.rb

Constant Summary collapse

@@nil_node =
nil
@@nil_node_record_id =
nil

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Cleaner::Accessors

append_features, #dirty?, #is_clean!, #is_dirty!

Methods included from Hyperactive::Transactions::Accessors

append_features

Methods included from Index::Indexable

append_features

Methods included from Record::Persistent

#<=>, append_features, #create, #destroy!, #with_transaction

Constructor Details

#initialize(options = {}) ⇒ Node

Returns a new instance of Node.



43
44
45
46
47
48
49
50
51
52
# File 'lib/hyperactive/tree.rb', line 43

def initialize(options = {})
  super()
  self.right = options[:right] || self.class.nil_node
  self.right = self if self.right == :self
  self.left = options[:left] || self.class.nil_node
  self.left = self if self.left == :self
  self.level = options[:level] || 1
  self.value = options[:value]
  self.key = options[:key]
end

Instance Attribute Details

#keyObject

Returns the value of attribute key.



41
42
43
# File 'lib/hyperactive/tree.rb', line 41

def key
  @key
end

#leftObject

Returns the value of attribute left.



41
42
43
# File 'lib/hyperactive/tree.rb', line 41

def left
  @left
end

#levelObject

Returns the value of attribute level.



41
42
43
# File 'lib/hyperactive/tree.rb', line 41

def level
  @level
end

#rightObject

Returns the value of attribute right.



41
42
43
# File 'lib/hyperactive/tree.rb', line 41

def right
  @right
end

#valueObject

Returns the value of attribute value.



41
42
43
# File 'lib/hyperactive/tree.rb', line 41

def value
  @value
end

Class Method Details

.nil_nodeObject



81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/hyperactive/tree.rb', line 81

def self.nil_node
  nil_node_key = Digest::SHA1.hexdigest("Hyperactive::Tree::Node::nil_node")
  @@nil_node ||= if (existing_element = Archipelago::Pirate::BLACKBEARD[nil_node_key])
                   existing_element
                 else
                   rval = Node.get_instance(:left => :self, 
                                            :right => :self, 
                                            :level => 0)
                   Archipelago::Pirate::BLACKBEARD[nil_node_key] = rval
                   rval
                 end
end

.nil_node_record_idObject



77
78
79
# File 'lib/hyperactive/tree.rb', line 77

def self.nil_node_record_id
  @@nil_node_record_id ||= self.nil_node.record_id
end

Instance Method Details

#insert(key, value) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/hyperactive/tree.rb', line 54

def insert(key, value)
  if self.nil_node?
    return Node.get_instance_with_transaction(transaction, :key => key, :value => value)
  else
    side = :left
    side = :right if self.key < key
    self.send("#{side}=", self.send(side).insert(key, value))
    rval = self.skew
    rval = rval.split
    return rval
  end
end

#nil_node?Boolean

Returns:

  • (Boolean)


73
74
75
# File 'lib/hyperactive/tree.rb', line 73

def nil_node?
  self.record_id == self.class.nil_node_record_id
end

#skewObject



67
68
# File 'lib/hyperactive/tree.rb', line 67

def skew
end

#splitObject



70
71
# File 'lib/hyperactive/tree.rb', line 70

def split
end