KinoSearch1
view release on metacpan or search on metacpan
lib/KinoSearch1/Index/SegTermDocs.pm view on Meta::CPAN
package KinoSearch1::Index::SegTermDocs;
use strict;
use warnings;
use KinoSearch1::Util::ToolSet;
use base qw( KinoSearch1::Index::TermDocs );
BEGIN {
__PACKAGE__->init_instance_vars(
# constructor params
reader => undef,
);
}
our %instance_vars;
sub new {
my $self = shift->SUPER::new;
confess kerror() unless verify_args( \%instance_vars, @_ );
my %args = ( %instance_vars, @_ );
my $reader = $args{reader};
_init_child($self);
# dupe some stuff from the parent reader.
$self->_set_reader($reader);
$self->_set_skip_interval( $reader->get_skip_interval );
$self->_set_freq_stream( $reader->get_freq_stream()->clone_stream );
$self->_set_skip_stream( $reader->get_freq_stream()->clone_stream );
$self->_set_prox_stream( $reader->get_prox_stream()->clone_stream );
$self->_set_deldocs( $reader->get_deldocs );
return $self;
}
sub seek {
my ( $self, $term ) = @_;
my $tinfo
= defined $term
? $self->_get_reader()->fetch_term_info($term)
: undef;
$self->seek_tinfo($tinfo);
}
sub close {
my $self = shift;
$self->_get_freq_stream()->close;
$self->_get_prox_stream()->close;
$self->_get_skip_stream()->close;
}
1;
__END__
__XS__
MODULE = KinoSearch1 PACKAGE = KinoSearch1::Index::SegTermDocs
void
_init_child(term_docs)
TermDocs *term_docs;
PPCODE:
Kino1_SegTermDocs_init_child(term_docs);
SV*
_set_or_get(term_docs, ...)
TermDocs *term_docs;
ALIAS:
_set_count = 1
_get_count = 2
_set_freq_stream = 3
_get_freq_stream = 4
_set_prox_stream = 5
_get_prox_stream = 6
_set_skip_stream = 7
_get_skip_stream = 8
_set_deldocs = 9
_get_deldocs = 10
_set_reader = 11
_get_reader = 12
set_read_positions = 13
get_read_positions = 14
_set_skip_interval = 15
_get_skip_interval = 16
CODE:
{
SegTermDocsChild *child = (SegTermDocsChild*)term_docs->child;
KINO_START_SET_OR_GET_SWITCH
case 1: child->count = SvUV(ST(1));
/* fall through */
case 2: RETVAL = newSVuv(child->count);
break;
case 3: SvREFCNT_dec(child->freq_stream_sv);
child->freq_stream_sv = newSVsv( ST(1) );
Kino1_extract_struct( child->freq_stream_sv, child->freq_stream,
InStream*, "KinoSearch1::Store::InStream");
/* fall through */
case 4: RETVAL = newSVsv(child->freq_stream_sv);
break;
case 5: SvREFCNT_dec(child->prox_stream_sv);
child->prox_stream_sv = newSVsv( ST(1) );
Kino1_extract_struct( child->prox_stream_sv, child->prox_stream,
InStream*, "KinoSearch1::Store::InStream");
/* fall through */
case 6: RETVAL = newSVsv(child->prox_stream_sv);
break;
case 7: SvREFCNT_dec(child->skip_stream_sv);
child->skip_stream_sv = newSVsv( ST(1) );
Kino1_extract_struct( child->skip_stream_sv, child->skip_stream,
InStream*, "KinoSearch1::Store::InStream");
/* fall through */
case 8: RETVAL = newSVsv(child->skip_stream_sv);
break;
case 9: SvREFCNT_dec(child->deldocs_sv);
child->deldocs_sv = newSVsv( ST(1) );
Kino1_extract_struct( child->deldocs_sv, child->deldocs,
( run in 1.254 second using v1.01-cache-2.11-cpan-5511b514fd6 )