Sereal-Decoder
view release on metacpan or search on metacpan
proto);
CvXSUBANY(cv).any_i32 = cv_private;
#if USE_CUSTOM_OPS
cv_set_call_checker(cv, THX_ck_entersub_args_sereal_decoder, (SV*)cv);
#endif /* USE_CUSTOM_OPS */
sprintf(name, "Sereal::Decoder::decode%s", fti->name_suffix);
gv = gv_fetchpv(name, GV_ADDMULTI, SVt_PVCV);
GvCV_set(gv, cv);
}
}
BOOT:
{
#if USE_CUSTOM_OPS
{
XOP *xop;
Newxz(xop, 1, XOP);
XopENTRY_set(xop, xop_name, "scalar_looks_like_sereal");
XopENTRY_set(xop, xop_desc, "scalar_looks_like_sereal");
XopENTRY_set(xop, xop_class, OA_UNOP);
Perl_custom_op_register(aTHX_ THX_pp_looks_like_sereal, xop);
}
#endif /* USE_CUSTOM_OPS */
{
CV *cv;
cv = newXSproto_portable("Sereal::Decoder::scalar_looks_like_sereal", THX_xsfunc_looks_like_sereal, __FILE__, "$");
CvXSUBANY(cv).any_i32 = 0x010100 | OPOPT_LOOKS_LIKE;
#if USE_CUSTOM_OPS
cv_set_call_checker(cv, THX_ck_entersub_args_sereal_decoder, (SV*)cv);
#endif /* USE_CUSTOM_OPS */
cv = newXS("Sereal::Decoder::looks_like_sereal", THX_xsfunc_looks_like_sereal, __FILE__);
CvXSUBANY(cv).any_i32 = 0x020100 | OPOPT_LOOKS_LIKE;
}
}
srl_decoder_t *
new(CLASS, opt = NULL)
char *CLASS;
HV *opt;
PREINIT:
dMY_CXT;
CODE:
RETVAL = srl_build_decoder_struct(aTHX_ opt, MY_CXT.options);
RETVAL->flags |= SRL_F_DECODER_REUSE;
OUTPUT: RETVAL
void
DESTROY(dec)
srl_decoder_t *dec;
CODE:
srl_destroy_decoder(aTHX_ dec);
void
decode_sereal(src, opt = NULL, into = NULL)
SV *src;
SV *opt;
SV *into;
PREINIT:
dMY_CXT;
srl_decoder_t *dec= NULL;
PPCODE:
if (SvROK(src))
croak("We can't decode a reference as Sereal!");
/* Support no opt at all, undef, hashref */
if (opt != NULL) {
SvGETMAGIC(opt);
if (!SvOK(opt))
opt = NULL;
else if (SvROK(opt) && SvTYPE(SvRV(opt)) == SVt_PVHV)
opt = (SV *)SvRV(opt);
else
croak("Options are neither undef nor hash reference");
}
dec = srl_build_decoder_struct(aTHX_ (HV *)opt, MY_CXT.options);
ST(0)= srl_decode_into(aTHX_ dec, src, into, 0);
XSRETURN(1);
AV *
decode_sereal_with_header_data(src, opt = NULL, body_into = NULL, header_into = NULL)
SV *src;
SV *opt;
SV *body_into;
SV *header_into;
PREINIT:
dMY_CXT;
srl_decoder_t *dec= NULL;
CODE:
/* Support no opt at all, undef, hashref */
if (opt != NULL) {
SvGETMAGIC(opt);
if (!SvOK(opt))
opt = NULL;
else if (SvROK(opt) && SvTYPE(SvRV(opt)) == SVt_PVHV)
opt = (SV *)SvRV(opt);
else
croak("Options are neither undef nor hash reference");
}
dec = srl_build_decoder_struct(aTHX_ (HV *)opt, MY_CXT.options);
if (body_into == NULL)
body_into = sv_newmortal();
if (header_into == NULL)
header_into = sv_newmortal();
srl_decode_all_into(aTHX_ dec, src, header_into, body_into, 0);
RETVAL = newAV();
sv_2mortal((SV *)RETVAL);
av_extend(RETVAL, 1);
av_store(RETVAL, 0, SvREFCNT_inc(header_into));
av_store(RETVAL, 1, SvREFCNT_inc(body_into));
OUTPUT: RETVAL
UV
bytes_consumed(dec)
srl_decoder_t *dec;
CODE:
RETVAL = dec->bytes_consumed;
OUTPUT: RETVAL
U32
flags(dec)
srl_decoder_t *dec;
CODE:
( run in 1.365 second using v1.01-cache-2.11-cpan-5511b514fd6 )