Devel-PPPort
view release on metacpan or search on metacpan
parts/inc/magic view on Meta::CPAN
=xsubs
SV *
new_with_other_mg(package, ...)
SV *package
PREINIT:
HV *self;
HV *stash;
SV *self_ref;
const char *data = "hello\0";
MAGIC *mg;
CODE:
self = newHV();
stash = gv_stashpv(SvPV_nolen(package), 0);
self_ref = newRV_noinc((SV*)self);
sv_magic((SV*)self, NULL, PERL_MAGIC_ext, data, strlen(data));
mg = mg_find((SV*)self, PERL_MAGIC_ext);
if (mg)
mg->mg_virtual = &other_mg_vtbl;
else
croak("No mg!");
RETVAL = sv_bless(self_ref, stash);
OUTPUT:
RETVAL
SV *
new_with_mg(package, ...)
SV *package
PREINIT:
HV *self;
HV *stash;
SV *self_ref;
const char *data = "hello\0";
MAGIC *mg;
CODE:
self = newHV();
stash = gv_stashpv(SvPV_nolen(package), 0);
self_ref = newRV_noinc((SV*)self);
sv_magic((SV*)self, NULL, PERL_MAGIC_ext, data, strlen(data));
mg = mg_find((SV*)self, PERL_MAGIC_ext);
if (mg)
mg->mg_virtual = &null_mg_vtbl;
else
croak("No mg!");
RETVAL = sv_bless(self_ref, stash);
OUTPUT:
RETVAL
void
remove_null_magic(self)
SV *self
PREINIT:
HV *obj;
PPCODE:
obj = (HV*) SvRV(self);
sv_unmagicext((SV*)obj, PERL_MAGIC_ext, &null_mg_vtbl);
void
remove_other_magic(self)
SV *self
PREINIT:
HV *obj;
PPCODE:
obj = (HV*) SvRV(self);
sv_unmagicext((SV*)obj, PERL_MAGIC_ext, &other_mg_vtbl);
void
as_string(self)
SV *self
PREINIT:
HV *obj;
MAGIC *mg;
PPCODE:
obj = (HV*) SvRV(self);
if ((mg = mg_findext((SV*)obj, PERL_MAGIC_ext, &null_mg_vtbl))) {
XPUSHs(sv_2mortal(newSVpv(mg->mg_ptr, strlen(mg->mg_ptr))));
} else {
XPUSHs(sv_2mortal(newSVpvs("Sorry, your princess is in another castle.")));
}
void
sv_catpv_mg(sv, string)
SV *sv;
char *string;
CODE:
sv_catpv_mg(sv, string);
void
sv_catpvn_mg(sv, sv2)
SV *sv;
SV *sv2;
PREINIT:
char *str;
STRLEN len;
CODE:
str = SvPV(sv2, len);
sv_catpvn_mg(sv, str, len);
void
sv_catsv_mg(sv, sv2)
SV *sv;
SV *sv2;
CODE:
sv_catsv_mg(sv, sv2);
void
sv_setiv_mg(sv, iv)
SV *sv;
IV iv;
CODE:
sv_setiv_mg(sv, iv);
void
sv_setnv_mg(sv, nv)
SV *sv;
NV nv;
CODE:
sv_setnv_mg(sv, nv);
void
sv_setpv_mg(sv, pv)
SV *sv;
char *pv;
CODE:
sv_setpv_mg(sv, pv);
void
sv_setpvn_mg(sv, sv2)
SV *sv;
SV *sv2;
PREINIT:
char *str;
( run in 0.760 second using v1.01-cache-2.11-cpan-5511b514fd6 )