The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

# Copyright (c) 2023 Yuki Kimoto
# MIT License
class Immutable::LongList {
version_from SPVM;
use Fn;
use Array;
# Fields
has length : ro int;
has array : long[];
# Class methods
static method new : Immutable::LongList ($array : long[] = undef) {
my $length : int;
if ($array) {
$length = @$array;
}
else {
$length = 0;
}
my $self = &new_len($length);
if ($array) {
Array->memcpy_long($self->{array}, 0, $array, 0, $length);
}
return $self;
}
static method new_len : Immutable::LongList ($length : int) {
my $self = new Immutable::LongList;
unless ($length >= 0) {
die "The length \$length must be greater than or equal to 0.";
}
$self->{length} = $length;
$self->{array} = new long[$length];
return $self;
}
# Instance methods
method get : long ($index : int) {
my $length = $self->length;
unless ($index >= 0) {
die "The index \$index must be greater than or equal to 0.";
}
unless ($index < $length) {
die "The index \$index must be less than the length of \$list.";
}
my $element = $self->{array}[$index];
return $element;
}
method to_array : long[] () {
my $length = $self->length;
my $new_array = new long[$length];
my $array = $self->{array};
Array->memcpy_long($new_array, 0, $array, 0, $length);
return $new_array;
}
}