The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
MODULE = SWISH::3       PACKAGE = SWISH::3::Analyzer

PROTOTYPES: enable


swish_Analyzer *
new(CLASS, config)
    char*           CLASS;
    swish_Config*   config;
    
    CODE:
        RETVAL = swish_analyzer_init(config);
        RETVAL->ref_cnt++;
        RETVAL->stash = sp_Stash_new();
        
    OUTPUT:
        RETVAL


# accessors/mutators
void
_set_or_get(self, ...)
    swish_Analyzer* self;
ALIAS:
    set_regex           = 1
    get_regex           = 2
PREINIT:
    SV*             stash;
    SV*             RETVAL;
PPCODE:
{
    
    //warn("number of items %d for ix %d", items, ix);
    
    START_SET_OR_GET_SWITCH

    // set_regex
    case 1:  sp_SV_is_qr(ST(1));
             self->regex = ST(1);
             break;
             
    // get_regex
    case 2:  RETVAL  = self->regex; //SvREFCNT_inc( self->regex );
             break;
                
    END_SET_OR_GET_SWITCH
}

boolean
get_tokenize(self)
    swish_Analyzer* self;
    
    CODE:
        RETVAL = self->tokenize;
    
    OUTPUT:
        RETVAL

    
void
set_tokenize(self, arg)
    swish_Analyzer* self;
    SV* arg;

    CODE:    
        if (SvIOK(arg)) {
            self->tokenize = SvIV(arg);
        }
        else {
            croak("argument to set_tokenize() should be an integer");
        }



void
DESTROY(self)
    swish_Analyzer* self
    
    CODE:
        self->ref_cnt--;
                        
        if (SWISH_DEBUG) {
            warn("DESTROY %s [0x%lx] [ref_cnt = %d]", 
                SvPV(ST(0), PL_na), (long)self, self->ref_cnt);
        }
        
        if (self->ref_cnt < 1) {
            sp_Stash_destroy( self->stash );
            self->stash = NULL;
            //warn("Analyzer regex refcnt = %d", SvREFCNT((SV*)self->regex));
            SvREFCNT_dec( (SV*)self->regex );
            self->regex = NULL;
            swish_analyzer_free(self);
        }