Name
SPVM::StringBuffer - String Buffers
Description
The StringBuffer class in SPVM has methods to manipulate string buffers.
Usage
use StringBuffer;
# new
my $buffer = StringBuffer->new;
my $buffer = StringBuffer->new("abc");
# push string
$buffer->push("def");
# Convert to the string
my $string = $buffer->to_string;
Details
Internal Data Structure
The "string" stored in a StringBuffer object always starts at index 0.
The charactors in the range that is greater than or equal to "length" field and less than "capacity" field are filled with "\0".
Interfaces
Fields
capacity
has capacity : ro int;
The capacity. This is the length of the internally reserved characters to extend the length of the string buffer.
length
has length : ro int;
The length of the string buffer.
string
has string : mutable string;
The internal string stored in the StringBuffer object.
Class Methods
new
static method new : StringBuffer ($string : string = undef, $capacity : int = -1);
Creates a new StringBuffer
object using "new_len".
The passed $length to "new_len" is the length of $string. If the string is undef, it is 0.
$string is copied to the value of the the created string buffer.
new_len
static method new_len : StringBuffer ($length : int, $capacity : int = -1);
Creates a new StringBuffer
object with $length and $capacity.
If $capacity is less than 0, $capacity is set to an appropriate value.
If $length is greater than $capacity, $capacity is set to $length.
Exceptions:
$length must be greater than or equal to 0. Otherwise an exception is thrown.
Instance Methods
push
method push : void ($string : string, $offset : int = 0, $length : int = -1);
Adds a $string from $offset to the position proceeded by $length after the end of the string in the string buffer.
Exceptions:
$string 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 $string. Otherwise an exception is thrown.
push_char
method push_char : void ($char : int);
Adds Ascii $char after the end of the string in the string buffer.
replace
method replace : void ($offset : int, $length : int, $replace : string);
Replace the characters of the range specified by $offset and $length in the buffer with $replace string.
Exceptions:
$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 the string buffer. Otherwise an exception is thrown.
reserve
method reserve : void ($new_capacity : int);
Reserves the characters that size is $new_capacity.
If $new_capacity is greater than the capacity of the string buffer, the capacity of the string buffer is extended to $new_capacity.
Exceptions:
$new_capacity must be greater than or equal to 0. Otherwise an exception is thrown.
to_string
method to_string : string ();
Creates a new string with the length of the buffer and copies all characters in the buffer into the new string, and returns it.
get_string_unsafe
method get_string_unsafe : string ();
Gets the internally string.
This buffer is unsafe because it continues to point to the old string if the internal string is extended.
set_length
method set_length : void ($length : int);
Sets "length" fields.
If the length $length is greater than "length" field, the characters of the exceeding part are filled with "\0".
set
method set : void ($string : string);
Sets the string $string.
clone
method clone ();
Clones this string buffer and returns it.
cmp
method cmp : int ($a : StringBuffer, $b : StringBuffer);
Compares two StringBuffer and returns its result.
The result is equal to the return value of cmp
operator given $a->to_string
or undef(if $a is undef) and $b->to_string
or undef(if $b is undef).
eq
method eq : int ($a : StringBuffer, $b : StringBuffer);
Checks if $a is equal to $b, and returns its result.
Implementation:
If $a and $b is defined, calls "cmp" method. If the return value is 0, returns 1, otherwise 0.
If only $a is not defined, returns 0.
If only $b is not defined, returns 0.
If both $a and $b is not defined, returns 1.
Copyright & License
Copyright (c) 2023 Yuki Kimoto
MIT License