MIME-Fast
view release on metacpan or search on metacpan
Fast/MultiPart.xs view on Meta::CPAN
GMimeObject *mime_object;
CODE:
if (sv_isobject(subpart) && SvROK(subpart)) {
IV tmp = SvIV((SV*)SvRV(subpart));
mime_object = INT2PTR(MIME__Fast__Object, tmp);
g_mime_multipart_add_part(mime_multipart, mime_object);
plist = g_list_remove(plist, subpart);
}
CASE: items == 3
MIME::Fast::MultiPart mime_multipart
SV * subpart
int index
PREINIT:
GMimeObject *mime_object;
CODE:
if (sv_isobject(subpart) && SvROK(subpart)) {
IV tmp = SvIV((SV*)SvRV(subpart));
mime_object = INT2PTR(MIME__Fast__Object, tmp);
g_mime_multipart_add_part_at(mime_multipart, mime_object, index);
plist = g_list_remove(plist, subpart);
}
#
# get_number (number of parts)
#
int
g_mime_multipart_get_number(mime_multipart)
MIME::Fast::MultiPart mime_multipart
#
# callback function
#
void
g_mime_multipart_foreach(mime_multipart, callback, svdata)
MIME::Fast::MultiPart mime_multipart
SV * callback
SV * svdata
PREINIT:
struct _user_data_sv *data;
CODE:
data = g_new0 (struct _user_data_sv, 1);
data->svuser_data = newSVsv(svdata);
data->svfunc = newSVsv(callback);
g_mime_multipart_foreach(mime_multipart, call_sub_foreach, data);
g_free (data);
#
# children
# ALIAS: parts
#
void
children(mime_multipart, ...)
MIME::Fast::MultiPart mime_multipart
ALIAS:
MIME::Fast::MultiPart::parts = 1
PREINIT:
GList * child;
IV partnum = -1;
I32 gimme = GIMME_V;
gint count = 0;
PPCODE:
if (items == 2) {
partnum = SvIV(ST(1));
}
if (GMIME_IS_MULTIPART (mime_multipart)) {
for (child = GMIME_MULTIPART (mime_multipart)->subparts; child && child->data; child = child->next, ++count) {
SV * part;
if (gmime_debug)
warn(" ** children 0x%x\n", child->data);
if (items == 1 && gimme == G_SCALAR)
continue;
# avoid unnecessary SV creation
if (items == 2 && partnum != count)
continue;
# push part
part = sv_newmortal();
if (GMIME_IS_MULTIPART(child->data))
{
if (gmime_debug)
warn(" ** children add: %s 0x%x\n", "MIME::Fast::MultiPart", child->data);
sv_setref_pv(part, "MIME::Fast::MultiPart", (MIME__Fast__MultiPart)(child->data));
} else if (GMIME_IS_MESSAGE_PARTIAL(child->data))
{
if (gmime_debug)
warn(" ** children add: %s 0x%x\n", "MIME::Fast::MessagePartial", child->data);
sv_setref_pv(part, "MIME::Fast::MessagePartial", (MIME__Fast__MessagePartial)(child->data));
#if GMIME_CHECK_VERSION_UNSUPPORTED
} else if (GMIME_IS_MESSAGE_MDN(child->data))
{
if (gmime_debug)
warn(" ** children add: %s 0x%x\n", "MIME::Fast::MessageMDN", child->data);
sv_setref_pv(part, "MIME::Fast::MessageMDN", (MIME__Fast__MessageMDN)(child->data));
} else if (GMIME_IS_MESSAGE_DELIVERY(child->data))
{
if (gmime_debug)
warn(" ** children add: %s 0x%x\n", "MIME::Fast::MessageDelivery", child->data);
sv_setref_pv(part, "MIME::Fast::MessageDelivery", (MIME__Fast__MessageDelivery)(child->data));
#endif
} else if (GMIME_IS_PART(child->data))
{
if (gmime_debug)
warn(" ** children add: %s 0x%x\n", "MIME::Fast::Part", child->data);
sv_setref_pv(part, "MIME::Fast::Part", (MIME__Fast__Part)(child->data));
} else if (GMIME_IS_MESSAGE_PART(child->data))
{
if (gmime_debug)
warn(" ** children add: %s 0x%x\n", "MIME::Fast::MessagePart", child->data);
sv_setref_pv(part, "MIME::Fast::MessagePart", (MIME__Fast__MessagePart)(child->data));
} else if (GMIME_IS_OBJECT(child->data))
die("g_mime_multipart children: unknown type of object: 0x%x '%s'",
child->data, g_mime_content_type_to_string(g_mime_object_get_content_type(child->data)));
else
die("g_mime_multipart children: unknown reference (not GMIME object): 0x%x '%5s'",
child->data, child->data);
if (gmime_debug)
warn("function g_mime_part subparts setref (not in plist): 0x%x", child->data);
if (items == 1) {
( run in 0.505 second using v1.01-cache-2.11-cpan-5511b514fd6 )