NAME

src/pmc/arrayiterator.pmc - Implementation of Iterator for Arrays.

DESCRIPTION

Generic iterator for traversing arrays.

SYNOPSIS

default usage

    .local pmc iterator, array, entry
    iterator = iter array
  iter_loop:
    unless iterator, iter_end  # while (more values)
    entry = shift iterator     # get an entry
    ...
    goto iter_loop
  iter_end:

iterate from the end, for arrays

    .local pmc iterator, array, entry
    iterator = iter array
    iterator = .ITERATE_FROM_END
  iter_loop:
    unless iterator, iter_end  # while (more values)
    entry = pop iterator     # get an entry
    ...
    goto iter_loop
  iter_end:

Warning!

NB: for different direction you have to use different ops!

TODO: Discuss idea of having separate get_iter/get_reverse_iter VTABLEs to avoid this caveat.

Vtable functions

void init()
Raises an exception. Use init_pmc().
void init_pmc(PMC *initializer)
Initializes the iterator with an aggregate PMC. Defaults iteration mode to iterate from start.
void mark()
Marks the current idx/key and the aggregate as live.
PMC *clone()
INTVAL get_bool()
Returns true if there is more elements to iterate over.
INTVAL elements()
Returns the number of remaining elements in the array.
void set_integer_native(INTVAL value)
Reset the Iterator. value must be one of
 ITERATE_FROM_START        ... Iterate from start
 ITERATE_FROM_END          ... Iterate from end
PMC *get_pmc()
Returns this Iterator's array.
INTVAL shift_integer()
Returns the element for the current idx and sets the idx to the next one.
FLOATVAL shift_float()
STRING *shift_string()
PMC *shift_pmc()
Returns the element for the current idx/key and sets the idx/key to the next one.
INTVAL pop_integer()
Returns the element for the current idx and sets the idx to the next one.
FLOATVAL pop_float()
STRING *pop_string()
PMC *pop_pmc()
Returns the element for the current idx/key and sets the idx/key to the next one.
PMC *get_pmc_keyed(PMC *key)
Returns the element for *key.
PMC *get_pmc_keyed_int(INTVAL key)
Returns the element for key.
INTVAL get_integer_keyed(PMC *key)
INTVAL get_integer_keyed_int(INTVAL idx)
Get integer value of current position plus idx.
FLOATVAL get_number_keyed(PMC *key)
FLOATVAL get_number_keyed_int(INTVAL idx)
Get number value of current position plus idx.
STRING *get_string_keyed(PMC *key)
STRING *get_string_keyed_int(INTVAL idx)
Get string value of current position plus idx.
INTVAL exists_keyed(PMC *key)
Returns whether an element for *key exists in the array.
INTVAL exists_keyed_int(INTVAL idx)
Returns whether an element for idx exists in the aggregate.
INTVAL defined_keyed(PMC *key)
INTVAL defined_keyed_int(INTVAL key)
Returns the result of calling defined_keyed(key) on the aggregate.

Auxiliar functions

static void out_of_bounds(PARROT_INTERP)
Throw out-of-bounds exception.