MODULE = SWISH::3 PACKAGE = SWISH::3::Token
PROTOTYPES: enable
SV*
value (self)
swish_Token *self;
PREINIT:
xmlChar *value;
CODE:
value = self->value;
if (value == NULL) {
RETVAL = &PL_sv_undef;
}
else {
RETVAL = newSVpvn( (char*)value, self->len );
SvUTF8_on(RETVAL); // because we stored as UTF-8
}
OUTPUT:
RETVAL
swish_MetaName*
meta (self)
swish_Token *self;
PREINIT:
char* CLASS;
CODE:
CLASS = METANAME_CLASS;
RETVAL = self->meta;
RETVAL->ref_cnt++;
OUTPUT:
RETVAL
SV*
meta_id (self)
swish_Token *self;
CODE:
RETVAL = newSViv( self->meta->id );
OUTPUT:
RETVAL
SV*
context (self)
swish_Token *self;
CODE:
RETVAL = newSVpvn( (char*)self->context, strlen((char*)self->context) );
OUTPUT:
RETVAL
SV*
pos (self)
swish_Token *self;
CODE:
RETVAL = newSViv( self->pos );
OUTPUT:
RETVAL
SV*
offset (self)
swish_Token *self;
CODE:
RETVAL = newSViv( self->offset );
OUTPUT:
RETVAL
SV*
len(self)
swish_Token *self;
CODE:
RETVAL = newSViv( self->len );
OUTPUT:
RETVAL
void
DESTROY(self)
swish_Token* 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);
warn("Token has swish_MetaName object ref_cnt = %d",
self->meta->ref_cnt);
}
if (self->ref_cnt > 0 && self->meta->ref_cnt == 0) {
SWISH_WARN("Token's MetaName ref_cnt should not be less than Token");
}
if (self->ref_cnt < 1) {
swish_token_free(self);
}