KinoSearch1
view release on metacpan or search on metacpan
lib/KinoSearch1/Index/TermBuffer.pm view on Meta::CPAN
package KinoSearch1::Index::TermBuffer;
use strict;
use warnings;
use KinoSearch1::Util::ToolSet;
use base qw( KinoSearch1::Util::CClass );
BEGIN {
__PACKAGE__->init_instance_vars(
# constructor params
finfos => undef,
);
}
our %instance_vars;
sub new {
my $class = shift;
$class = ref($class) || $class;
my %args = ( %instance_vars, @_ );
confess kerror() unless verify_args( \%instance_vars, %args );
my $self = _new( $class, $args{finfos}->size );
return $self;
}
1;
__END__
__XS__
MODULE = KinoSearch1 PACKAGE = KinoSearch1::Index::TermBuffer
void
_new(class, finfos_size)
char *class;
I32 finfos_size;
PREINIT:
TermBuffer *term_buf;
PPCODE:
term_buf = Kino1_TermBuf_new(finfos_size);
ST(0) = sv_newmortal();
sv_setref_pv(ST(0), class, (void*)term_buf);
XSRETURN(1);
void
DESTROY(term_buf)
TermBuffer *term_buf;
PPCODE:
Kino1_TermBuf_destroy(term_buf);
__H__
#ifndef H_KINOSEARCH_INDEX_TERM_BUFFER
#define H_KINOSEARCH_INDEX_TERM_BUFFER 1
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "KinoSearch1IndexTerm.h"
#include "KinoSearch1StoreInStream.h"
#include "KinoSearch1UtilByteBuf.h"
#include "KinoSearch1UtilCarp.h"
#include "KinoSearch1UtilMemManager.h"
typedef struct termbuffer {
ByteBuf *termstring;
I32 text_len;
I32 max_field_num;
} TermBuffer;
TermBuffer* Kino1_TermBuf_new(I32);
void Kino1_TermBuf_read(TermBuffer*, InStream*);
void Kino1_TermBuf_reset(TermBuffer*);
void Kino1_TermBuf_set_termstring(TermBuffer*, char*, I32);
void Kino1_TermBuf_destroy(TermBuffer*);
#endif /* include guard */
__C__
#include "KinoSearch1IndexTermBuffer.h"
static void Kino1_TermBuf_set_text_len(TermBuffer*, I32);
TermBuffer*
Kino1_TermBuf_new(I32 finfos_size) {
TermBuffer *term_buf;
/* allocate */
Kino1_New(0, term_buf, 1, TermBuffer);
/* reset the TermBuffer */
term_buf->termstring = NULL;
Kino1_TermBuf_reset(term_buf);
/* derive max_field_num */
term_buf->max_field_num = finfos_size - 1;
return term_buf;
}
/* Decode the next term in a term dictionary file (.tii, .tis), but don't turn
* it into a full-fledged Term object. */
void
Kino1_TermBuf_read(TermBuffer *term_buf, InStream *instream) {
I32 text_overlap, finish_chars_len, total_text_len, field_num;
/* read bytes which are shared between the last term text and this */
( run in 0.594 second using v1.01-cache-2.11-cpan-5511b514fd6 )