KinoSearch1
view release on metacpan or search on metacpan
lib/KinoSearch1/Index/TermInfosWriter.pm view on Meta::CPAN
invindex => $invindex,
seg_name => $args{seg_name},
is_index => 1,
);
$self->_set_other($other);
$other->_set_other($self);
}
return $self;
}
sub finish {
my $self = shift;
my $outstream = $self->_get_outstream;
# seek to near the head and write the number of terms processed
$outstream->seek(4);
$outstream->lu_write( 'Q', $self->_get_size );
# cue the doppelganger's exit
if ( !$self->_get_is_index ) {
$self->_get_other()->finish;
}
$outstream->close;
}
1;
__END__
__XS__
MODULE = KinoSearch1 PACKAGE = KinoSearch1::Index::TermInfosWriter
TermInfosWriter*
_new(outstream_sv, is_index, index_interval, skip_interval)
SV *outstream_sv;
I32 is_index;
I32 index_interval;
I32 skip_interval;
CODE:
RETVAL = Kino1_TInfosWriter_new(outstream_sv, is_index, index_interval,
skip_interval);
OUTPUT: RETVAL
=for comment
Add a Term (encoded as a termstring) and its associated TermInfo.
=cut
void
add(obj, termstring_sv, tinfo)
TermInfosWriter *obj;
SV *termstring_sv;
TermInfo *tinfo;
PREINIT:
ByteBuf bb;
STRLEN len;
PPCODE:
bb.ptr = SvPV(termstring_sv, len);
bb.size = len;
Kino1_TInfosWriter_add(obj, &bb, tinfo);
=for comment
Export the FORMAT constant to Perl.
=cut
IV
FORMAT()
CODE:
RETVAL = KINO_TINFOS_FORMAT;
OUTPUT: RETVAL
SV*
_set_or_get(obj, ...)
TermInfosWriter *obj;
ALIAS:
_set_other = 1
_get_other = 2
_get_outstream = 4
_get_is_index = 6
_get_size = 8
CODE:
{
KINO_START_SET_OR_GET_SWITCH
case 1: SvREFCNT_dec(obj->other_sv);
obj->other_sv = newSVsv( ST(1) );
Kino1_extract_struct(obj->other_sv, obj->other, TermInfosWriter*,
"KinoSearch1::Index::TermInfosWriter");
/* fall through */
case 2: RETVAL = newSVsv(obj->other_sv);
break;
case 4: RETVAL = newSVsv(obj->fh_sv);
break;
case 6: RETVAL = newSViv(obj->is_index);
break;
case 8: RETVAL = newSViv(obj->size);
break;
KINO_END_SET_OR_GET_SWITCH
}
OUTPUT: RETVAL
void
DESTROY(obj)
TermInfosWriter *obj;
PPCODE:
Kino1_TInfosWriter_destroy(obj);
__H__
#ifndef H_KINO_TERM_INFOS_WRITER
#define H_KINO_TERM_INFOS_WRITER 1
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "KinoSearch1IndexTerm.h"
#include "KinoSearch1IndexTermInfo.h"
#include "KinoSearch1StoreOutStream.h"
#include "KinoSearch1UtilByteBuf.h"
#include "KinoSearch1UtilCClass.h"
#include "KinoSearch1UtilMathUtils.h"
#include "KinoSearch1UtilMemManager.h"
#include "KinoSearch1UtilStringHelper.h"
#define KINO_TINFOS_FORMAT -2
typedef struct terminfoswriter {
OutStream *fh;
SV *fh_sv;
I32 is_index;
I32 index_interval;
I32 skip_interval;
struct terminfoswriter* other;
SV *other_sv;
ByteBuf *last_termstring;
TermInfo *last_tinfo;
I32 last_fieldnum;
double last_tis_ptr;
I32 size;
} TermInfosWriter;
TermInfosWriter* Kino1_TInfosWriter_new(SV*, I32, I32, I32);
void Kino1_TInfosWriter_add(TermInfosWriter*, ByteBuf*, TermInfo*);
void Kino1_TInfosWriter_destroy(TermInfosWriter*);
#endif /* include guard */
__C__
#include "KinoSearch1IndexTermInfosWriter.h"
TermInfosWriter*
Kino1_TInfosWriter_new(SV *outstream_sv, I32 is_index, I32 index_interval,
I32 skip_interval) {
TermInfosWriter *obj;
/* allocate */
Kino1_New(0, obj, 1, TermInfosWriter);
/* assign */
obj->is_index = is_index;
obj->index_interval = index_interval;
obj->skip_interval = skip_interval;
obj->fh_sv = newSVsv(outstream_sv);
Kino1_extract_struct(obj->fh_sv, obj->fh, OutStream*,
( run in 0.891 second using v1.01-cache-2.11-cpan-5511b514fd6 )