NAME
    Role::TinyCommons::Iterator - A basic iterator

VERSION
    This document describes version 0.001 of Role::TinyCommons::Iterator
    (from Perl distribution Role-TinyCommons-Iterator), released on
    2021-04-18.

SYNOPSIS
    In your class:

     package YourClass;
     use Role::Tiny;
     with 'Role::TinyCommons::Iterator';

     sub new { ... }

     # implement required methods
     sub get_next_item { ... }
     sub try_get_next_item { ... }
     sub has_next_item { ... }

    In your class user's code:

     use YourClass;

     my $obj = YourClass->new(...);

     # iterate
     my @items;
     while ($obj->has_next_item) {
         push @items, $obj->get_next_item;
     }

DESCRIPTION
    This role provides a basic iterator that's unidirectional,
    non-resettable. For a bidirectional iterator, see
    Role::TinyCommons::Iterator::Bidirectional. For a resettable, see
    Role::TinyCommons::Iterator::Resettable.

REQUIRED METHODS
  get_next_item
    Usage:

     while ($obj->has_next_item) {
         push @items, $obj->get_next_item;
     }

    Get the next item. Must throw an exception (string based,
    "StopIteration") if there is no more item to get. Usually used with
    "has_next_item" to check first if there is stil another item to get.

  has_next_item
    Usage:

     while ($obj->has_next_item) {
         push @items, $obj->get_next_item;
     }

    Check whether iterator has another item.

  get_iterator_pos
    Usage:

     my $pos = $obj->get_iterator_pos;

    Return the iterator's current position, which is a non-negative integer.
    The first item has the position 0.

PROVIDED METHODS
    Currently none.

HOMEPAGE
    Please visit the project's homepage at
    <https://metacpan.org/release/Role-TinyCommons-Iterator>.

SOURCE
    Source repository is at
    <https://github.com/perlancar/perl-Role-TinyCommons-Iterator>.

BUGS
    Please report any bugs or feature requests on the bugtracker website
    <https://github.com/perlancar/perl-Role-TinyCommons-Iterator/issues>

    When submitting a bug or request, please include a test-file or a patch
    to an existing test-file that illustrates the bug or desired feature.

SEE ALSO
    This role is loosely based on Array::Iterator, but the method names have
    been made with "verb"+"object" naming style to be more verbose and less
    likely clash with your other methods. Both exception-based and
    undef-based signalling of out of items are provided for convenience. The
    "StopIteration" name comes from Python.

AUTHOR
    perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2021 by perlancar@cpan.org.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.

