# ***********************************************
# 
# !!!! DO NOT EDIT !!!!
# 
# This file was auto-generated by Build.PL.
# 
# ***********************************************
# 
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

=encoding utf8

=head1 NAME

Clownfish::StringIterator - Iterate Unicode code points in a String.

=head1 SYNOPSIS

    my $iter = $string->top;
    while (my $code_point = $iter->next) {
        ...
    }

=head1 DESCRIPTION

=head1 METHODS

=head2 clone

    my $result = $string_iterator->clone();

Return a clone of the object.

=head2 assign

    $string_iterator->assign($other);

Assign the source string and current position of C<other> to C<self>.

=head2 compare_to

    my $int = $string_iterator->compare_to($other);

Indicate whether one StringIterator is less than, equal to, or
greater than another by comparing their character positions. Throws an
exception if C<other> is not a StringIterator pointing to the same
source string as C<self>.

Returns: 0 if the StringIterators are equal, a negative number if C<self>
is less than C<other>, and a positive number if C<self> is greater than
C<other>.

=head2 has_next

    my $bool = $string_iterator->has_next();

Return true if the iterator is not at the end of the string.

=head2 has_prev

    my $bool = $string_iterator->has_prev();

Return true if the iterator is not at the start of the string.

=head2 next

    my $code_point = $iter->next;

Return the code point after the current position and advance the
iterator. Returns undef at the end of the string. Returns zero
but true for U+0000.

=head2 prev

    my $code_point = $iter->prev;

Return the code point before the current position and go one step back.
Returns undef at the start of the string. Returns zero but true for
U+0000.

=head2 advance

    my $int = $string_iterator->advance($num);

Skip code points.

=over

=item *

B<num> - The number of code points to skip.

=back

Returns: the number of code points actually skipped. This can be less
than the requested number if the end of the string is reached.

=head2 recede

    my $int = $string_iterator->recede($num);

Skip code points backward.

=over

=item *

B<num> - The number of code points to skip.

=back

Returns: the number of code points actually skipped. This can be less
than the requested number if the start of the string is reached.

=head2 skip_whitespace

    my $int = $string_iterator->skip_whitespace();

Skip whitespace.  Whitespace is any character that has the Unicode
property C<White_Space>.

Returns: the number of code points skipped.

=head2 skip_whitespace_back

    my $int = $string_iterator->skip_whitespace_back();

Skip whitespace backward.  Whitespace is any character that has the
Unicode property C<White_Space>.

Returns: the number of code points skipped.

=head2 starts_with

    my $bool = $string_iterator->starts_with($prefix);

Test whether the content after the iterator starts with C<prefix>.

=head2 ends_with

    my $bool = $string_iterator->ends_with($suffix);

Test whether the content before the iterator ends with C<suffix>.

=head1 INHERITANCE

Clownfish::StringIterator isa L<Clownfish::Obj>.

=cut

