package SPVM::Array;
1;
=encoding utf8
=head1 Name
SPVM::Array - Array Utilities
=head1 Usage
use Array;
# Copy a byte array
{
my $array = [(byte)1, 2, 3];
my $array_copy = Array->copy_byte($array);
}
# Copy a short array
{
my $array = [(short)1, 2, 3];
my $array_copy = Array->copy_short($array);
}
# Copy a int array
{
my $array = [1, 2, 3];
my $array_copy = Array->copy_int($array);
}
# Copy a long array
{
my $array = [(long)1, 2, 3];
my $array_copy = Array->copy_long($array);
}
# Copy a float array
{
my $array = [1.5f, 2.5f, 3.5f];
my $array_copy = Array->copy_float($array);
}
# Copy a double array
{
my $array = [1.5, 2.5, 3.5];
my $array_copy = Array->copy_double($array);
}
# Copy a string array
{
my $array = ["abc", "def", "ghi"]
my $array_copy = Array->copy_string($array);
}
# Check if the two byte arrays equal
{
my $array1 = [(byte)1, 2];
my $array2 = [(byte)1, 2];
my $ret = Array->equals_byte($array1, $array2);
}
# Check if the two short arrays equal
{
my $array1 = [(short)1, 2];
my $array2 = [(short)1, 2];
my $ret = Array->equals_short($array1, $array2);
}
# Check if the two int arrays equal
{
my $array1 = [(int)1, 2];
my $array2 = [(int)1, 2];
my $ret = Array->equals_int($array1, $array2);
}
# Check if the two long arrays equal
{
my $array1 = [(long)1, 2];
my $array2 = [(long)1, 2];
my $ret = Array->equals_long($array1, $array2);
}
# Check if the two float arrays equal
{
my $array1 = [(float)1, 2];
my $array2 = [(float)1, 2];
my $ret = Array->equals_float($array1, $array2);
}
# Check if the two double arrays equal
{
my $array1 = [(double)1, 2];
my $array2 = [(double)1, 2];
my $ret = Array->equals_double($array1, $array2);
}
# Check if the two string arrays equal
{
my $array1 = ["abc", "def"];
my $array2 = ["abc", "def"];
my $ret = Array->equals_string($array1, $array2);
}
# Copy object array
my $array = [(object)Int->new(1), Int->new(2), Int->new(3)];
my $array_copy = Array->copy_object($array, method : object ($obj : object) {
my $int_obj = (Int)$obj;
my $new_int_obj = Int->new($int_obj->value);
return $new_int_obj;
});
=head1 Description
C<Array> provides array utilities.
=head1 Class Methods
=head2 copy_byte
C<static method copy_byte : byte[] ($array : byte[], $offset : int = 0, $length : int = -1);>
Create a new C<byte> array with $length, and copy the elements from $offset to the position proceeded by $length to the created array.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 copy_double
C<static method copy_double : double[] ($array : double[], $offset : int = 0, $length : int = -1);>
Create a new C<double> array with $length, and copy the elements from $offset to the position proceeded by $length to the created array.
If $length is less than 0, it is the length of $array minus $offset.
If the array is not defined, return undef.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 copy_float
C<static method copy_float : float[] ($array : float[], $offset : int = 0, $length : int = -1);>
Create a new C<float> array with $length, and copy the elements from $offset to the position proceeded by $length to the created array.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 copy_int
C<static method copy_int : int[] ($array : int[], $offset : int = 0, $length : int = -1);>
Create a new C<int> array with $length, and copy the elements from $offset to the position proceeded by $length to the created array.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 copy_long
C<static method copy_long : long[] ($array : long[], $offset : int = 0, $length : int = -1);>
Create a new C<long> array with $length, and copy the elements from $offset to the position proceeded by $length to the created array.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 copy_object
C<static method copy_object : object[] ($array : object[], $cloner : L<Cloner|SPVM::Cloner> = undef, $offset : int = 0, $legnth : int = -1);>
Create a new object array with $length, and clone the elements of the object array from $offset to the position proceeded by $length to the created array.
Each element is cloned by L<Cloner|SPVM::Cloner>.
If the cloner is not defined, the address of each element is copied.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 copy_object_address
C<static method copy_object_address : object[] ($array : object[], $offset : int = 0, $legnth : int = -1);>
The alias for the following code using L</"copy_object">.
my $ret = &copy_object($array, undef, $offset, $length);
=head2 copy_short
C<static method copy_short : short[] ($array : short[], $offset : int = 0, $length : int = -1);>
Create a new C<short> array with $length, and copy the elements from $offset to the position proceeded by $length to the created array.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 copy_string
C<static method copy_string : string[] ($array : string[], $offset : int = 0, $length : int = -1);>
Create a new C<string> array with $length, and copy the elements of the C<string> array using C<copy> operator from $offset to the position proceeded by $length to the created array.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 copy_string_address
C<static method copy_string_address : string[] ($array : string[], $offset : int = 0, $length : int = -1);>
Create a new C<string> array with $length, and copy the addresses of the elements of the C<string> array from $offset to the position proceeded by $length to the created array.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 dump_unsigned_byte
C<static method dump_unsigned_byte : string ($array : byte[]);>
Same as the following code using the L<dump operator|SPVM::Document::Language/"dump Operator"> operator, but the elements are displayed as unsigned 8-bit integer.
my $ret = dump $array;
=head2 dump_unsigned_int
C<static method dump_unsigned_int : string ($array : int[]);>
Same as the following code using the L<dump operator|SPVM::Document::Language/"dump Operator"> operator, but the elements are displayed as unsigned 32-bit integer.
my $ret = dump $array;
=head2 dump_unsigned_long
C<static method dump_unsigned_long : string ($array : long[]);>
Same as the following code using the L<dump operator|SPVM::Document::Language/"dump Operator"> operator, but the elements are displayed as unsigned 64-bit integer.
my $ret = dump $array;
=head2 dump_unsigned_short
C<static method dump_unsigned_short : string ($array : short[]);>
Same as the following code using the L<dump operator|SPVM::Document::Language/"dump Operator"> operator, but the elements are displayed as unsigned 16-bit integer.
my $ret = dump $array;
=head2 equals_byte
C<static method equals_byte : int ($array1 : byte[], $array2 : byte[]);>
If $array1 is not defined and $array2 is not defined, returns 1.
If $array1 is defined and $array2 is not defined, returns 0.
If $array1 is not defined, $array2 is defined, returns 0.
If $array1 is defined and $array2 is defined and the all elements of $array1 are equal to all elements of $array2, returns 1.
Otherwise return 0.
=head2 equals_double
C<static method equals_double : int ($array1 : double[], $array2 : double[]);>
If $array1 is not defined and $array2 is not defined, returns 1.
If $array1 is defined and $array2 is not defined, returns 0.
If $array1 is not defined, $array2 is defined, returns 0.
If $array1 is defined and $array2 is defined and the all elements of $array1 are equal to all elements of $array2, returns 1.
Otherwise return 0.
=head2 equals_float
C<static method equals_float : int ($array1 : float[], $array2 : float[]);>
If $array1 is not defined and $array2 is not defined, returns 1.
If $array1 is defined and $array2 is not defined, returns 0.
If $array1 is not defined, $array2 is defined, returns 0.
If $array1 is defined and $array2 is defined and the all elements of $array1 are equal to all elements of $array2, returns 1.
Otherwise return 0.
=head2 equals_int
C<static method equals_int : int ($array1 : int[], $array2 : int[]);>
If $array1 is not defined and $array2 is not defined, returns 1.
If $array1 is defined and $array2 is not defined, returns 0.
If $array1 is not defined, $array2 is defined, returns 0.
If $array1 is defined and $array2 is defined and the all elements of $array1 are equal to all elements of $array2, returns 1.
Otherwise return 0.
=head2 equals_long
C<static method equals_long : int ($array1 : long[], $array2 : long[]);>
If $array1 is not defined and $array2 is not defined, returns 1.
If $array1 is defined and $array2 is not defined, returns 0.
If $array1 is not defined, $array2 is defined, returns 0.
If $array1 is defined and $array2 is defined and the all elements of $array1 are equal to all elements of $array2, returns 1.
Otherwise return 0.
=head2 equals_object
C<static method static method equals_object : int ($array1 : object[], $array2 : object[], $equality_checker : L<EqualityChecker|SPVM::EqualityChecker>);>
If $array1 is not defined and $array2 is not defined, returns 1.
If $array1 is defined and $array2 is not defined, returns 0.
If $array1 is not defined, $array2 is defined, returns 0.
If $array1 is defined and $array2 is defined and the all elements of $array1 are equal to all elements of $array2 using the equality checker, returns 1.
The equality checker is not defined, the address is used to check the equality.
Otherwise return 0.
=head2 equals_object_address
C<static method equals_object_address : int ($array1 : object[], $array2 : object[]);>
The alias for the following code using L</"equals_object">.
my $ret = &equals_object($array1, $array2, undef);
=head2 equals_short
C<static method equals_short : int ($array1 : short[], $array2 : short[]);>
If $array1 is not defined and $array2 is not defined, returns 1.
If $array1 is defined and $array2 is not defined, returns 0.
If $array1 is not defined, $array2 is defined, returns 0.
If $array1 is defined and $array2 is defined and the all elements of $array1 are equal to all elements of $array2, returns 1.
Otherwise return 0.
=head2 equals_string
C<static method equals_string : int ($array1 : string[], $array2 : string[]);>
If $array1 is not defined and $array2 is not defined, returns 1.
If $array1 is defined and $array2 is not defined, returns 0.
If $array1 is not defined, $array2 is defined, returns 0.
If $array1 is defined and $array2 is defined and the all elements of $array1 are equal to all elements of $array2 using the C<eq> operator, returns 1.
Otherwise return 0.
=head2 equals_string_address
C<static method equals_string_address : int ($array1 : string[], $array2 : string[]);>
The alias for the following code using L</"equals_object_address">.
my $ret = &equals_object_address($array1, $array2);
=head2 memcpy_byte
C<static method memcpy_byte : void ($dest : byte[], $dest_offset : int, $source : byte[], $source_offset : int, $length : int);>
Copy the range of the elements of $source C<byte> array to the range of the elements of $dest C<byte> array.
The range of the elements of $source array is from $offset to the position proceeded by $length of the source.
The range of the elements of $dest array is from $dest_offset to $dest_offset + $length.
If the range of the elements of $source array and the range of the elements of $dest array overlap, the result is B<not> guaranteed.
Exceptions:
$dest must be defined. Otherwise an exception is thrown.
$source must be defined. Otherwise an exception is thrown.
$length must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$source_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset + $length must be less than or equal to the length of $dest. Otherwise an exception is thrown.
$source_offset + $length must be less than or equal to the length of $source. Otherwise an exception is thrown.
=head2 memcpy_double
C<static method memcpy_double : void ($dest : double[], $dest_offset : int, $source : double[], $source_offset : int, $length : int);>
Copy the range of the elements of $source C<double> array to the range of the elements of $dest C<double> array.
The range of the elements of $source array is from $offset to the position proceeded by $length of the source.
The range of the elements of $dest array is from $dest_offset to $dest_offset + $length.
If the range of the elements of $source array and the range of the elements of $dest array overlap, the result is B<not> guaranteed.
Exceptions:
$dest must be defined. Otherwise an exception is thrown.
$source must be defined. Otherwise an exception is thrown.
$length must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$source_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset + $length must be less than or equal to the length of $dest. Otherwise an exception is thrown.
$source_offset + $length must be less than or equal to the length of $source. Otherwise an exception is thrown.
=head2 memcpy_float
C<static method memcpy_float : void ($dest : float[], $dest_offset : int, $source : float[], $source_offset : int, $length : int);>
Copy the range of the elements of $source C<float> array to the range of the elements of $dest C<float> array.
The range of the elements of $source array is from $offset to the position proceeded by $length of the source.
The range of the elements of $dest array is from $dest_offset to $dest_offset + $length.
If the range of the elements of $source array and the range of the elements of $dest array overlap, the result is B<not> guaranteed.
Exceptions:
$dest must be defined. Otherwise an exception is thrown.
$source must be defined. Otherwise an exception is thrown.
$length must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$source_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset + $length must be less than or equal to the length of $dest. Otherwise an exception is thrown.
$source_offset + $length must be less than or equal to the length of $source. Otherwise an exception is thrown.
=head2 memcpy_int
C<static method memcpy_int : void ($dest : int[], $dest_offset : int, $source : int[], $source_offset : int, $length : int);>
Copy the range of the elements of $source C<int> array to the range of the elements of $dest C<int> array.
The range of the elements of $source array is from $offset to the position proceeded by $length of the source.
The range of the elements of $dest array is from $dest_offset to $dest_offset + $length.
If the range of the elements of $source array and the range of the elements of $dest array overlap, the result is B<not> guaranteed.
Exceptions:
$dest must be defined. Otherwise an exception is thrown.
$source must be defined. Otherwise an exception is thrown.
$length must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$source_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset + $length must be less than or equal to the length of $dest. Otherwise an exception is thrown.
$source_offset + $length must be less than or equal to the length of $source. Otherwise an exception is thrown.
=head2 memcpy_long
C<static method memcpy_long : void ($dest : long[], $dest_offset : int, $source : long[], $source_offset : int, $length : int);>
Copy the range of the elements of $source C<long> array to the range of the elements of $dest C<long> array.
The range of the elements of $source array is from $offset to the position proceeded by $length of the source.
The range of the elements of $dest array is from $dest_offset to $dest_offset + $length.
If the range of the elements of $source array and the range of the elements of $dest array overlap, the result is B<not> guaranteed.
Exceptions:
$dest must be defined. Otherwise an exception is thrown.
$source must be defined. Otherwise an exception is thrown.
$length must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$source_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset + $length must be less than or equal to the length of $dest. Otherwise an exception is thrown.
$source_offset + $length must be less than or equal to the length of $source. Otherwise an exception is thrown.
=head2 memcpy_object_address
C<static method memcpy_object_address : void ($dest : object[], $dest_offset : int, $source : object[], $source_offset : int, $length : int);>
Copy the range of the elements of $source object array to the range of the elements of $dest object array.
Each address is copied.
The range of the elements of $source array is from $offset to the position proceeded by $length of the source.
The range of the elements of $dest array is from $dest_offset to $dest_offset + $length.
If the range of the elements of $source array and the range of the elements of $dest array overlap, the result is B<not> guaranteed.
Exceptions:
$dest must be defined. Otherwise an exception is thrown.
$source must be defined. Otherwise an exception is thrown.
$length must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$source_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset + $length must be less than or equal to the length of $dest. Otherwise an exception is thrown.
$source_offset + $length must be less than or equal to the length of $source. Otherwise an exception is thrown.
=head2 memcpy_short
C<static method memcpy_short : void ($dest : short[], $dest_offset : int, $source : short[], $source_offset : int, $length : int);>
Copy the range of the elements of $source C<short> array to the range of the elements of $dest C<short> array.
The range of the elements of $source array is from $offset to the position proceeded by $length of the source.
The range of the elements of $dest array is from $dest_offset to $dest_offset + $length.
If the range of the elements of $source array and the range of the elements of $dest array overlap, the result is B<not> guaranteed.
Exceptions:
$dest must be defined. Otherwise an exception is thrown.
$source must be defined. Otherwise an exception is thrown.
$length must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$source_offset must be greater than or equal to 0. Otherwise an exception is thrown.
$dest_offset + $length must be less than or equal to the length of $dest. Otherwise an exception is thrown.
$source_offset + $length must be less than or equal to the length of $source. Otherwise an exception is thrown.
=head2 memcpy_string_address
C<static method memcpy_string_address : void ($dest : string[], $dest_offset : int, $source : string[], $source_offset : int, $length : int);>
The alias for L</"memcpy_object_address">.
=head2 memmove_byte
C<static method memmove_byte : void ($dest : byte[], $dest_offset : int, $source : byte[], $source_offset : int, $length : int);>
The same as L</"memcpy_byte">, but even if the range of the source and the range of the destination overlap, the result is guaranteed.
=head2 memmove_double
C<static method memmove_double : void ($dest : double[], $dest_offset : int, $source : double[], $source_offset : int, $length : int);>
The same as L</"memcpy_double">, but even if the range of the source and the range of the destination overlap, the result is guaranteed.
=head2 memmove_float
C<static method memmove_float : void ($dest : float[], $dest_offset : int, $source : float[], $source_offset : int, $length : int);>
The same as L</"memcpy_float">, but even if the range of the source and the range of the destination overlap, the result is guaranteed.
=head2 memmove_int
C<static method memmove_int : void ($dest : int[], $dest_offset : int, $source : int[], $source_offset : int, $length : int);>
The same as L</"memcpy_int">, but even if the range of the source and the range of the destination overlap, the result is guaranteed.
=head2 memmove_long
C<static method memmove_long : void ($dest : long[], $dest_offset : int, $source : long[], $source_offset : int, $length : int);>
The same as L</"memcpy_long">, but even if the range of the source and the range of the destination overlap, the result is guaranteed.
=head2 memmove_object_address
C<static method memmove_object_address : void ($dest : object[], $dest_offset : int, $source : object[], $source_offset : int, $length : int);>
The same as L</"memcpy_object_address">, but even if the range of the source and the range of the destination overlap, the result is guaranteed.
=head2 memmove_short
C<static method memmove_short : void ($dest : short[], $dest_offset : int, $source : short[], $source_offset : int, $length : int);>
The same as L</"memcpy_short">, but even if the range of the source and the range of the destination overlap, the result is guaranteed.
=head2 memmove_string_address
C<static method memmove_string_address : void ($dest : string[], $dest_offset : int, $source : string[], $source_offset : int, $length : int);>
The same as the following code using L</"memmove_object_address">.
&memmove_object_address($dest, $dest_offset, $source, $source_offset, $length);
=head2 memset_byte
C<static method memset_byte : void ($array : byte[], $element : int, $offset : int = 0, $length : int = -1);>
Set the range of the elements of the C<byte> array to $element.
The range of the elements of $array is from $offset to the position proceeded by $length.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 memset_double
C<static method memset_double : void ($array : double[], $element : double, $offset : int = 0, $length : int = -1);>
Set the range of the elements of the C<double> array to $element.
The range of the elements of $array is from $offset to the position proceeded by $length.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 memset_float
C<static method memset_float : void ($array : float[], $element : float, $offset : int = 0, $length : int = -1);>
Set the range of the elements of the C<float> array to $element.
The range of the elements of $array is from $offset to the position proceeded by $length.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 memset_int
C<static method memset_int : void ($array : int[], $element : int, $offset : int = 0, $length : int = -1);>
Set the range of the elements of the C<int> array to $element.
The range of the elements of $array is from $offset to the position proceeded by $length.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 memset_long
C<static method memset_long : void ($array : long[], $element : long, $offset : int = 0, $length : int = -1);>
Set the range of the elements of the C<long> array to $element.
The range of the elements of $array is from $offset to the position proceeded by $length.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 memset_object
C<static method memset_object : void ($array : object[], $element : object, $offset : int = 0, $length : int = -1);>
Set the range of the elements of the object $array to $element.
The range of the elements of $array is from $offset to the position proceeded by $length.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 memset_short
C<static method memset_short : void ($array : short[], $element : int, $offset : int = 0, $length : int = -1);>
Set the range of the elements of the C<short> $array to $element.
The range of the elements of $array is from $offset to the position proceeded by $length.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 memset_string
C<static method memset_string : void ($array : string[], $element : string, $offset : int = 0, $length : int = -1);>
The alias for the following code using L</"memset_object">.
&memset_object($dest, $element, $dest_offset, $length);
=head2 merge_byte
C<static method merge_byte : byte[] ($array1 : byte[], $array2 : byte[]);>
Creates a new array by merging the array $array1 and the array $array2, and returns it.
Exceptions:
\$array1 must be defined. Otherwise an exception is thrown.
\$array2 must be defined. Otherwise an exception is thrown.
=head2 merge_short
C<static method merge_short : short[] ($array1 : short[], $array2 : short[]);>
Creates a new array by merging the array $array1 and the array $array2, and returns it.
Exceptions:
\$array1 must be defined. Otherwise an exception is thrown.
\$array2 must be defined. Otherwise an exception is thrown.
=head2 merge_int
C<static method merge_int : int[] ($array1 : int[], $array2 : int[]);>
Creates a new array by merging the array $array1 and the array $array2, and returns it.
Exceptions:
\$array1 must be defined. Otherwise an exception is thrown.
\$array2 must be defined. Otherwise an exception is thrown.
=head2 merge_long
C<static method merge_long : long[] ($array1 : long[], $array2 : long[]);>
Creates a new array by merging the array $array1 and the array $array2, and returns it.
Exceptions:
\$array1 must be defined. Otherwise an exception is thrown.
\$array2 must be defined. Otherwise an exception is thrown.
=head2 merge_float
C<static method merge_float : float[] ($array1 : float[], $array2 : float[]);>
Creates a new array by merging the array $array1 and the array $array2, and returns it.
Exceptions:
\$array1 must be defined. Otherwise an exception is thrown.
\$array2 must be defined. Otherwise an exception is thrown.
=head2 merge_double
C<static method merge_double : double[] ($array1 : double[], $array2 : double[]);>
Creates a new array by merging the array $array1 and the array $array2, and returns it.
Exceptions:
\$array1 must be defined. Otherwise an exception is thrown.
\$array2 must be defined. Otherwise an exception is thrown.
=head2 merge_string
C<static method merge_string : string[] ($array1 : string[], $array2 : string[]);>
Creates a new array by merging the array $array1 and the array $array2, and returns it.
Exceptions:
\$array1 must be defined. Otherwise an exception is thrown.
\$array2 must be defined. Otherwise an exception is thrown.
=head2 merge_object
C<static method merge_object : object[] ($array1 : object[], $array2 : object[]);>
Creates a new array by merging the array $array1 and the array $array2, and returns it.
Exceptions:
\$array1 must be defined. Otherwise an exception is thrown.
\$array2 must be defined. Otherwise an exception is thrown.
=head2 new_proto
C<static method new_proto : object[] ($proto_array : object[], $length : int);>
Create a new object array as the same type as $proto_array with $length.
Exceptions:
$prototype array must be defined. Otherwise an exception is thrown.
$length must be greater than or equal to 0. Otherwise an exception is thrown.
=head2 new_proto_any
C<static method new_proto_any : object ($proto_array : object, $length : int);>
Same as L</"new_proto"> method, but can give $proto_array of the type of a numeric array or a multi-numeric array and the return type is different.
=head2 shuffle_object
C<static method shuffle_object : void ($array : object[], $seed_ref : int*);>
Shuffles the array $array in-place given the reference to a seed $seed_ref.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
=head2 repeat_string
C<static method repeat_string : string[] ($strings : string[], $count : int);>
Creates a new array that repeats the string $strings $count times, and returns it.
Exceptions:
$strings must be defined. Otherwise an exception is thrown.
$count must be greater than or equal to 0. Otherwise an exception is thrown.
=head2 copy_object_with_proto
C<static method copy_object_with_proto : object[] ($array : object[], $proto : object[], $cloner : L<Cloner|SPVM::Cloner> = undef, $offset : int = 0, $length : int = -1);>
The same as L</"copy_object">, but can give the prototype array $proto for the copied array.
=head2 copy_object_address_with_proto
C<static method copy_object_address_with_proto : object[] ($array : object[], $proto : object[], $offset : int = 0, $length : int = -1);>
The same as L</"copy_object_address">, but can give the prototype array $proto for the copied array.
=head2 to_object_array_byte
C<static method to_object_array_byte : L<Byte|SPVM::Byte>[] ($array : byte[]);>
Creates a new L<Byte|SPVM::Byte> array with the same length as the byte array $array, copies the elements in $array to it, and returns it.
Exceptions:
The array $array must be defined. Otherwise, an exception is thrown.
=head2 to_object_array_short
C<static method to_object_array_short : L<Short|SPVM::Short>[] ($array : short[]);>
Creates a new L<Short|SPVM::Short> array with the same length as the short array $array, copies the elements in $array to it, and returns it.
Exceptions:
The array $array must be defined. Otherwise, an exception is thrown.
=head2 to_object_array_int
C<static method to_object_array_int : L<Int|SPVM::Int>[] ($array : int[]);>
Creates a new L<Int|SPVM::Int> array with the same length as the int array $array, copies the elements in $array to it, and returns it.
Exceptions:
The array $array must be defined. Otherwise, an exception is thrown.
=head2 to_object_array_long
C<static method to_object_array_long : L<Long|SPVM::Long>[] ($array : long[]);>
Creates a new L<Long|SPVM::Long> array with the same length as the long array $array, copies the elements in $array to it, and returns it.
Exceptions:
The array $array must be defined. Otherwise, an exception is thrown.
=head2 to_object_array_float
C<static method to_object_array_float : L<Float|SPVM::Float>[] ($array : float[]);>
Creates a new L<Float|SPVM::Float> array with the same length as the float array $array, copies the elements in $array to it, and returns it.
=head2 to_object_array_double
C<static method to_object_array_double : L<Double|SPVM::Double>[] ($array : double[]);>
Creates a new L<Double|SPVM::Double> array with the same length as the double array $array, copies the elements in $array to it, and returns it.
Exceptions:
The array $array must be defined. Otherwise, an exception is thrown.
=head2 to_array_byte
C<static method to_array_byte : byte[] ($object_array : L<Byte|SPVM::Byte>[]);>
Creates a new byte array with the same length as L<Byte|SPVM::Byte> array $object_array, copies the elements in $array to it, and returns it.
Exceptions:
The array $array must be defined. Otherwise, an exception is thrown.
=head2 to_array_short
C<static method to_array_short : short[] ($object_array : L<Short|SPVM::Short>[]);>
Creates a new short array with the same length as L<Short|SPVM::Short>> array $object_array, copies the elements in $array to it, and returns it.
Exceptions:
The array $object_array must be defined. Otherwise, an exception is thrown.
=head2 to_array_int
C<static method to_array_int : int[] ($object_array : L<Int|SPVM::Int>[]>);>
Creates a new int array with the same length as L<Int|SPVM::Int> array $object_array, copies the elements in $array to it, and returns it.
Exceptions:
The array $object_array must be defined. Otherwise, an exception is thrown.
=head2 to_array_long
C<static method to_array_long : long[] ($object_array : L<Long|SPVM::Long>[]);>
Creates a new long array with the same length as L<Long|SPVM::Long> array $object_array, copies the elements in $array to it, and returns it.
Exceptions:
The array $object_array must be defined. Otherwise, an exception is thrown.
=head2 to_array_float
C<static method to_array_float : float[] ($object_array : L<Float|SPVM::Float>[]);>
Creates a new float array with the same length as L<Float|SPVM::Float> array $object_array, copies the elements in $array to it, and returns it.
Exceptions:
The array $object_array must be defined. Otherwise, an exception is thrown.
=head2 to_array_double
C<static method to_array_double : double[] ($object_array : L<Double|SPVM::Double>[]);>
Creates a new double[ array with the same length as L<Double|SPVM::Double> array $object_array, copies the elements in $array to it, and returns it.
Exceptions:
The array $object_array must be defined. Otherwise, an exception is thrown.
=head2 new_array_proto_element
C<static method new_array_proto_element : object[] ($proto_element : object, $length : int);>
Create a new object array of the type when the prototype element $proto_element are arrayed with the length $length.
Exceptions:
The prototype element $proto_element must be defined. Otherwise an exception is thrown.
The length $length must be greater than or equal to 0. Otherwise an exception is thrown.
=head2 equals
C<static method equals : int ($array1 : object, $array2 : object, $shallow : int = 0);>
Checks if the array $array1 and the array $array2 are equal.
The type of $array1 and $array2 must be a numeric array type, a multi-numeric array type, string array type, or an object array type.
Implementation:
If $array1 is not defined and $array2 is not defined, returns 1.
If $array1 is defined and $array2 is not defined, returns 0.
If $array1 is not defined, $array2 is defined, returns 0.
If the type of $array1 is not equal to the type of $array2, returns 0.
If the type of $array1 is a numeric array type or a muti-numeric type and every element of $array1 are equal to the corresponding index of element of $array2, returns 1, otherwise returns 0.
If the type of $array1 is string array type and $shallow is a false value, returns the return value of L</"equals_string"> method.
If the type of $array1 is string array type and $shallow is a true value, returns the return value of L</"equals_string_address"> method.
If the type of $array1 is an object array type and $shallow is a false value, returns the return value of L</"equals_object"> method given L<EqualityChecker#default_equality_checker|SPVM::EqualityChecker#/"default_equality_checker">.
If the type of $array1 is an object array type and $shallow is a true value, returns the return value of L</"equals_object_address"> method.
Exceptions:
The type of the array $array1 must be an array type. Otherwise, an exception is thrown.
The type of the array $array2 must be an array type. Otherwise, an exception is thrown.
The type of the $array must be a numeric array type, a multi-numeric array type, string array type, or an object array type. Otherwise, an exception is thrown.
=head2 copy_any_numeric
C<static method copy_any_numeric : object ($array : object, $offset : int = 0, $length : int = -1);>
Create a new array of the same type of $array with $length, and copy the elements from $offset to the position proceeded by $length to the created array.
If $length is less than 0, it is the length of $array minus $offset.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
The type of the array $array must be a numeric array type or a multi-numeric type.
$offset must be greater than or equal to 0. Otherwise an exception is thrown.
$offset + $length must be less than or equal to the length of $array. Otherwise an exception is thrown.
=head2 shuffle_any_numeric
C<static method shuffle_any_numeric : void ($array : object, $seed_ref : int*);>
Shuffles the array $array in-place given the reference to a seed $seed_ref.
The type of $array must be a numeric type or a multi-numeric type.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
The type of the array $array must be a numeric type or a multi-numeric type. Otherwise an exception is thrown.
=head2 shuffle
C<static method shuffle : void ($array : object, $seed_ref : int*);>
Shuffles the array $array in-place given the reference to a seed $seed_ref.
The type of $array must be an object type, a numeric type or a multi-numeric type.
Exceptions:
$array must be defined. Otherwise an exception is thrown.
The type of $array must be an object type, a numeric type or a multi-numeric type.
=head2 repeat
C<static method repeat : object ($array : obejct, $count : int);>
Retruns a new array that repeats the array $array $count times.
Exceptions:
The array $array must be defined. Otherwise an exception is thrown.
The type of the array $array must be an array type. Otherwise an exception is thrown.
The repeat count $count must be a non-negative integer. Otherwise an exception is thrown.
=head1 Copyright & License
Copyright (c) 2023 Yuki Kimoto
MIT License