# Copyright (c) 2023 Yuki Kimoto
# MIT License
class Immutable::ShortList {
use Fn;
use Array;
# Fields
has length : ro int;
has array : short[];
# Class methods
static method new : Immutable::ShortList ($array : short[] = undef) {
my $length : int;
if ($array) {
$length = @$array;
}
else {
$length = 0;
}
my $self = &new_len($length);
if ($array) {
Array->memcpy_short($self->{array}, 0, $array, 0, $length);
}
return $self;
}
static method new_len : Immutable::ShortList ($length : int) {
my $self = new Immutable::ShortList;
unless ($length >= 0) {
die "The length \$length must be greater than or equal to 0.";
}
$self->{length} = $length;
$self->{array} = new short[$length];
return $self;
}
# Instance methods
method get : int ($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 : short[] () {
my $length = $self->length;
my $new_array = new short[$length];
my $array = $self->{array};
Array->memcpy_short($new_array, 0, $array, 0, $length);
return $new_array;
}
}