#include "text-mecab.h" static int TextMeCab_mg_free(pTHX_ SV *const sv, MAGIC* const mg) { TextMeCab* const mecab = (TextMeCab*) mg->mg_ptr; PERL_UNUSED_VAR(sv); mecab_destroy(XS_2MECAB(mecab)); if (mecab->argc > 0) { unsigned int i; for ( i = 0; i < mecab->argc; i++) { Safefree(mecab->argv[i]); } Safefree(mecab->argv); } return 0; } static int TextMeCab_mg_dup(pTHX_ MAGIC *const mg, CLONE_PARAMS *const param) { #ifdef USE_ITHREADS TextMeCab* const mecab = (TextMeCab*) mg->mg_ptr; TextMeCab* newmecab; PERL_UNUSED_VAR(param); newmecab = TextMeCab_create(mecab->argv, mecab->argc); mg->mg_ptr = (char *) newmecab; #else PERL_UNUSED_VAR(mg); PERL_UNUSED_VAR(param); #endif return 0; } static MAGIC* TextMeCab_mg_find(pTHX_ SV* const sv, const MGVTBL* const vtbl){ MAGIC* mg; assert(sv != NULL); assert(vtbl != NULL); for(mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic){ if(mg->mg_virtual == vtbl){ assert(mg->mg_type == PERL_MAGIC_ext); return mg; } } croak("PerlMeCab: Invalid PerlMeCab object was passed"); return NULL; /* not reached */ } static MGVTBL TextMeCab_vtbl = { /* for identity */ NULL, /* get */ NULL, /* set */ NULL, /* len */ NULL, /* clear */ TextMeCab_mg_free, /* free */ NULL, /* copy */ TextMeCab_mg_dup, /* dup */ NULL, /* local */ }; MODULE = Text::MeCab PACKAGE = Text::MeCab PREFIX = TextMeCab_ PROTOTYPES: DISABLE INCLUDE: const-xs.inc BOOT: TextMeCab_bootstrap(); TextMeCab * TextMeCab__xs_create(class_sv, args = NULL) SV *class_sv; AV *args; CODE: RETVAL = TextMeCab_create_from_av(args); OUTPUT: RETVAL TextMeCab_Node * TextMeCab_parse(mecab, string) TextMeCab *mecab; char *string; MODULE = Text::MeCab PACKAGE = Text::MeCab::Node PREFIX = TextMeCab_Node_ PROTOTYPES: DISABLE unsigned int TextMeCab_Node_id(node) TextMeCab_Node *node unsigned int TextMeCab_Node_length(node) TextMeCab_Node *node unsigned int TextMeCab_Node_rlength(node) TextMeCab_Node *node TextMeCab_Node * TextMeCab_Node_next(node) TextMeCab_Node *node TextMeCab_Node * TextMeCab_Node_prev(node) TextMeCab_Node *node SV * TextMeCab_Node_surface(node) TextMeCab_Node *node; const char * TextMeCab_Node_feature(node) TextMeCab_Node *node; unsigned short TextMeCab_Node_rcattr(node) TextMeCab_Node *node; unsigned short TextMeCab_Node_lcattr(node) TextMeCab_Node *node; unsigned short TextMeCab_Node_posid(node) TextMeCab_Node *node; unsigned char TextMeCab_Node_char_type(node) TextMeCab_Node *node; unsigned char TextMeCab_Node_stat(node) TextMeCab_Node *node; unsigned char TextMeCab_Node_isbest(node) TextMeCab_Node *node; float TextMeCab_Node_alpha(node) TextMeCab_Node *node; float TextMeCab_Node_beta(node) TextMeCab_Node *node; float TextMeCab_Node_prob(node) TextMeCab_Node *node; short TextMeCab_Node_wcost(node) TextMeCab_Node *node; long TextMeCab_Node_cost(node) TextMeCab_Node *node; const char * TextMeCab_Node_format(node, mecab) TextMeCab_Node *node; TextMeCab *mecab; TextMeCab_Node_Cloned* TextMeCab_Node_dclone(node) TextMeCab_Node *node; MODULE = Text::MeCab PACKAGE = Text::MeCab::Node::Cloned PREFIX = TextMeCab_Node_Cloned_ PROTOTYPES: DISABLE unsigned int TextMeCab_Node_Cloned_id(node) TextMeCab_Node_Cloned *node unsigned int TextMeCab_Node_Cloned_length(node) TextMeCab_Node_Cloned *node unsigned int TextMeCab_Node_Cloned_rlength(node) TextMeCab_Node_Cloned *node TextMeCab_Node_Cloned * TextMeCab_Node_Cloned_next(node) TextMeCab_Node_Cloned *node TextMeCab_Node_Cloned * TextMeCab_Node_Cloned_prev(node) TextMeCab_Node_Cloned *node const char * TextMeCab_Node_Cloned_surface(node) TextMeCab_Node_Cloned *node; const char * TextMeCab_Node_Cloned_feature(node) TextMeCab_Node_Cloned *node; unsigned short TextMeCab_Node_Cloned_rcattr(node) TextMeCab_Node_Cloned *node; unsigned short TextMeCab_Node_Cloned_lcattr(node) TextMeCab_Node_Cloned *node; unsigned short TextMeCab_Node_Cloned_posid(node) TextMeCab_Node_Cloned *node; unsigned char TextMeCab_Node_Cloned_char_type(node) TextMeCab_Node_Cloned *node; unsigned char TextMeCab_Node_Cloned_stat(node) TextMeCab_Node_Cloned *node; unsigned char TextMeCab_Node_Cloned_isbest(node) TextMeCab_Node_Cloned *node; float TextMeCab_Node_Cloned_alpha(node) TextMeCab_Node_Cloned *node; float TextMeCab_Node_Cloned_beta(node) TextMeCab_Node_Cloned *node; float TextMeCab_Node_Cloned_prob(node) TextMeCab_Node_Cloned *node; short TextMeCab_Node_Cloned_wcost(node) TextMeCab_Node_Cloned *node; long TextMeCab_Node_Cloned_cost(node) TextMeCab_Node_Cloned *node; const char * TextMeCab_Node_Cloned_format(node, mecab) TextMeCab_Node_Cloned *node; TextMeCab *mecab; void TextMeCab_Node_Cloned_DESTROY(node) TextMeCab_Node_Cloned *node; CODE: TextMeCab_Node_Cloned_free(node);