# -*- Mode: Perl -*- mootLexfreqs* O_OBJECT mootNgrams* O_OBJECT mootHMM* O_OBJECT mootDynHMM* O_OBJECT mootDynLexHMM* O_OBJECT mootDynLexHMM_Boltzmann* O_OBJECT wasteLexicon* O_OBJECT TokenReader* O_OBJECT TokenWriter* O_OBJECT TokenReaderNative* O_OBJECT TokenWriterNative* O_OBJECT TokenReaderExpat* O_OBJECT TokenWriterExpat* O_OBJECT wasteTokenScanner* O_OBJECT wasteLexerReader* O_OBJECT wasteDecoder* O_OBJECT wasteAnnotatorWriter* O_OBJECT #mootSentence* T_AV TagStr T_CHAR LexfreqCount T_FLOAT NgramCount T_FLOAT bool T_BOOL size_t T_UV TagID T_UV TokID T_UV mootEnumID T_UV mootTokenType T_UV #wasteScannerType T_UV #wasteLexerType T_UV TokenIOFormatMask T_UV CountT T_DOUBLE ProbT T_DOUBLE ###################################################################### # perl->C INPUT #T_std_string # { # char *cstr = SvPV_nolen($arg); # $var.assign(cstr, SvCUR($arg)); # } T_BYTE { $var = *( SvPV($arg,1) ); } T_INT { $var = SvIV($arg); } T_UINT { $var = SvUV($arg); } T_FLOAT { $var = SvNV($arg); } T_GFSM_WEIGHT { gfsm_perl_weight_setfloat($var,SvNV($arg)); } T_LABELID_VECTOR { //-------------------------- BEGIN T_LABELID_VECTOR perl->C int _i; AV *av=NULL; if (SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) ) av = (AV*)SvRV( $arg ); else { warn( \"${Package}::$func_name() -- $var is not an AV reference\" ); XSRETURN_UNDEF; } $var = g_ptr_array_sized_new(av_len(av)); for (_i=0; _i <= av_len(av); _i++) { SV **sv = av_fetch(av,_i,0); if (sv && *sv) { g_ptr_array_add($var, GUINT_TO_POINTER(SvUV(*sv))); } else { g_ptr_array_add($var, GUINT_TO_POINTER((guint)gfsmNoLabel)); } } //-------------------------- END T_LABELID_VECTOR perl->C } T_STATEID_VECTOR { //-------------------------- BEGIN T_STATEID_VECTOR perl->C int _i; AV *av=NULL; if (SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) ) av = (AV*)SvRV( $arg ); else { warn( \"${Package}::$func_name() -- $var is not an AV reference\" ); XSRETURN_UNDEF; } $var = g_ptr_array_sized_new(av_len(av)); for (_i=0; _i <= av_len(av); _i++) { SV **sv = av_fetch(av,_i,0); if (sv && *sv) { g_ptr_array_add($var, GUINT_TO_POINTER(SvUV(*sv))); } else { g_ptr_array_add($var, GUINT_TO_POINTER(gfsmNoState)); } } //-------------------------- END T_STATEID_VECTOR perl->C } ###################################################################### # C->perl OUTPUT #T_std_string # $arg = newSVpvn($var.data(), $var.length()); T_BYTE { sv_setpvn($arg,&$var,1); } T_INT { sv_setiv($arg,$var); } T_UINT { sv_setuv($arg,$var); } T_FLOAT { sv_setnv($arg,$var); } T_GFSM_WEIGHT { sv_setnv($arg, gfsm_perl_weight_getfloat($var)); } T_LABELID_VECTOR { //-------------------------- BEGIN T_LABELID_VECTOR C->perl int _i; AV *av = newAV(); if ($var) { for (_i=0; _i < $var->len; _i++) { av_push(av, newSVuv((UV)GPOINTER_TO_UINT(g_ptr_array_index($var,_i)))); } } sv_2mortal((SV*)av); $arg = newRV((SV*)av); sv_2mortal($arg); //-------------------------- END T_LABELID_VECTOR C->perl } T_STATEID_VECTOR { //-------------------------- BEGIN T_STATEID_VECTOR C->perl int _i; AV *av = newAV(); if ($var) { for (_i=0; _i < $var->len; _i++) { av_push(av, newSVuv((UV)GPOINTER_TO_UINT(g_ptr_array_index($var,_i)))); } } sv_2mortal((SV*)av); $arg = newRV((SV*)av); sv_2mortal($arg); //-------------------------- END T_STATEID_VECTOR C->perl }