package String : private {
has bytes : private byte[];
sub new_bytes : String ($bytes : byte[]) {
my $new_bytes = new byte[@$bytes];
for (my $i = 0; $i < @$bytes; $i++) {
$new_bytes->[$i] = $bytes->[$i];
}
my $self = new String;
$self->{bytes} = $new_bytes;
return $self;
}
sub at : byte ($self : self, $index : int) {
return $self->{bytes}[$index];
}
sub length : int ($self : self) {
return @{$self->{bytes}};
}
sub get_bytes: byte[] ($self : self) {
my $bytes = $self->{bytes};
my $length = @$bytes;
my $new_bytes = new byte[$length];
for (my $i = 0; $i < $length; $i++) {
$new_bytes->[$i] = $bytes->[$i];
}
return $new_bytes;
}
}