io/file/seek.fz
# This file is part of the Fuzion language implementation.
#
# The Fuzion language implementation is free software: you can redistribute it
# and/or modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation, version 3 of the License.
#
# The Fuzion language implementation is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License along with The
# Fuzion language implementation. If not, see <https://www.gnu.org/licenses/>.
# -----------------------------------------------------------------------
#
# Tokiwa Software GmbH, Germany
#
# Source code of Fuzion standard library feature seek
#
# Author: Wael Youssfi (wael.youssfi@tokiwa.software)
#
# -----------------------------------------------------------------------
# seek -- effect providing stream seeking operations
#
public seek(ps Seek_Handler) : simple_effect is
# seek offset in the stream represented by fd
# returns an outcome i64 that represents the new offset
# returns an error in case of failure
#
module seek(
# the file descriptor
fd i64,
# the offset to seek from the beginning of the stream pointer
offset i64) =>
tmp := ps.seek fd offset
replace
tmp
# returns the current file-pointer offset as an outcome i64,
# the offset is measured from the beginning of the file indicated by the file descriptor
# returns the current offset in success and error in failure
#
module file_position(
# the file descriptor
fd i64) =>
tmp := ps.file_position fd
replace
tmp
# the default stream seeking
#
type.default_seek_handler : io.file.Seek_Handler is
seek(fd i64, offset i64) =>
fuzion.sys.fileio.seek fd offset
file_position(fd i64) =>
fuzion.sys.fileio.file_position fd
# install default effect io.file.seek
type.install_default unit =>
(io.file.seek default_seek_handler).default
# short-hand for accessing seek effect in current environment and performing the default seek operation using
# io.file.seek.seek fd offset
# seek offset in the stream represented by fd
# returns an outcome i64 that represents the new offset
# returns an error in case of failure
#
seek(
# the file descriptor
fd i64,
# the offset to seek from the beginning of the stream pointer
offset i64) =>
seek.install_default
seek.env.seek fd offset
# short-hand for accessing seek effect in current environment
#
module seek =>
seek.install_default
seek.env
# reference to the seek operations that could be provided
#
public Seek_Handler ref is
public seek(fd i64, offset i64) outcome i64 => abstract
public file_position(fd i64) outcome i64 => abstract
last changed: 2024-03-07