deferred class FILTER_INPUT_STREAM
Summary
A filtered input stream.
Direct parents
Inherit list: INPUT_STREAM
Insert list: FILTER
Known children
Inherit list: BASE64_INPUT_STREAM, HTTP_CLIENT_INPUT_STREAM, MONITORED_INPUT_STREAM, QUOTED_PRINTABLE_INPUT_STREAM, TEMPLATE_INPUT_STREAM
Class invariant
Overview
Features
{ANY}
{STREAM}
  • do_detach
    Used by the underlying stream to require not to be filtered anymore
{}
{ANY}
{FILTER_INPUT_STREAM}
{FILTER}
  • filter: FILTER_INPUT_STREAM
    The filter that uses this stream as backend
{ANY}
{}
{ANY}
{}
{STREAM_HANDLER}
{FILTER}
{ANY}
{}
{RECYCLING_POOL}
  • recycle
    Do whatever needs to be done to free resources or recycle other objects when recycling this one
{}
  • dispose
    Action to be executed just before garbage collection reclaims an object.
{}
{ANY}
Skipping separators:
{ANY}
To read one number at a time:
{ANY}
To read one line or one word at a time:
{ANY}
Other features:
{ANY}
{}
{FILTER}
{ANY}
{}
end_of_input: BOOLEAN
effective function
{ANY}
end_of_input means the previous attempt in character reading failed because the end has been reached.
So last_character is not valid and you are not allowed to do any read attempt anymore.
Notes:
  • Just after a successful connect, end_of_input is always False because you did not yet read anything).
  • Once the end of input has been reached, this is definitive in that no more characters will ever be provided (but of course you can still come back if can_unread_character; end_of_input will be changed if you unread_character). In that, it is different from can_read_character which is only a temporary state.
Please refer to the Liberty Eiffel FAQ or tutorial/io examples.
can_read_character: BOOLEAN
effective function
{ANY}
Note that this state is usually temporary.
Usually it is called until either it becomes True or the stream is disconnected:
 from
 until
    stream.can_read_character or else not stream.is_connected
 loop
    -- some "still waiting..." code, maybe a sandglass?
 end
 if stream.is_connected then
    stream.read_character
 end
See also: is_connected, end_of_input
require
  • is_connected
ensure
  • Result implies not end_of_input
valid_last_character: BOOLEAN
effective function
{ANY}
require
  • is_connected
can_read_line: BOOLEAN
effective function
{ANY}
require
  • is_connected
can_unread_character: BOOLEAN
effective function
{ANY}
require
  • is_connected
  • valid_last_character
disconnect
effective procedure
{ANY}
Disconnect from the underlying stream.
require
    • is_connected
    • can_disconnect
      • is_connected
      • can_disconnect
      • is_connected
      • can_disconnect
ensure
  • not is_connected
  • stream = Void
  • not is_filtered
do_detach
effective procedure
Used by the underlying stream to require not to be filtered anymore
ensure
  • stream = Void
stream: INPUT_STREAM
writable attribute
{}
The underlying stream (i.e. the filtered one)
read_character
effective procedure
{ANY}
If read_character fail, end_of_input is set.
Else, use last_character. Read tutorial or io cluster documentation to learn the read_character usage pattern.
require
  • is_connected
  • not is_filtered and then can_read_character
ensure
read_line_in (buffer: STRING)
effective procedure
{ANY}
Same job as read_line but storage is directly done in buffer.
Read tutorial or io cluster documentation to learn the read_line usage pattern.
require
  • is_connected
  • not is_filtered and then can_read_line
  • buffer /= Void
read_available_in (buffer: STRING, limit: INTEGER_32)
effective procedure
{ANY}
Same job as read_available but storage is directly done in buffer.
The usage pattern is the same as for read_line.
require
  • is_connected
  • not is_filtered
  • buffer /= Void
  • limit > 0
unread_character
effective procedure
{ANY}
require
  • is_connected
  • not is_filtered and then can_unread_character
ensure
last_character: CHARACTER
effective function
{ANY}
require
  • is_connected
  • not end_of_input
  • not is_filtered and then valid_last_character
ensure
detach
effective procedure
{ANY}
Shake off the filter.
ensure
  • not is_filtered
filtered_read_character
deferred procedure
filtered_unread_character
deferred procedure
filtered_last_character: CHARACTER
deferred function
filtered_read_available_in (buffer: STRING, limit: INTEGER_32)
effective procedure
require
filtered_read_line_in (buffer: STRING)
effective procedure
require
filter: FILTER_INPUT_STREAM
writable attribute
The filter that uses this stream as backend
event_can_read: EVENT_DESCRIPTOR
effective function
{ANY}
writable attribute
{}
new_url: URL
effective function
{}
ensure
  • Result /= Void
is_connected: BOOLEAN
deferred function
{ANY}
True if the stream is connected.
Only in that case can data be transferred via this stream.
descriptor: INTEGER_32
effective function
{ANY}
Some OS-dependent descriptor.
Mainly used by the sequencer library (see READY_CONDITION).
require
has_descriptor: BOOLEAN
effective function
{ANY}
True if that stream can be associated to some OS-meaningful descriptor.
require
can_disconnect: BOOLEAN
deferred function
{ANY}
True if the stream can be safely disconnected (without data loss, etc.)
require
url: URL
frozen
effective function
{ANY}
The URL to this stream as resource
ensure
  • not_void: Result /= Void
  • always_the_same: Result = url
