core :: FileReader
Stream
that can read from a Filecore :: FileReader :: defaultinit
core :: FileReader :: from_fd
Creates a new File stream from a file descriptorcore $ FileReader :: SELF
Type of this instance, automatically specialized in every classcore $ FileReader :: raw_read_byte
Read a byte directly from the underlying stream, withoutcore $ FileReader :: raw_read_bytes
Read at mostmax
bytes from the underlying stream into buf
,
core :: Reader :: append_line_to
Read a string until the end of the line and append it tos
.
binary :: BinaryStream :: big_endian
Use the big-endian convention? otherwise use little-endian.binary :: BinaryStream :: big_endian=
Use the big-endian convention? otherwise use little-endian.core :: Object :: class_factory
Implementation used byget_class
to create the specific class.
core :: PollableReader :: defaultinit
binary :: BinaryStream :: defaultinit
core :: FileStream :: defaultinit
core :: FileReader :: defaultinit
core :: Stream :: defaultinit
core :: Reader :: defaultinit
core :: Object :: defaultinit
core :: Reader :: deserialize_msgpack
Deserialize full Nitnullable Object
from MessagePack formated data
core :: FileStream :: file_stat
The status of a file. see POSIX stat(2).core :: FileReader :: from_fd
Creates a new File stream from a file descriptorcore :: Object :: is_same_instance
Return true ifself
and other
are the same instance (i.e. same identity).
core :: Object :: is_same_serialized
Isself
the same as other
in a serialization context?
core :: Object :: is_same_type
Return true ifself
and other
have the same dynamic type.
core :: Stream :: last_error=
Error produced by the file streamcore :: Stream :: lookahead=
Lookahead buffer for codecscore :: Stream :: lookahead_capacity
Capacity of the lookaheadcore :: Stream :: lookahead_capacity=
Capacity of the lookaheadcore :: Stream :: lookahead_length
Current occupation of the lookaheadcore :: Stream :: lookahead_length=
Current occupation of the lookaheadcore :: Object :: output_class_name
Display class name on stdout (debug only).core :: PollableReader :: poll_in
Is there something to read? (without blocking)core :: Reader :: raw_read_byte
Read a byte directly from the underlying stream, withoutcore :: Reader :: raw_read_bytes
Read at mostmax
bytes from the underlying stream into buf
,
core :: Reader :: read_block
Read the length as a 64 bits integer, then the content of the blockcore :: Reader :: read_bytes_to_cstring
Reads up tomax
bytes from source and stores them in bytes
core :: Reader :: read_double
Read a floating point on 64 bits and return it as aFloat
core :: Reader :: read_float
Read a floating point on 32 bits and return it as aFloat
core :: Reader :: read_int64
Read a signed integer on 64 bits and return is anInt
core :: Reader :: read_msgpack
Read the next MessagePack object and return it as a simple Nit objectcore :: Reader :: read_nonwhitespace
Skip whitespace characters (if any) then return the following non-whitespace character.core :: FileStream :: set_buffering_mode
Sets the buffering mode for the current FileStreamcore :: Stream :: write_buffer
Buffer for writing data to a streamcore :: Stream :: write_buffer=
Buffer for writing data to a streamReader
capable of declaring if readable without blocking
# `Stream` that can read from a File
class FileReader
super FileStream
super PollableReader
# Misc
# Open the same file again.
# The original path is reused, therefore the reopened file can be a different file.
#
# var f = new FileReader.open("/etc/issue")
# var l = f.read_line
# f.reopen
# assert l == f.read_line
fun reopen
do
var fl = _file
if fl != null and not fl.address_is_null then close
last_error = null
_file = new NativeFile.io_open_read(path.as(not null).to_cstring)
if _file.as(not null).address_is_null then
last_error = new IOError("Cannot open `{path.as(not null)}`: {sys.errno.strerror}")
return
end
end
redef fun raw_read_byte
do
var nb = _file.as(not null).io_read(write_buffer, 1)
if last_error == null and _file.as(not null).ferror then
last_error = new IOError("Cannot read `{path.as(not null)}`: {sys.errno.strerror}")
end
if nb == 0 then return -1
return write_buffer[0].to_i
end
redef fun raw_read_bytes(cstr, max)
do
var nb = _file.as(not null).io_read(cstr, max)
if last_error == null and _file.as(not null).ferror then
last_error = new IOError("Cannot read `{path.as(not null)}`: {sys.errno.strerror}")
end
return nb
end
redef fun eof do
var fl = _file
if fl == null then return true
if fl.address_is_null then return true
if last_error != null then return true
if super then
if last_error != null then return true
return fl.feof
end
return false
end
# Open the file at `path` for reading.
#
# var f = new FileReader.open("/etc/issue")
# assert not f.eof
# f.close
#
# In case of error, `last_error` is set
#
# f = new FileReader.open("/fail/does not/exist")
# assert f.eof
# assert f.last_error != null
init open(path: String)
do
self.path = path
_file = new NativeFile.io_open_read(path.to_cstring)
if _file.as(not null).address_is_null then
last_error = new IOError("Cannot open `{path}`: {sys.errno.strerror}")
end
end
# Creates a new File stream from a file descriptor
#
# This is a low-level method.
init from_fd(fd: Int) do
self.path = ""
_file = fd.fd_to_stream(read_only)
if _file.as(not null).address_is_null then
last_error = new IOError("Error: Converting fd {fd} to stream failed with '{sys.errno.strerror}'")
end
end
redef fun poll_in
do
var res = native_poll_in(fd)
if res == -1 then
last_error = new IOError(errno.to_s)
return false
else return res > 0
end
private fun native_poll_in(fd: Int): Int `{
#ifndef _WIN32
struct pollfd fds = {(int)fd, POLLIN, 0};
return poll(&fds, 1, 0);
#else
return 0;
#endif
`}
end
lib/core/file.nit:101,1--205,3