The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
our @ISA = qw{Data::ParseBinary::Stream::StringRefReader Data::ParseBinary::Stream::WrapperBase};
__PACKAGE__->_registerStreamType("StringBuffer");
sub new {
my ($class, $sub_stream) = @_;
my $string = '';
my $self = $class->SUPER::new(\$string);
$self->_warping($sub_stream);
return $self;
}
sub ReadBytes {
my ($self, $count) = @_;
if ($self->{location} + $count > $self->{length}) {
my $more_needed = $count - ($self->{length} - $self->{location});
my $new_bytes = $self->{ss}->ReadBytes($more_needed);
${ $self->{data} } .= $new_bytes;
$self->{length} += $more_needed;
}
return $self->SUPER::ReadBytes($count);
}
sub seek {
my ($self, $newpos) = @_;
if ($newpos > $self->{length}) {
my $more_needed = $newpos - $self->{length};
my $new_bytes = $self->{ss}->ReadBytes($more_needed);
${ $self->{data} } .= $new_bytes;
$self->{length} += $more_needed;
}
$self->SUPER::seek($newpos);
}
our @ISA = qw{Data::ParseBinary::Stream::StringRefWriter Data::ParseBinary::Stream::WrapperBase};
__PACKAGE__->_registerStreamType("StringBuffer");
sub new {
my ($class, $sub_stream) = @_;
my $source = '';
my $self = $class->SUPER::new(\$source);
$self->_warping($sub_stream);
return $self;
}
sub Flush {
my $self = shift;
my $data = $self->SUPER::Flush();
$self->{ss}->WriteBytes($$data);
my $empty_string = '';
$self->{data} = \$empty_string;
$self->{offset} = 0;
return $self->{ss}->Flush();
}
1;