Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

IO Buffering #71

Open
wants to merge 4 commits into from

3 participants

@ajs

I added two methods for doing buffering of IO handles and turned on line buffering by default on new handles.

@moritz moritz commented on the diff
src/core/IO.pm
@@ -110,6 +111,13 @@ class IO does IO::FileTestable {
Bool::True;
}
+ # XXX - DESTROY is NYI in Rakudo at the time this was written, so
+ # the following has no effect.
+ method DESTROY() {
@moritz Owner
moritz added a note

now implemented in rakudo-moar; but it should be submethod, not a method.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
This page is out of date. Refresh to see the latest.
Showing with 28 additions and 0 deletions.
  1. +28 −0 src/core/IO.pm
View
28 src/core/IO.pm
@@ -101,6 +101,7 @@ class IO does IO::FileTestable {
$!path = $path;
$!chomp = $chomp;
$!PIO.encoding($bin ?? 'binary' !! PARROT_ENCODING($encoding));
+ self.buffer_type(:line);
self;
}
@@ -110,6 +111,13 @@ class IO does IO::FileTestable {
Bool::True;
}
+ # XXX - DESTROY is NYI in Rakudo at the time this was written, so
+ # the following has no effect.
+ method DESTROY() {
@moritz Owner
moritz added a note

now implemented in rakudo-moar; but it should be submethod, not a method.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
+ # It might be correct to self.close(), here, but perhaps not...
+ self.flush();
+ }
+
method eof() {
nqp::p6bool($!PIO.eof);
}
@@ -196,6 +204,26 @@ class IO does IO::FileTestable {
Bool::True
}
+ # Underlying Parrot buffer types:
+ # * unbuffered
+ # * line-buffered
+ # * full-buffered
+ # Returns one of those strings
+ method buffer_type(IO:D: Bool :$unbuffered=False,
+ Bool :$line=False,
+ Bool :$full=False) {
+ my $type = $unbuffered ?? 'unbuffered' !! (
+ $line ?? 'line-buffered' !! (
+ $full ?? 'full-buffered' !!
+ die "buffer_type called without a type"));
+ nqp::p6box_s($!PIO.buffer_type(nqp::unbox_s($type)));
+ }
+
+ method flush(IO:D:) {
+ $!PIO.flush();
+ Bool::True;
+ }
+
multi method say(IO:D: |$) {
my Mu $args := pir::perl6_current_args_rpa__P();
nqp::shift($args);
Something went wrong with that request. Please try again.