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

Comparing deliantra/server/plugins/cfperl/cfperl.xs (file contents):
Revision 1.18 by root, Wed Feb 8 06:15:13 2006 UTC vs.
Revision 1.21 by root, Fri Feb 10 04:35:33 2006 UTC

112} 112}
113 113
114static SV * 114static SV *
115newSVptr (void *ptr, const char *klass) 115newSVptr (void *ptr, const char *klass)
116{ 116{
117 SV *sv;
118
117 if (!ptr) 119 if (!ptr)
118 return &PL_sv_undef; 120 return &PL_sv_undef;
119 121
120 HV *hv = newHV (); 122 sv = newSV (0);
121 sv_magic ((SV *)hv, 0, PERL_MAGIC_ext, (char *)ptr, 0); 123 sv_magic (sv, 0, PERL_MAGIC_ext, (char *)ptr, 0);
122 return sv_bless (newRV_noinc ((SV *)hv), gv_stashpv (klass, 1)); 124 return sv_bless (newRV_noinc (sv), gv_stashpv (klass, 1));
123} 125}
124 126
125static SV * 127static SV *
126newSVptr_cached (void *ptr, const char *klass) 128newSVptr_cached (void *ptr, const char *klass)
127{ 129{
134 136
135 if (he) 137 if (he)
136 sv = *he; 138 sv = *he;
137 else 139 else
138 { 140 {
139 sv = newSVptr (ptr, klass); 141 HV *hv = newHV ();
142 sv_magic ((SV *)hv, 0, PERL_MAGIC_ext, (char *)ptr, 0);
143 sv = sv_bless (newRV_noinc ((SV *)hv), gv_stashpv (klass, 1));
140 hv_store (obj_cache, (char *)&ptr, sizeof (ptr), sv, 0); 144 hv_store (obj_cache, (char *)&ptr, sizeof (ptr), sv, 0);
141 } 145 }
142 146
143 return newSVsv (sv); 147 return newSVsv (sv);
144} 148}
522 526
523 va_end (args); 527 va_end (args);
524 528
525 if (context.event_code == EVENT_FREE_OB) 529 if (context.event_code == EVENT_FREE_OB)
526 { 530 {
527 SV **svp = hv_fetch (obj_cache, (char *)&context.activator, sizeof (void *), 0); 531 SV *sv = hv_delete (obj_cache, (char *)&context.activator, sizeof (void *), 0);
528 532
529 if (svp) 533 if (sv)
530 clearSVptr (*svp); 534 clearSVptr (sv);
531 } 535 }
532 else 536 else
533 inject_event ("cf::inject_global_event", &context); 537 inject_event ("cf::inject_global_event", &context);
534 538
535 rv = context.returnvalue; 539 rv = context.returnvalue;
1176int cf_object_get_flag (object *op, int flag) 1180int cf_object_get_flag (object *op, int flag)
1177 ALIAS: flag = 0 1181 ALIAS: flag = 0
1178 1182
1179void cf_object_set_flag (object *op, int flag, int value) 1183void cf_object_set_flag (object *op, int flag, int value)
1180 1184
1181void cf_object_move (object *op, int dir, object *originator) 1185void cf_object_move (object *op, int dir, object *originator = op)
1182 1186
1183void cf_object_apply (object *op, object *author, int flags = 0) 1187void cf_object_apply (object *op, object *author, int flags = 0)
1184 1188
1185void cf_object_apply_below (object *op) 1189void cf_object_apply_below (object *op)
1186 1190
1192 1196
1193int cf_object_transfer (object *op, int x, int y, int r, object *orig) 1197int cf_object_transfer (object *op, int x, int y, int r, object *orig)
1194 1198
1195int cf_object_change_map (object *op, int x, int y, mapstruct *map) 1199int cf_object_change_map (object *op, int x, int y, mapstruct *map)
1196 1200
1197object *cf_object_clone (object *op, int clonetype) 1201object *cf_object_clone (object *op, int clonetype = 0)
1198 1202
1199int cf_object_pay_item (object *op, object *buyer) 1203int cf_object_pay_item (object *op, object *buyer)
1200 1204
1201int cf_object_pay_amount (object *op, double amount) 1205int cf_object_pay_amount (object *op, double amount)
1202 1206

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines