Class: Stupidedi::Reader::FileInput
- Inherits:
-
AbstractInput
- Object
- AbstractInput
- Stupidedi::Reader::FileInput
- Defined in:
- lib/stupidedi/reader/input/file_input.rb
Overview
This class is not thread-safe. If more than one Thread has access
to the same instance, and they simultaneously call methods on that
instance, the methods may produce incorrect results and the object might
be left in an inconsistent state.
Querying the Position (collapse)
-
- column
readonly
Returns the value of attribute column.
-
- (Integer) line
readonly
(see AbstractInput#line).
-
- offset
readonly
Returns the value of attribute offset.
-
- path
readonly
Returns the value of attribute path.
Instance Attribute Summary (collapse)
- - (IO) io readonly
Querying the Position (collapse)
-
- (Position) position
The Position value that describes the position of the input stream.
Reading the Input (collapse)
- - (String) at(n)
-
- (Integer) index(value)
Returns the smallest
n, where #at(n)==element. - - (String) take(n)
Advancing the Cursor (collapse)
-
- (AbstractInput) drop(n)
Advance the cursor forward
nelements.
Testing the Input (collapse)
Instance Method Summary (collapse)
-
- (FileInput) initialize(io, offset = 0, line = 1, column = 1, size = io.stat.size)
constructor
A new instance of FileInput.
- - pretty_print(q)
Methods included from Inspect
Constructor Details
- (FileInput) initialize(io, offset = 0, line = 1, column = 1, size = io.stat.size)
A new instance of FileInput
15 16 17 18 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 15 def initialize(io, offset = 0, line = 1, column = 1, size = io.stat.size) @io, @offset, @line, @column, @size = io, offset, line, column, size end |
Instance Attribute Details
- column (readonly)
Returns the value of attribute column
31 32 33 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 31 def column @column end |
- (IO) io (readonly)
13 14 15 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 13 def io @io end |
- (Integer) line (readonly)
(see AbstractInput#line)
28 29 30 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 28 def line @line end |
- offset (readonly)
Returns the value of attribute offset
24 25 26 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 24 def offset @offset end |
- path (readonly)
Returns the value of attribute path
34 35 36 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 34 def path @path end |
Instance Method Details
- (String) at(n)
56 57 58 59 60 61 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 56 def at(n) raise ArgumentError, "n must be positive" unless n >= 0 @io.seek(@offset + n) @io.read(1) end |
- (Boolean) defined_at?(n)
111 112 113 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 111 def defined_at?(n) n < @size end |
- (AbstractInput) drop(n)
Advance the cursor forward n elements
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 85 def drop(n) raise ArgumentError, "n must be positive" unless n >= 0 @io.seek(@offset) prefix = @io.read(n) suffix = @io length = prefix.length count = prefix.count("\n") column = unless count.zero? length - prefix.rindex("\n") else @column + length end copy(:offset => @offset + length, :line => @line + count, :column => column, :size => @size - length) end |
- (Boolean) empty?
116 117 118 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 116 def empty? @io.eof? end |
- (Integer) index(value)
Returns the smallest n, where #at(n) == element
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 64 def index(value) @io.seek(@offset) length = value.length # We need to start with value != buffer, and this is a reasonable guess buffer = "\377" * length until @io.eof? buffer.slice!(0) buffer << @io.read(1) if buffer == value return @io.tell - @offset - length end end end |
- (Position) position
The Position value that describes the position of the input stream
37 38 39 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 37 def position Position.new(@offset, @line, @column, @io.path) end |
- pretty_print(q)
This method returns an undefined value.
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 124 def pretty_print(q) q.text("FileInput") q.group(2, "(", ")") do preview = take(4) preview = if preview.empty? "EOF" elsif preview.length <= 3 preview.inspect else (preview.take(3) << "...").inspect end q.text preview q.text " at line #{@line}, column #{@column}, offset #{@offset}, file #{File.basename(@io.path)}" end end |
- (String) take(n)
46 47 48 49 50 51 52 |
# File 'lib/stupidedi/reader/input/file_input.rb', line 46 def take(n) @io.seek(@offset) # Calling @io.read with more than the number of available bytes will # return nil, so we have to calculate how many bytes remain @io.read((n <= @size) ? n : @size) end |