Dmitry E. Oboukhov > DR-Tarantool-0.36 > DR::Tarantool::Iterator

Download:
DR-Tarantool-0.36.tar.gz

Dependencies

Annotate this POD

Website

View/Report Bugs
Source   Latest Release: DR-Tarantool-0.44

NAME ^

DR::Tarantool::Iterator - iterator/container class for DR::Tarantool

SYNOPSIS ^

    use DR::Tarantool::Iterator;

    my $iter = DR::Tarantool::Iterator->new([1, 2, 3]);

    my $item0 = $iter->item(0);

    my @all = $iter->all;
    my $all = $iter->all;

    while(my $item = $iter->next) {
        do_something_with_item( $item );
    }

METHODS ^

new

Constructor.

Arguments

clone(%opt)

clone iterator object (doesn't clone items). It is usable if You want to have iterator that have the other item_class and (or) item_constructor.

If clone_items argument is true, the function will clone itemlist, too.

    my $iter1 = $old_iter->clone(item_class => [ 'MyClass', 'new' ]);
    my $iter2 = $old_iter->clone(item_class => [ 'MyClass', 'new' ],
        clone_items => 1);

    $old_iter->sort(sub { $_[0]->name cmp $_[1]->name });
    # $iter1 will be resorted, too, but $iter2 will not be

count

returns count of items that are contained in iterator

item

returns one item from iterator by its number (or croaks error for wrong numbers)

raw_item

returns one raw item from iterator by its number (or croaks error for wrong numbers).

The function differ from item: it doesn't know about 'item_class'.

raw_sort(&)

resorts iterator (changes current object). Compare function receives two raw objects:

    $iter->raw_sort(sub { $_[0]->field cmp $_[1]->field });

sort(&)

resorts iterator (changes current object). Compare function receives two objects:

    $iter->sort(sub { $_[0]->field <=> $_[1]->field });

grep(&)

greps iterator (returns new iterator).

    my $admins = $users->grep(sub { $_[0]->is_admin });

raw_grep(&)

greps iterator (returns new iterator). grep function receives raw item.

    my $admins = $users->grep(sub { $_[0]->is_admin });

get

The same as item method.

exists

Returns true if iterator contains element with noticed index.

    my $item = $iter->exists(10) ? $iter->get(10) : somethig_else();

next

returns next element from iterator (or undef if eof).

    while(my $item = $iter->next) {
        do_something_with( $item );
    }

You can ask current element's number by function 'iter'.

iter

returns current iterator index.

reset

resets iterator index, returns previous index value.

all

returns all elements from iterator.

    my @list = $iter->all;
    my $list_aref = $iter->all;

    my @abc_list = map { $_->abc } $iter->all;
    my @abc_list = $iter->all('abc');               # the same


    my @list = map { [ $_->abc, $_->cde ] } $iter->all;
    my @list = $iter->all('abc', 'cde');                # the same


    my @list = map { $_->abc + $_->cde } $iter->all;
    my @list = $iter->all(sub { $_[0]->abc + $_->cde }); # the same

item_class

set/returns item class. If the value isn't defined, iterator will bless fields into the class (or calls item_constructor in the class if item_constructor is defined

item_constructor

set/returns item constructor. The value can be used only if item_class is defined.

push

push item into iterator.

data

returns/set user's data assigned to the iterator

syntax highlighting: