Class: PersistentTree::Map
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from MapView
#[], #each, #each_key, #fetch, #flatten, #include?, #keys, #select, #size
Constructor Details
#initialize(*args, &block) ⇒ Map
Returns a new instance of Map.
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
|
# File 'lib/persistent_tree/map.rb', line 173
def initialize(*args, &block)
default_proc = nil
default_value = nil
if block_given?
raise ArgumentError, "wrong number of arguments (#{args.length} for 0)" unless args.empty?
if block.is_a? Proc
default_proc = block
else
default_proc = Proc.new
end
raise TypeError, "default_proc takes two arguments (2 for #{default_proc.arity})" \
if default_proc.lambda? && default_proc.arity != 2
elsif args.length == 1
default_value = args[0]
elsif !args.empty?
raise ArgumentError, "wrong number of arguments (#{args.length} for 0..1)"
end
super(PersistentTree::Tree.new, 0, default_value, default_proc)
end
|
Instance Attribute Details
#default_proc ⇒ Object
Returns the value of attribute default_proc.
171
172
173
|
# File 'lib/persistent_tree/map.rb', line 171
def default_proc
@default_proc
end
|
Instance Method Details
#[]=(key, value) ⇒ Object
196
197
198
|
# File 'lib/persistent_tree/map.rb', line 196
def []=(key, value)
store(key, value)
end
|
#default(key = nil) ⇒ Object
200
201
202
203
204
205
206
|
# File 'lib/persistent_tree/map.rb', line 200
def default(key = nil)
if @default_value
@default_value
elsif @default_proc && key
@default_proc.call(self, key)
end
end
|
#default=(value) ⇒ Object
208
209
210
211
|
# File 'lib/persistent_tree/map.rb', line 208
def default=(value)
@default_proc = nil
@default_value = value
end
|
#store(key, value) ⇒ Object
230
231
232
233
234
235
236
237
238
239
|
# File 'lib/persistent_tree/map.rb', line 230
def store(key, value)
if key.is_a?(String) && !key.frozen?
key_to_store = key.freeze
else
key_to_store = key
end
@tree.insert_or_replace(Entry.new(key_to_store, value)).value
@version = @tree.version
value
end
|
#version(*args) ⇒ Object
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
|
# File 'lib/persistent_tree/map.rb', line 241
def version(*args)
if args.length == 1
requested_version = args[0]
raise TypeError, 'requested version should be an integer' \
unless requested_version.is_a? Integer
raise RangeError, "requested version (#{requested_version}) exceeds current version (#{@tree.version})" \
if requested_version > @tree.version
MapView.new(@tree, requested_version, @default_value, @default_proc)
elsif args.empty?
@tree.version
else
raise ArgumentError, "wrong number of arguments(#{args.length} for 0..1)"
end
end
|