libpurple/plugins/perl/perl-common.c

branch
soc.2013.gobjectification
changeset 34784
d0eafa17c727
parent 34779
98c540811600
child 34785
99bcdb44c75f
equal deleted inserted replaced
34783:cefe6df8c6c6 34784:d0eafa17c727
378 #endif 378 #endif
379 379
380 void * 380 void *
381 purple_perl_data_from_sv(GType type, SV *sv) 381 purple_perl_data_from_sv(GType type, SV *sv)
382 { 382 {
383 if (type == G_TYPE_BOOLEAN) 383
384 return (void *)SvIV(sv); 384 switch (type) {
385 else if (type == G_TYPE_INT) 385 case G_TYPE_BOOLEAN: return (void *)SvIV(sv);
386 return (void *)SvIV(sv); 386 case G_TYPE_INT: return (void *)SvIV(sv);
387 else if (type == G_TYPE_UINT) 387 case G_TYPE_UINT: return (void *)SvUV(sv);
388 return (void *)SvUV(sv); 388 case G_TYPE_LONG: return (void *)SvIV(sv);
389 else if (type == G_TYPE_LONG) 389 case G_TYPE_ULONG: return (void *)SvUV(sv);
390 return (void *)SvIV(sv); 390 case G_TYPE_INT64: return (void *)SvIV(sv);
391 else if (type == G_TYPE_ULONG) 391 case G_TYPE_UINT64: return (void *)SvUV(sv);
392 return (void *)SvUV(sv); 392 case G_TYPE_STRING: return g_strdup(SvPVutf8_nolen(sv));
393 else if (type == G_TYPE_INT64) 393 case G_TYPE_POINTER: return (void *)SvIV(sv);
394 return (void *)SvIV(sv); 394 case G_TYPE_BOXED: return (void *)SvIV(sv);
395 else if (type == G_TYPE_UINT64) 395
396 return (void *)SvUV(sv); 396 default:
397 else if (type == G_TYPE_STRING) 397 return NULL;
398 return g_strdup(SvPVutf8_nolen(sv)); 398 }
399 else if (type == G_TYPE_POINTER)
400 return (void *)SvIV(sv);
401 else if (type == G_TYPE_BOXED)
402 return (void *)SvIV(sv);
403 399
404 return NULL; 400 return NULL;
405 } 401 }
406 402
407 static SV * 403 static SV *
408 purple_perl_sv_from_purple_type(const GType type, void *arg) 404 purple_perl_sv_from_purple_type(const GType type, void *arg)
409 { 405 {
410 const char *stash = "Purple"; /* ? */ 406 const char *stash = "Purple"; /* ? */
411 407
412 switch (purple_value_get_subtype(value)) { 408 if (type == PURPLE_TYPE_ACCOUNT)
413 case PURPLE_SUBTYPE_ACCOUNT: 409 stash = "Purple::Account";
414 stash = "Purple::Account"; 410 else if (type == PURPLE_TYPE_BUDDY_LIST)
415 break; 411 stash = "Purple::BuddyList";
416 case PURPLE_SUBTYPE_BLIST: 412 else if (type == PURPLE_TYPE_BUDDY)
417 stash = "Purple::BuddyList"; 413 stash = "Purple::BuddyList::Buddy";
418 break; 414 else if (type == PURPLE_TYPE_GROUP)
419 case PURPLE_SUBTYPE_BLIST_BUDDY: 415 stash = "Purple::BuddyList::Group";
420 stash = "Purple::BuddyList::Buddy"; 416 else if (type == PURPLE_TYPE_CHAT)
421 break; 417 stash = "Purple::BuddyList::Chat";
422 case PURPLE_SUBTYPE_BLIST_GROUP: 418 else if (type == PURPLE_TYPE_BUDDY_ICON)
423 stash = "Purple::BuddyList::Group"; 419 stash = "Purple::Buddy::Icon";
424 break; 420 else if (type == PURPLE_TYPE_CONNECTION)
425 case PURPLE_SUBTYPE_BLIST_CHAT: 421 stash = "Purple::Connection";
426 stash = "Purple::BuddyList::Chat"; 422 else if (type == PURPLE_TYPE_CONVERSATION)
427 break; 423 stash = "Purple::Conversation";
428 case PURPLE_SUBTYPE_BUDDY_ICON: 424 else if (type == PURPLE_TYPE_PLUGIN)
429 stash = "Purple::Buddy::Icon"; 425 stash = "Purple::Plugin";
430 break; 426 else if (type == PURPLE_TYPE_BLIST_NODE)
431 case PURPLE_SUBTYPE_CONNECTION: 427 stash = "Purple::BuddyList::Node";
432 stash = "Purple::Connection"; 428 else if (type == PURPLE_TYPE_CIPHER)
433 break; 429 stash = "Purple::Cipher";
434 case PURPLE_SUBTYPE_CONVERSATION: 430 else if (type == PURPLE_TYPE_STATUS) /* TODO */
435 stash = "Purple::Conversation"; 431 stash = "Purple::Status";
436 break; 432 else if (type == PURPLE_TYPE_SAVEDSTATUS) /* TODO */
437 case PURPLE_SUBTYPE_PLUGIN: 433 stash = "Purple::SavedStatus";
438 stash = "Purple::Plugin"; 434 else if (type == PURPLE_TYPE_LOG) /* TODO */
439 break; 435 stash = "Purple::Log";
440 case PURPLE_SUBTYPE_BLIST_NODE: 436 else if (type == PURPLE_TYPE_XFER) /* TODO */
441 stash = "Purple::BuddyList::Node"; 437 stash = "Purple::Xfer";
442 break; 438 else if (type == PURPLE_TYPE_XMLNODE) /* TODO */
443 case PURPLE_SUBTYPE_CIPHER: 439 stash = "Purple::XMLNode";
444 stash = "Purple::Cipher"; 440 else if (type == PURPLE_TYPE_USERINFO) /* TODO */
445 break; 441 stash = "Purple::NotifyUserInfo";
446 case PURPLE_SUBTYPE_STATUS: 442 else if (type == PURPLE_TYPE_STORED_IMAGE) /* TODO */
447 stash = "Purple::Status"; 443 stash = "Purple::StoredImage";
448 break; 444 else if (type == PURPLE_TYPE_CERTIFICATEPOOL) /* TODO */
449 case PURPLE_SUBTYPE_SAVEDSTATUS: 445 stash = "Purple::Certificate::Pool";
450 stash = "Purple::SavedStatus";
451 break;
452 case PURPLE_SUBTYPE_LOG:
453 stash = "Purple::Log";
454 break;
455 case PURPLE_SUBTYPE_XFER:
456 stash = "Purple::Xfer";
457 break;
458 case PURPLE_SUBTYPE_XMLNODE:
459 stash = "Purple::XMLNode";
460 break;
461 case PURPLE_SUBTYPE_USERINFO:
462 stash = "Purple::NotifyUserInfo";
463 break;
464 case PURPLE_SUBTYPE_STORED_IMAGE:
465 stash = "Purple::StoredImage";
466 break;
467 case PURPLE_SUBTYPE_CERTIFICATEPOOL:
468 stash = "Purple::Certificate::Pool";
469 break;
470 case PURPLE_SUBTYPE_UNKNOWN:
471 stash = "Purple::Unknown";
472 break;
473 }
474 446
475 return sv_2mortal(purple_perl_bless_object(arg, stash)); 447 return sv_2mortal(purple_perl_bless_object(arg, stash));
476 } 448 }
477 449
478 SV * 450 SV *

mercurial