hyperactive 0.1.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -16,6 +16,7 @@ Hyperactive::Tree:: A collection class that contains any number of Hyperactive::
16
16
  To define a Record subclass that has the properties @active and @city that are indexed in two ways:
17
17
 
18
18
  class MyClass < Hyperactive::Record
19
+ attr_accessor :active, :city
19
20
  select(:active_records, Proc.new do |record|
20
21
  record.active == true
21
22
  end)
@@ -0,0 +1,154 @@
1
+ # Archipelago - a distributed computing toolkit for ruby
2
+ # Copyright (C) 2006 Martin Kihlgren <zond at troja dot ath dot cx>
3
+ #
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU General Public License
6
+ # as published by the Free Software Foundation; either version 2
7
+ # of the License, or (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
+
18
+
19
+ require 'rubygems'
20
+ require 'archipelago'
21
+
22
+ module Hyperactive
23
+
24
+ #
25
+ # A package that simplifies putting dumb linked lists in the distributed database.
26
+ #
27
+ module List
28
+
29
+ #
30
+ # A List element.
31
+ #
32
+ class Element < Hyperactive::Record::Bass
33
+ attr_accessor :previous, :next, :value
34
+ end
35
+
36
+ #
37
+ # A List head.
38
+ #
39
+ class Head < Hyperactive::Record::Bass
40
+ attr_reader :first_element, :last_element, :size
41
+
42
+ #
43
+ # Create a Head.
44
+ #
45
+ # NB: As usual, dont call this. Use Head.get_instance instead.
46
+ #
47
+ def initialize
48
+ @size = 0
49
+ @first_element = @last_element = nil
50
+ end
51
+
52
+ #
53
+ # Return the first value of the list.
54
+ #
55
+ def first
56
+ @first_element.value
57
+ end
58
+
59
+ #
60
+ # Return the last value of the list.
61
+ #
62
+ def last
63
+ @last_element.value
64
+ end
65
+
66
+ #
67
+ # Push +v+ onto the end of this list.
68
+ #
69
+ def <<(v)
70
+ if @first_element
71
+ new_element = Element.get_instance
72
+ new_element.value = v
73
+ new_element.previous = @last_element
74
+ @last_element.next = new_element
75
+ @last_element = new_element
76
+ else
77
+ start(v)
78
+ end
79
+ @size += 1
80
+ return v
81
+ end
82
+
83
+ #
84
+ # Push +v+ onto the beginning of this list.
85
+ #
86
+ def unshift(v)
87
+ if @first_element
88
+ new_element = Element.get_instance
89
+ new_element.value = v
90
+ new_element.next = @first_element
91
+ @first_element.previous = new_element
92
+ @first_element = new_element
93
+ else
94
+ start(v)
95
+ end
96
+ @size += 1
97
+ return v
98
+ end
99
+
100
+ #
101
+ # Remove the last value from this list and return it.
102
+ #
103
+ def pop
104
+ v = nil
105
+ if size > 1
106
+ element = @last_element
107
+ @last_element = element.previous
108
+ @last_element.next = nil
109
+ v = element.value
110
+ element.destroy
111
+ else
112
+ v = @first_element.value
113
+ @first_element.destroy
114
+ @first_element = @last_element = nil
115
+ end
116
+ @size -= 1
117
+ return v
118
+ end
119
+
120
+ #
121
+ # Remove the first value from this list and return it.
122
+ #
123
+ def shift
124
+ v = nil
125
+ if size > 1
126
+ element = @first_element
127
+ @first_element = element.next
128
+ @first_element.previous = nil
129
+ v = element.value
130
+ element.destroy
131
+ else
132
+ v = @first_element.value
133
+ @first_element.destroy
134
+ @first_element = @last_element = nil
135
+ end
136
+ @size -= 1
137
+ return v
138
+ end
139
+
140
+ private
141
+
142
+ #
143
+ # Start this list with +v+ when it has no other values.
144
+ #
145
+ def start(v)
146
+ @first_element = @last_element = Element.get_instance
147
+ @first_element.value = v
148
+ end
149
+
150
+ end
151
+
152
+ end
153
+
154
+ end