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.
Methods
void init()
Raises an exception. Use 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. 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 PMC *get_pmc_keyed_int(INTVAL key)
Returns the element for 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 INTVAL exists_keyed_int(INTVAL idx)
Returns whether an element for INTVAL defined_keyed(PMC *key)INTVAL defined_keyed_int(INTVAL key)
Returns the result of calling
init_pmc().
value must be one of
ITERATE_FROM_START ... Iterate from start ITERATE_FROM_END ... Iterate from end
*key.
key.
*key exists in the array.
idx exists in the aggregate.
defined_keyed(key) on the aggregate.