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 )