… | |
… | |
58 | |
58 | |
59 | typedef object_thawer &object_thawer_ref; |
59 | typedef object_thawer &object_thawer_ref; |
60 | typedef object_freezer &object_freezer_ref; |
60 | typedef object_freezer &object_freezer_ref; |
61 | |
61 | |
62 | typedef std::string std__string; |
62 | typedef std::string std__string; |
63 | |
|
|
64 | #if IVSIZE >= 8 |
|
|
65 | typedef IV val64; |
|
|
66 | # define newSVval64 newSViv |
|
|
67 | # define SvVAL64 SvIV |
|
|
68 | #else |
|
|
69 | typedef double val64; |
|
|
70 | # define newSVval64 newSVnv |
|
|
71 | # define SvVAL64 SvNV |
|
|
72 | #endif |
|
|
73 | |
63 | |
74 | static PerlInterpreter *perl; |
64 | static PerlInterpreter *perl; |
75 | |
65 | |
76 | tstamp NOW, runtime; |
66 | tstamp NOW, runtime; |
77 | |
67 | |
… | |
… | |
444 | inline SV *to_sv (living & v) { return to_sv (&v); } |
434 | inline SV *to_sv (living & v) { return to_sv (&v); } |
445 | |
435 | |
446 | inline SV *to_sv (const std::string & v) { return newSVpvn (v.data (), v.size ()); } |
436 | inline SV *to_sv (const std::string & v) { return newSVpvn (v.data (), v.size ()); } |
447 | inline SV *to_sv (const treasurelist *v) { return to_sv (v->name); } |
437 | inline SV *to_sv (const treasurelist *v) { return to_sv (v->name); } |
448 | |
438 | |
449 | inline SV *to_sv (UUID v) |
439 | inline SV *to_sv (UUID v) { return newSVpv (v.c_str (), 0); } |
450 | { |
|
|
451 | char buf[128]; |
|
|
452 | snprintf (buf, 128, "<1.%" PRIx64 ">", v.seq); |
|
|
453 | return newSVpv (buf, 0); |
|
|
454 | } |
|
|
455 | |
440 | |
456 | inline void sv_to (SV *sv, shstr &v) { v = SvOK (sv) ? SvPVutf8_nolen (sv) : 0; } |
441 | inline void sv_to (SV *sv, shstr &v) { v = SvOK (sv) ? SvPVutf8_nolen (sv) : 0; } |
457 | inline void sv_to (SV *sv, char * &v) { free (v); v = SvOK (sv) ? strdup (SvPV_nolen (sv)) : 0; } |
442 | inline void sv_to (SV *sv, char * &v) { free (v); v = SvOK (sv) ? strdup (SvPV_nolen (sv)) : 0; } |
458 | inline void sv_to (SV *sv, bool &v) { v = SvIV (sv); } |
443 | inline void sv_to (SV *sv, bool &v) { v = SvIV (sv); } |
459 | inline void sv_to (SV *sv, signed char &v) { v = SvIV (sv); } |
444 | inline void sv_to (SV *sv, signed char &v) { v = SvIV (sv); } |
… | |
… | |
501 | v.assign (data, len); |
486 | v.assign (data, len); |
502 | } |
487 | } |
503 | |
488 | |
504 | inline void sv_to (SV *sv, UUID &v) |
489 | inline void sv_to (SV *sv, UUID &v) |
505 | { |
490 | { |
506 | unsigned int version; |
491 | if (!v.parse (SvPV_nolen (sv))) |
507 | |
|
|
508 | if (2 != sscanf (SvPV_nolen (sv), "<%d.%" SCNx64 ">", &version, &v.seq) || 1 != version) |
|
|
509 | croak ("unparsable uuid: %s", SvPV_nolen (sv)); |
492 | croak ("unparsable uuid: %s", SvPV_nolen (sv)); |
510 | } |
493 | } |
511 | |
494 | |
512 | inline void sv_to (SV *sv, object::flags_t::reference v) { v = SvTRUE (sv); } |
495 | inline void sv_to (SV *sv, object::flags_t::reference v) { v = SvTRUE (sv); } |
513 | |
496 | |
… | |
… | |
1534 | } |
1517 | } |
1535 | |
1518 | |
1536 | SvCUR_set (data_sv, dst - SvPVX (data_sv)); |
1519 | SvCUR_set (data_sv, dst - SvPVX (data_sv)); |
1537 | } |
1520 | } |
1538 | |
1521 | |
1539 | void evthread_start () |
1522 | void evthread_start (int aiofd) |
1540 | |
1523 | |
1541 | void cede_to_tick () |
1524 | void cede_to_tick () |
1542 | CODE: |
1525 | CODE: |
1543 | coroapi::cede_to_tick (); |
1526 | coroapi::cede_to_tick (); |
1544 | |
1527 | |
… | |
… | |
1748 | if (atnr >= 0 && atnr < NROFATTACKS) |
1731 | if (atnr >= 0 && atnr < NROFATTACKS) |
1749 | RETVAL = newSVpv (resist_plus[atnr], 0); |
1732 | RETVAL = newSVpv (resist_plus[atnr], 0); |
1750 | else |
1733 | else |
1751 | XSRETURN_UNDEF; |
1734 | XSRETURN_UNDEF; |
1752 | OUTPUT: RETVAL |
1735 | OUTPUT: RETVAL |
|
|
1736 | |
|
|
1737 | UUID |
|
|
1738 | uuid_cur () |
|
|
1739 | CODE: |
|
|
1740 | RETVAL = UUID::cur; |
|
|
1741 | OUTPUT: |
|
|
1742 | RETVAL |
|
|
1743 | |
|
|
1744 | UUID |
|
|
1745 | uuid_gen () |
|
|
1746 | CODE: |
|
|
1747 | RETVAL = UUID::gen (); |
|
|
1748 | OUTPUT: |
|
|
1749 | RETVAL |
|
|
1750 | |
|
|
1751 | val64 |
|
|
1752 | uuid_seq (UUID uuid) |
|
|
1753 | CODE: |
|
|
1754 | RETVAL = uuid.seq; |
|
|
1755 | OUTPUT: |
|
|
1756 | RETVAL |
|
|
1757 | |
|
|
1758 | UUID |
|
|
1759 | uuid_str (val64 seq) |
|
|
1760 | CODE: |
|
|
1761 | RETVAL.seq = seq; |
|
|
1762 | OUTPUT: |
|
|
1763 | RETVAL |
|
|
1764 | |
|
|
1765 | void |
|
|
1766 | coin_names () |
|
|
1767 | PPCODE: |
|
|
1768 | EXTEND (SP, NUM_COINS); |
|
|
1769 | for (int i = 0; i < NUM_COINS; ++i) |
|
|
1770 | PUSHs (sv_2mortal (newSVpv (coins [i], 0))); |
|
|
1771 | |
|
|
1772 | void |
|
|
1773 | coin_archetypes () |
|
|
1774 | PPCODE: |
|
|
1775 | EXTEND (SP, NUM_COINS); |
|
|
1776 | for (int i = 0; i < NUM_COINS; ++i) |
|
|
1777 | PUSHs (sv_2mortal (to_sv (archetype::find (coins [i])))); |
1753 | |
1778 | |
1754 | bool |
1779 | bool |
1755 | load_resource_file (octet_string filename) |
1780 | load_resource_file (octet_string filename) |
1756 | |
1781 | |
1757 | MODULE = cf PACKAGE = cf::attachable |
1782 | MODULE = cf PACKAGE = cf::attachable |