NAME
src/pmc/resizablepmcarray.pmc - ResizablePMCArray PMC
DESCRIPTION
This class, ResizablePMCArray, implements an resizable array which stores PMCs. It changes values into Integer, Float, or String PMCs as appropriate.
Resize thresholds steps are 8 and 4096. Between 8b and 4K resize it overallocates by factor 1.5, over 4K it aligns up to the next 4K block.
We use now the faster nqp/qrpa model with O(1) shift/unshift ops, by moving an extra offset index, with 8 slots reserve. See #1152
Internal Functions
static void do_shift(PARROT_INTERP, Parrot_ResizablePMCArray_attributes *data)
Removes and returns an item from the start of the array.
static void do_unshift(PARROT_INTERP, PMC *arr, PMC *val)
Adds an item at the start of the array.
If offset == 0 moves the whole rest of the array around.
Vtable Functions
void init_int(INTVAL size)
Initializes the array.
void set_integer_native(INTVAL size)
Resizes the array to FLOATVAL shift_float()INTVAL shift_integer()PMC *shift_pmc()STRING *shift_string()
Removes and returns an item from the start of the array.This throws an OUT_OF_BOUNDS exception if the array is already empty,
unlike the perl5 and perl6 shift operator.
PMC *get_pmc_keyed_int(INTVAL key)
Returns the PMC value of the element at index void set_pmc_keyed_int(INTVAL key, PMC *src)
Sets the PMC value of the element at index void set_pmc_keyed(PMC *key, PMC *src)
Sets the PMC value of the element keyed by void delete_keyed_int(INTVAL key)void delete_keyed(PMC *key)
Delete the element at index INTVAL exists_keyed_int(INTVAL key)INTVAL exists_keyed(PMC *key)
Returns TRUE is the element at INTVAL defined_keyed_int(INTVAL key)
Returns TRUE is the element at void push_float(FLOATVAL value)void push_integer(INTVAL value)void push_pmc(PMC *value)void push_string(STRING *value)
Extends the array by adding an element of value INTVAL pop_float()INTVAL pop_integer()PMC *pop_pmc()STRING *pop_string()
Removes and returns the last element in the array.This throws an OUT_OF_BOUNDS exception if the array is already empty,
unlike the perl5 and perl6 shift operator.
void unshift_float(FLOATVAL value)void unshift_integer(INTVAL value)void unshift_pmc(PMC *value)void unshift_string(STRING *value)
Extends the array by adding an element of value void mark(void)
Mark the array.
PMC *clone()
Creates and returns a copy of the array.
STRING *get_repr()
Returns the Parrot string representation of the void splice(PMC *from, INTVAL offset, INTVAL count)
Replaces void visit(PMC *info)
This is used by freeze/thaw to visit the contents of the array.void freeze(PMC *info)
Used to archive the array.
void thaw(PMC *info)
Used to unarchive the array.
size elements.
key.
key to *src.
key to *src.
key and shift the rest to the left.
key exists; otherwise returns false.
key is defined; otherwise returns false.
*value to the end of the array.
*value to the begin of the array.
ResizablePMCArray.
count elements starting at offset with the elements in from.Note that the from PMC can be of any of the various array types.
*info is the visit info,
(see include/parrot/pmc_freeze.h).
Methods
- METHOD append(PMC *other) Append the other array to this array.
- METHOD PMC* shift()
- METHOD PMC* pop() Method forms to remove and return a PMC from the beginning or end of the array.
- METHOD unshift(PMC* value)
- METHOD push(PMC* value) Method forms to add a PMC to the beginning or end of the array.
METHOD sort(PMC *cmp_func)
Sort this array,
optionally using the provided cmp_func
METHOD reverse()
Reverse the contents of the array.
Auxiliar functions
static void do_shift(PARROT_INTERP, PMC *arr)
Common part for all shift operations.
static void do_unshift(PARROT_INTERP, PMC *arr, PMC *val)
Common part for all unshift operations.
static void throw_shift_empty(PARROT_INTERP)static void throw_pop_empty(PARROT_INTERP)
Throws with the appropriate message.
See also
docs/pdds/pdd17_basic_types.pod.