package Plucene::Search::PhrasePositions;
=head1 NAME
Plucene::Search::PhrasePositions - The position of a phrase
=head1 SYNOPSIS
my $phpos = Plucene::Search::PhrasePositions->new;
my $next = $phpos->next;
my $first_pos = $phpos->first_position;
my $next_pos = $phpos->next_position;
=head1 DESCRIPTION
=head1 METHODS
=cut
use strict;
use warnings;
use base 'Class::Accessor::Fast';
__PACKAGE__->mk_accessors(qw/ doc position count offset tp next_in_list /);
=head2 new
my $phpos = Plucene::Search::PhrasePositions->new;
Make a new Plucene::Search::PhrasePositions object.
=head2 doc / position / count / offset / tp / next
Get / set these attibutes.
=cut
sub new {
my $self = shift->SUPER::new(@_);
$self->{offset} ||= 0;
$self->{position} ||= 0;
$self->{count} ||= 0;
$self->next;
$self;
}
=head2 next
my $next = $phpos->next;
=cut
sub next {
my $self = shift;
if (!$self->{tp}->next) {
$self->doc(~0);
return;
}
$self->doc($self->tp->doc);
$self->position(0);
}
=head2 first_position
my $first = $phpos->first_position;
=cut
sub first_position {
my $self = shift;
$self->count($self->tp->freq);
$self->next_position;
}
=head2 next_position
my $next_pos = $phpos->next_position;
=cut
sub next_position {
my $self = shift;
return unless $self->{count}-- > 0;
$self->position($self->tp->next_position - $self->offset);
}
1;