ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/cfperl.xs
(Generate patch)

Comparing deliantra/server/server/cfperl.xs (file contents):
Revision 1.35 by root, Thu Aug 31 09:19:34 2006 UTC vs.
Revision 1.39 by elmex, Fri Sep 1 17:16:47 2006 UTC

410} 410}
411 411
412#include "kw_hash.h" 412#include "kw_hash.h"
413 413
414object_freezer::object_freezer () 414object_freezer::object_freezer ()
415: dynbuf (128 * 1024, 64 * 1024)
415{ 416{
416 av = newAV (); 417 av = newAV ();
417 // TODO: fast dynbuf implementation... yeah, we need obstacks
418 text = newSV (10 * 1024 * 1024); // only temporarily used, so be generous
419} 418}
420 419
421object_freezer::~object_freezer () 420object_freezer::~object_freezer ()
422{ 421{
423 SvREFCNT_dec (text);
424 SvREFCNT_dec (av); 422 SvREFCNT_dec (av);
425} 423}
426 424
427void object_freezer::put (attachable_base *ext) 425void object_freezer::put (attachable_base *ext)
428{ 426{
431 if (ext->self) 429 if (ext->self)
432 { 430 {
433 int idx = AvFILLp ((AV *)av) + 1; 431 int idx = AvFILLp ((AV *)av) + 1;
434 av_store (av, idx, SvREFCNT_inc (ext->self)); 432 av_store (av, idx, SvREFCNT_inc (ext->self));
435 433
436 sv_catpvf (text, "oid %d\n", idx); 434 add ((void *)"oid ", 4);
435 add ((sint32)idx);
436 add ('\n');
437 } 437 }
438}
439
440void object_freezer::put (keyword k)
441{
442 sv_catpv (text, keyword_str [k]);
443}
444
445void object_freezer::put (const char *v)
446{
447 sv_catpv (text, v);
448}
449
450void object_freezer::put (int v)
451{
452 sv_catpvf (text, "%d\n", v);
453} 438}
454 439
455bool object_freezer::save (const char *filename) 440bool object_freezer::save (const char *filename)
456{ 441{
457 dSP; 442 dSP;
458 ENTER; 443 ENTER;
459 SAVETMPS; 444 SAVETMPS;
460 PUSHMARK (SP); 445 PUSHMARK (SP);
461 EXTEND (SP, 3); 446 EXTEND (SP, 3);
462 PUSHs (sv_2mortal (newSVpv (filename, 0))); 447 PUSHs (sv_2mortal (newSVpv (filename, 0)));
463 PUSHs (sv_2mortal (newRV_inc (text))); 448 PUSHs (sv_2mortal (newRV_noinc (newSVpvn ((char *)linearise (), size ()))));
464 PUSHs (sv_2mortal (newRV_inc ((SV *)av))); 449 PUSHs (sv_2mortal (newRV_inc ((SV *)av)));
465 PUTBACK; 450 PUTBACK;
466 call_pv ("cf::object_freezer_save", G_VOID | G_DISCARD | G_EVAL); 451 call_pv ("cf::object_freezer_save", G_VOID | G_DISCARD | G_EVAL);
467 FREETMPS; 452 FREETMPS;
468 LEAVE; 453 LEAVE;
471int fprintf (object_freezer &freezer, const char *format, ...) 456int fprintf (object_freezer &freezer, const char *format, ...)
472{ 457{
473 va_list ap; 458 va_list ap;
474 459
475 va_start (ap, format); 460 va_start (ap, format);
476 sv_vcatpvfn (freezer.text, format, strlen (format), &ap, 0, 0, 0); 461
462 int len = vsnprintf ((char *)freezer.force (1024), 1024, format, ap);
463
464 if (len >= 0)
465 freezer.alloc (len);
466
477 va_end (ap); 467 va_end (ap);
478} 468}
479 469
480int fputs (const char *s, object_freezer &freezer) 470int fputs (const char *s, object_freezer &freezer)
481{ 471{
482 sv_catpvn (freezer.text, s, strlen (s)); 472 freezer.add (s);
483} 473}
484 474
485object_thawer::object_thawer (const char *filename) 475object_thawer::object_thawer (const char *filename)
486{ 476{
487 av = 0; 477 av = 0;
1298 1288
1299 const_iv (SK_EXP_ADD_SKILL) 1289 const_iv (SK_EXP_ADD_SKILL)
1300 const_iv (SK_EXP_TOTAL) 1290 const_iv (SK_EXP_TOTAL)
1301 const_iv (SK_EXP_NONE) 1291 const_iv (SK_EXP_NONE)
1302 const_iv (SK_SUBTRACT_SKILL_EXP) 1292 const_iv (SK_SUBTRACT_SKILL_EXP)
1293 const_iv (SK_EXP_SKILL_ONLY)
1303 1294
1304 const_iv (SK_LOCKPICKING) 1295 const_iv (SK_LOCKPICKING)
1305 const_iv (SK_HIDING) 1296 const_iv (SK_HIDING)
1306 const_iv (SK_SMITHERY) 1297 const_iv (SK_SMITHERY)
1307 const_iv (SK_BOWYER) 1298 const_iv (SK_BOWYER)
2363 RETVAL 2354 RETVAL
2364 2355
2365 2356
2366MODULE = cf PACKAGE = cf::arch 2357MODULE = cf PACKAGE = cf::arch
2367 2358
2359archetype *find (const char *name)
2360 CODE:
2361 RETVAL = find_archetype (name);
2362 OUTPUT:
2363 RETVAL
2364
2368archetype *first() 2365archetype *first()
2369 PROTOTYPE: 2366 PROTOTYPE:
2370 CODE: 2367 CODE:
2371 RETVAL = first_archetype; 2368 RETVAL = first_archetype;
2372 OUTPUT: RETVAL 2369 OUTPUT: RETVAL

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines