Class: Hyperactive::Tree::Node
- Inherits:
-
Record::Bass
- Object
- Record::Bass
- Hyperactive::Tree::Node
- Includes:
- Cleaner::Accessors
- Defined in:
- lib/hyperactive/tree.rb
Constant Summary collapse
- @@nil_node =
nil
- @@nil_node_record_id =
nil
Instance Attribute Summary collapse
-
#key ⇒ Object
Returns the value of attribute key.
-
#left ⇒ Object
Returns the value of attribute left.
-
#level ⇒ Object
Returns the value of attribute level.
-
#right ⇒ Object
Returns the value of attribute right.
-
#value ⇒ Object
Returns the value of attribute value.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(options = {}) ⇒ Node
constructor
A new instance of Node.
- #insert(key, value) ⇒ Object
- #nil_node? ⇒ Boolean
- #skew ⇒ Object
- #split ⇒ Object
Methods included from Cleaner::Accessors
append_features, #dirty?, #is_clean!, #is_dirty!
Methods included from Hyperactive::Transactions::Accessors
Methods included from Index::Indexable
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( = {}) super() self.right = [:right] || self.class.nil_node self.right = self if self.right == :self self.left = [:left] || self.class.nil_node self.left = self if self.left == :self self.level = [:level] || 1 self.value = [:value] self.key = [:key] end |
Instance Attribute Details
#key ⇒ Object
Returns the value of attribute key.
41 42 43 |
# File 'lib/hyperactive/tree.rb', line 41 def key @key end |
#left ⇒ Object
Returns the value of attribute left.
41 42 43 |
# File 'lib/hyperactive/tree.rb', line 41 def left @left end |
#level ⇒ Object
Returns the value of attribute level.
41 42 43 |
# File 'lib/hyperactive/tree.rb', line 41 def level @level end |
#right ⇒ Object
Returns the value of attribute right.
41 42 43 |
# File 'lib/hyperactive/tree.rb', line 41 def right @right end |
#value ⇒ Object
Returns the value of attribute value.
41 42 43 |
# File 'lib/hyperactive/tree.rb', line 41 def value @value end |
Class Method Details
.nil_node ⇒ Object
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_id ⇒ Object
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
73 74 75 |
# File 'lib/hyperactive/tree.rb', line 73 def nil_node? self.record_id == self.class.nil_node_record_id end |
#skew ⇒ Object
67 68 |
# File 'lib/hyperactive/tree.rb', line 67 def skew end |
#split ⇒ Object
70 71 |
# File 'lib/hyperactive/tree.rb', line 70 def split end |