class Sequence::SubSeq
Attributes
data[R]
pos[R]
size[R]
Public Class Methods
new(seq, first,len)
click to toggle source
# File lib/sequence/subseq.rb, line 8 def initialize(seq, first,len) assert first first+len-1>=seq.size and len=seq.size-first @data=seq @pos=0 @first,@size=first,len extend seq.like #ask for notifications on the parent seq... @data.on_change_notify self assert @first #p [:init,__id__] end
Public Instance Methods
_pos=(newp)
click to toggle source
# File lib/sequence/subseq.rb, line 67 def _pos=newp @pos=newp end
change_notification(data,first,oldsize,newsize)
click to toggle source
# File lib/sequence/subseq.rb, line 22 def change_notification data,first,oldsize,newsize assert @data==data old_first=@first old_size=@size @pos=(_adjust_pos_on_change @first+@pos,first,oldsize,newsize)-@first @size=(_adjust_pos_on_change @first+@size,first,oldsize,newsize)-@first @first=_adjust_pos_on_change @first,first,oldsize,newsize assert @first #p [:cn, __id__] notify_change(self, first-@first, oldsize, newsize) end
closed?()
click to toggle source
Calls superclass method
Object#closed?
# File lib/sequence/subseq.rb, line 89 def closed? super or @data.closed? end
eof?()
click to toggle source
# File lib/sequence/subseq.rb, line 61 def eof? @pos>=@size end
modify(*args)
click to toggle source
# File lib/sequence/subseq.rb, line 81 def modify(*args) data=args.pop first,len,only1=_parse_slice_args( *args) first+=@first only1 ? @data.modify(first,data) : @data.modify(first,len,data) end
offset()
click to toggle source
# File lib/sequence/subseq.rb, line 35 def offset; @first end
read(len)
click to toggle source
# File lib/sequence/subseq.rb, line 49 def read(len) result=readahead(len) move result.size result end
readahead(len)
click to toggle source
# File lib/sequence/subseq.rb, line 37 def readahead(len) eof? and return new_data len>rest=rest_size and len=rest @data[@pos+offset,len] end
readback(len)
click to toggle source
# File lib/sequence/subseq.rb, line 55 def readback(len) result=readbehind(len) move( -result.size ) result end
readbehind(len)
click to toggle source
# File lib/sequence/subseq.rb, line 43 def readbehind(len) @pos.zero? and return new_data @pos>=len or len=@pos @data[@pos+offset-len,len] end
subseq(*args)
click to toggle source
# File lib/sequence/subseq.rb, line 75 def subseq *args #p [:subseq, __id__] first,len,only1=_parse_slice_args( *args) SubSeq.new(@data,@first+first,len) end