class VString

a Virtual string backed by a file, which is read on-demand

Public Class Methods

new(fd, len) click to toggle source
# File misc/pdfparse.rb, line 21
def initialize(fd, len)
        @fd = fd
        @len = len
end
read(fname) click to toggle source

creates a VString from a file

# File misc/pdfparse.rb, line 16
def self.read(fname)
        raise 'need a PDF filename' if not fname
        new File.open(fname, 'rb'), File.size(fname)
end

Public Instance Methods

[](start, len=nil) click to toggle source
# File misc/pdfparse.rb, line 28
def [](start, len=nil)
        return if not start
        if start.kind_of? Range
                len = start.end
                len -= 1 if start.exclude_end?
                len = @len+1+len if len < 0
                start = start.begin
        end
        start = @len+1+start if start < 0
        return nil if start < 0 or len < 0 or start > @len
        @fd.pos = start
        @fd.read len
end
index(sub, off=0) click to toggle source

search on a small region (1k or 1M)

# File misc/pdfparse.rb, line 43
def index(sub, off=0)
        off += 1 + @len if off < 0
        return if not ret = self[off, 1024].index(sub) || self[off, 1024*1024].index(sub)
        ret + off
end
length() click to toggle source
# File misc/pdfparse.rb, line 26
def length; @len end
rindex(sub, off=@len) click to toggle source

search on a small region (1k or 1M)

# File misc/pdfparse.rb, line 50
def rindex(sub, off=@len)
        off += 1 + @len if off < 0
        p1 = [off, 1024].min
        p2 = [off, 1024*1024].min
        if ret = self[off-p1, p1].rindex(sub)
               ret + off-p1
        elsif p1 != p2 and ret = self[off-p2, p2].rindex(sub)
                ret + off-p2
        end
end