url_memory: URL
writable attribute
{}
stream_pointer: POINTER
effective function
Some Back-end-dependent pointer (FILE* in C, InputStream or OutputStream in Java)
has_stream_pointer: BOOLEAN
effective function
True if that stream can be associated to some Back-end-meaningful stream pointer.
require
filtered_descriptor: INTEGER_32
deferred function
Find the descriptor of the terminal stream...
Filters do not have descriptors of their own
require
filtered_has_descriptor: BOOLEAN
deferred function
True if the underlying terminal stream has a descriptor
require
filtered_stream_pointer: POINTER
deferred function
Find the pointer of the terminal stream...
Filters do not have pointers of their own
require
filtered_has_stream_pointer: BOOLEAN
deferred function
True if the underlying terminal stream has a pointer
require
event_exception: EVENT_DESCRIPTOR
effective function
{ANY}
stream_exception: STREAM_EXCEPTION
writable attribute
{}
recycle
effective procedure
Do whatever needs to be done to free resources or recycle other objects when recycling this one
dispose
effective procedure
{}
Action to be executed just before garbage collection reclaims an object.
sequencer_descriptor (file: POINTER): INTEGER_32
{}
is_filtered: BOOLEAN
deferred function
{ANY}
skip_separators
effective procedure
{ANY}
Skip all separators (see is_separator of class CHARACTER) and make the first non-separator available in last_character.
This non-separator character is pushed back into the stream (see unread_character) to be available one more time (the next read_character will consider this non-separator). When end_of_input occurs, this process is automatically stopped.
require
skip_separators_using (separators: STRING)
effective procedure
{ANY}
Same job as skip_separators using the separators set.
require
skip_remainder_of_line
effective procedure
{ANY}
Skip all the remainder of the line including the end of line delimiter itself.
read_integer
effective procedure
{ANY}
Read an integer according to the Eiffel syntax.
 Make result available in last_integer.  Heading
separators are automatically skipped using is_separator of class CHARACTER.  Trailing separators
are not skipped.
require ensure
last_integer: INTEGER_32
writable attribute
{ANY}
Last integer read using read_integer.
valid_last_integer: BOOLEAN
writable attribute
{ANY}
Was the last call to read_integer successful ?
last_real: REAL_64
writable attribute
{ANY}
Last real read with read_real.
valid_last_real: BOOLEAN
writable attribute
{ANY}
Was the last call to read_real successful ?
read_real
effective procedure
{ANY}
Read a REAL and make the result available in last_real.
require ensure
last_string: STRING
once function
{ANY}
Access to the unique common buffer to get for example the result computed by read_line, read_word, newline, etc.
This is a once function (the same common buffer is used for all streams).
read_line
effective procedure
{ANY}
Read a complete line ended by '%N' or end_of_input.%
% Make the result available in last_string common buffer. The end of line character (usually '%N') is not added in the last_string buffer. Read tutorial or io cluster documentation to learn the read_line usage pattern.
See also read_line_in.
require
read_available (limit: INTEGER_32)
effective procedure
{ANY}
Read as many characters as possible, as long as the stream does not block and up to the given limit.
read_word
effective procedure
{ANY}
Read a word using is_separator of class CHARACTER.
The result is available in the last_string common buffer. Heading separators are automatically skipped. Trailing separators are not skipped (last_character is left on the first one). If end_of_input is encountered, Result can be the empty string.
require
newline
effective procedure
{ANY}
Consume input until newline ('%N') is found.
% The corresponding STRING is stored in last_string common buffer.
require
reach_and_skip (keyword: STRING)
effective procedure
{ANY}
Try to skip enough characters in order to reach the keyword which is skipped too.
If the keyword is not in the remainder of this stream, the process is stopped as soon as end_of_input occurs.
require ensure
read_word_using (separators: STRING)
effective procedure
{ANY}
Same job as read_word using separators.
require
read_tail_in (str: STRING)
effective procedure
{ANY}
Read all remaining character of the stream in str.
require ensure
io_getc (stream: POINTER): INTEGER_32
{}
io_ungetc (byte: CHARACTER, stream: POINTER)
{}
io_fread (buf: NATIVE_ARRAY[CHARACTER], size: INTEGER_32, stream: POINTER): INTEGER_32
{}
return size read or 0 if end of input (-1 on error => exception ?)
{}
set_filter (a_filter: FILTER)
effective procedure
Used by the filter itself to get attached
require
  • a_filter /= Void
ensure
connect_to (a_stream: FILTERABLE)
effective procedure
{ANY}
Connect the filter to some underlying stream.
require
  • not is_connected
  • a_stream.is_connected
  • not a_stream.is_filtered
ensure
local_can_disconnect: BOOLEAN
deferred function
{}
True if this stream can be safely disconnected (without data loss, etc.)
without taking into account the state of the underlying stream.