# File lib/extlib/lazy_array.rb, line 171 def <<(entry) if loaded? lazy_load @array << entry else @tail << entry end self end
# File lib/extlib/lazy_array.rb, line 317 def ==(other) if equal?(other) return true end unless other.respond_to?(:to_ary) return false end # if necessary, convert to something that can be compared other = other.to_ary unless other.respond_to?(:[]) cmp?(other, :==) end
# File lib/extlib/lazy_array.rb, line 102 def [](*args) index, length = extract_slice_arguments(*args) if length == 1 && args.size == 1 && args.first.kind_of?(Integer) return at(index) end if index >= 0 && lazy_possible?(@head, index + length) @head[*args] elsif index < 0 && lazy_possible?(@tail, index.abs - 1 + length) @tail[*args] else lazy_load @array[*args] end end
# File lib/extlib/lazy_array.rb, line 134 def []=(*args) index, length = extract_slice_arguments(*args[0..-2]) if index >= 0 && lazy_possible?(@head, index + length) @head.[]=(*args) elsif index < 0 && lazy_possible?(@tail, index.abs - 1 + length) @tail.[]=(*args) else lazy_load @array.[]=(*args) end end
# File lib/extlib/lazy_array.rb, line 94 def any?(&block) (lazy_possible?(@tail) && @tail.any?(&block)) || (lazy_possible?(@head) && @head.any?(&block)) || begin lazy_load @array.any?(&block) end end
# File lib/extlib/lazy_array.rb, line 26 def at(index) if index >= 0 && lazy_possible?(@head, index + 1) @head.at(index) elsif index < 0 && lazy_possible?(@tail, index.abs) @tail.at(index) else lazy_load @array.at(index) end end
# File lib/extlib/lazy_array.rb, line 270 def clear mark_loaded @array.clear self end
# File lib/extlib/lazy_array.rb, line 181 def concat(other) if loaded? lazy_load @array.concat(other) else @tail.concat(other) end self end
# File lib/extlib/lazy_array.rb, line 241 def delete_at(index) if index >= 0 && lazy_possible?(@head, index + 1) @head.delete_at(index) elsif index < 0 && lazy_possible?(@tail, index.abs) @tail.delete_at(index) else lazy_load @array.delete_at(index) end end
# File lib/extlib/lazy_array.rb, line 252 def delete_if(&block) if loaded? lazy_load @array.delete_if(&block) else @reapers << block @head.delete_if(&block) @tail.delete_if(&block) end self end
# File lib/extlib/lazy_array.rb, line 86 def empty? (@tail.nil? || @tail.empty?) && (@head.nil? || @head.empty?) && begin lazy_load @array.empty? end end
# File lib/extlib/lazy_array.rb, line 332 def eql?(other) if equal?(other) return true end unless other.class.equal?(self.class) return false end cmp?(other, :eql?) end
# File lib/extlib/lazy_array.rb, line 37 def fetch(*args, &block) index = args.first if index >= 0 && lazy_possible?(@head, index + 1) @head.fetch(*args, &block) elsif index < 0 && lazy_possible?(@tail, index.abs) @tail.fetch(*args, &block) else lazy_load @array.fetch(*args, &block) end end
# File lib/extlib/lazy_array.rb, line 8 def first(*args) if lazy_possible?(@head, *args) @head.first(*args) else lazy_load @array.first(*args) end end
# File lib/extlib/lazy_array.rb, line 302 def freeze if loaded? @array.freeze else @head.freeze @tail.freeze end @frozen = true self end
# File lib/extlib/lazy_array.rb, line 313 def frozen? @frozen == true end
# File lib/extlib/lazy_array.rb, line 78 def include?(entry) (lazy_possible?(@tail) && @tail.include?(entry)) || (lazy_possible?(@head) && @head.include?(entry)) || begin lazy_load @array.include?(entry) end end
# File lib/extlib/lazy_array.rb, line 71 def index(entry) (lazy_possible?(@head) && @head.index(entry)) || begin lazy_load @array.index(entry) end end
# File lib/extlib/lazy_array.rb, line 211 def insert(index, *entries) if index >= 0 && lazy_possible?(@head, index) @head.insert(index, *entries) elsif index < 0 && lazy_possible?(@tail, index.abs - 1) @tail.insert(index, *entries) else lazy_load @array.insert(index, *entries) end self end
# File lib/extlib/lazy_array.rb, line 292 def kind_of?(klass) super || @array.kind_of?(klass) end
# File lib/extlib/lazy_array.rb, line 17 def last(*args) if lazy_possible?(@tail, *args) @tail.last(*args) else lazy_load @array.last(*args) end end
# File lib/extlib/lazy_array.rb, line 344 def lazy_possible?(list, need_length = 1) !loaded? && need_length <= list.size end
# File lib/extlib/lazy_array.rb, line 283 def load_with(&block) @load_with_proc = block self end
# File lib/extlib/lazy_array.rb, line 288 def loaded? @loaded == true end
# File lib/extlib/lazy_array.rb, line 223 def pop(*args) if lazy_possible?(@tail, *args) @tail.pop(*args) else lazy_load @array.pop(*args) end end
# File lib/extlib/lazy_array.rb, line 191 def push(*entries) if loaded? lazy_load @array.push(*entries) else @tail.push(*entries) end self end
# File lib/extlib/lazy_array.rb, line 264 def replace(other) mark_loaded @array.replace(other) self end
# File lib/extlib/lazy_array.rb, line 298 def respond_to?(method, include_private = false) super || @array.respond_to?(method) end
# File lib/extlib/lazy_array.rb, line 149 def reverse dup.reverse! end
# File lib/extlib/lazy_array.rb, line 153 def reverse! # reverse without kicking if possible if loaded? @array = @array.reverse else @head, @tail = @tail.reverse, @head.reverse proc = @load_with_proc @load_with_proc = lambda do |v| proc.call(v) v.instance_variable_get(:@array).reverse! end end self end
# File lib/extlib/lazy_array.rb, line 232 def shift(*args) if lazy_possible?(@head, *args) @head.shift(*args) else lazy_load @array.shift(*args) end end
# File lib/extlib/lazy_array.rb, line 121 def slice!(*args) index, length = extract_slice_arguments(*args) if index >= 0 && lazy_possible?(@head, index + length) @head.slice!(*args) elsif index < 0 && lazy_possible?(@tail, index.abs - 1 + length) @tail.slice!(*args) else lazy_load @array.slice!(*args) end end
# File lib/extlib/lazy_array.rb, line 276 def to_a lazy_load @array.to_a end
# File lib/extlib/lazy_array.rb, line 201 def unshift(*entries) if loaded? lazy_load @array.unshift(*entries) else @head.unshift(*entries) end self end
# File lib/extlib/lazy_array.rb, line 50 def values_at(*args) accumulator = [] lazy_possible = args.all? do |arg| index, length = extract_slice_arguments(arg) if index >= 0 && lazy_possible?(@head, index + length) accumulator.concat(head.values_at(*arg)) elsif index < 0 && lazy_possible?(@tail, index.abs) accumulator.concat(tail.values_at(*arg)) end end if lazy_possible accumulator else lazy_load @array.values_at(*args) end end
Generated with the Darkfish Rdoc Generator 2.