… | |
… | |
349 | inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); } |
349 | inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); } |
350 | |
350 | |
351 | inline SV *to_sv (object & v) { return to_sv (&v); } |
351 | inline SV *to_sv (object & v) { return to_sv (&v); } |
352 | inline SV *to_sv (living & v) { return to_sv (&v); } |
352 | inline SV *to_sv (living & v) { return to_sv (&v); } |
353 | |
353 | |
354 | inline SV *to_sv (facetile * v) { return to_sv (v->name); } |
354 | //inline SV *to_sv (faceinfo * v) { return to_sv (v->name); } |
355 | inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } |
355 | inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } |
|
|
356 | inline SV *to_sv (std::string & v) { return newSVpvn (v.data (), v.size ()); } |
356 | |
357 | |
357 | inline SV *to_sv (UUID v) |
358 | inline SV *to_sv (UUID v) |
358 | { |
359 | { |
359 | char buf[128]; |
360 | char buf[128]; |
360 | snprintf (buf, 128, "<1.%" PRIx64 ">", v.seq); |
361 | snprintf (buf, 128, "<1.%" PRIx64 ">", v.seq); |
… | |
… | |
384 | inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); } |
385 | inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); } |
385 | inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); } |
386 | inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); } |
386 | inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); } |
387 | inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); } |
387 | inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); } |
388 | inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); } |
388 | |
389 | |
389 | inline void sv_to (SV *sv, facetile * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; } |
390 | //inline void sv_to (SV *sv, faceinfo * &v) { v = &faces [face_find (SvPV_nolen (sv), 0)]; } |
390 | inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); } |
391 | inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); } |
391 | |
392 | |
392 | template<class T> |
393 | template<class T> |
393 | inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; } |
394 | inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; } |
394 | |
395 | |
… | |
… | |
398 | inline void sv_to (SV *sv, rangetype &v) { v = (rangetype) SvIV (sv); } |
399 | inline void sv_to (SV *sv, rangetype &v) { v = (rangetype) SvIV (sv); } |
399 | inline void sv_to (SV *sv, bowtype_t &v) { v = (bowtype_t) SvIV (sv); } |
400 | inline void sv_to (SV *sv, bowtype_t &v) { v = (bowtype_t) SvIV (sv); } |
400 | inline void sv_to (SV *sv, petmode_t &v) { v = (petmode_t) SvIV (sv); } |
401 | inline void sv_to (SV *sv, petmode_t &v) { v = (petmode_t) SvIV (sv); } |
401 | inline void sv_to (SV *sv, usekeytype &v) { v = (usekeytype) SvIV (sv); } |
402 | inline void sv_to (SV *sv, usekeytype &v) { v = (usekeytype) SvIV (sv); } |
402 | inline void sv_to (SV *sv, unapplymode &v) { v = (unapplymode) SvIV (sv); } |
403 | inline void sv_to (SV *sv, unapplymode &v) { v = (unapplymode) SvIV (sv); } |
|
|
404 | |
|
|
405 | inline void sv_to (SV *sv, std::string &v) |
|
|
406 | { |
|
|
407 | STRLEN len; |
|
|
408 | char *data = SvPVbyte (sv, len); |
|
|
409 | v.assign (data, len); |
|
|
410 | } |
403 | |
411 | |
404 | inline void sv_to (SV *sv, UUID &v) |
412 | inline void sv_to (SV *sv, UUID &v) |
405 | { |
413 | { |
406 | unsigned int version; |
414 | unsigned int version; |
407 | |
415 | |
… | |
… | |
2506 | char *buf = SvPVbyte (packet, len); |
2514 | char *buf = SvPVbyte (packet, len); |
2507 | |
2515 | |
2508 | THIS->send_packet (buf, len); |
2516 | THIS->send_packet (buf, len); |
2509 | } |
2517 | } |
2510 | |
2518 | |
|
|
2519 | MODULE = cf PACKAGE = cf::face PREFIX = face_ |
|
|
2520 | |
|
|
2521 | INCLUDE: $PERL $srcdir/genacc faceset ../include/face.h | |
|
|
2522 | |
|
|
2523 | int face_find (const char *name, int defidx = 0) |
|
|
2524 | |
|
|
2525 | int alloc (const char *name) |
|
|
2526 | CODE: |
|
|
2527 | { |
|
|
2528 | do |
|
|
2529 | { |
|
|
2530 | RETVAL = faces.size (); |
|
|
2531 | faces.resize (RETVAL + 1); |
|
|
2532 | face32.resize (RETVAL + 1); |
|
|
2533 | face64.resize (RETVAL + 1); |
|
|
2534 | } |
|
|
2535 | while (!RETVAL); // crude way to leave index 0 |
|
|
2536 | |
|
|
2537 | faces [RETVAL].name = name; |
|
|
2538 | facehash.insert (std::make_pair (faces [RETVAL].name, RETVAL)); |
|
|
2539 | |
|
|
2540 | if (!strcmp (name, BLANK_FACE_NAME)) blank_face = RETVAL; |
|
|
2541 | if (!strcmp (name, EMPTY_FACE_NAME)) empty_face = RETVAL; |
|
|
2542 | } |
|
|
2543 | OUTPUT: RETVAL |
|
|
2544 | |
|
|
2545 | void set (int idx, int visibility, int magicmap) |
|
|
2546 | CODE: |
|
|
2547 | faces [idx].visibility = visibility; |
|
|
2548 | faces [idx].magicmap = magicmap; |
|
|
2549 | |
|
|
2550 | void set_data (int idx, int faceset, SV *data, SV *chksum) |
|
|
2551 | CODE: |
|
|
2552 | facedata *d = face_data (idx, faceset); |
|
|
2553 | assert (sv_len (chksum) == CHKSUM_SIZE); |
|
|
2554 | sv_to (data, d->data); memcpy (d->chksum, SvPVbyte_nolen (chksum), CHKSUM_SIZE); |
|
|
2555 | |