… | |
… | |
182 | |
182 | |
183 | //TODO: |
183 | //TODO: |
184 | inline SV *to_sv (New_Face * v) { return to_sv (v->name); } |
184 | inline SV *to_sv (New_Face * v) { return to_sv (v->name); } |
185 | inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } |
185 | inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } |
186 | |
186 | |
|
|
187 | inline SV *to_sv (UUID v) { |
|
|
188 | char buf[128]; |
|
|
189 | snprintf (buf, 128, "<1,%llx>", (unsigned long long)v.seq + UUID_SKIP * 2); |
|
|
190 | return newSVpv (buf, 0); |
|
|
191 | } |
|
|
192 | |
187 | inline void sv_to (SV *sv, shstr &v) { v = SvOK (sv) ? SvPV_nolen (sv) : 0; } |
193 | inline void sv_to (SV *sv, shstr &v) { v = SvOK (sv) ? SvPV_nolen (sv) : 0; } |
188 | inline void sv_to (SV *sv, char * &v) { free (v); v = SvOK (sv) ? strdup (SvPV_nolen (sv)) : 0; } //TODO: verify that all simple pointers are strdup-managed |
194 | inline void sv_to (SV *sv, char * &v) { free (v); v = SvOK (sv) ? strdup (SvPV_nolen (sv)) : 0; } //TODO: verify that all simple pointers are strdup-managed |
189 | inline void sv_to (SV *sv, bool &v) { v = SvIV (sv); } |
195 | inline void sv_to (SV *sv, bool &v) { v = SvIV (sv); } |
190 | inline void sv_to (SV *sv, signed char &v) { v = SvIV (sv); } |
196 | inline void sv_to (SV *sv, signed char &v) { v = SvIV (sv); } |
191 | inline void sv_to (SV *sv, unsigned char &v) { v = SvIV (sv); } |
197 | inline void sv_to (SV *sv, unsigned char &v) { v = SvIV (sv); } |
… | |
… | |
213 | template<class T> |
219 | template<class T> |
214 | inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; } |
220 | inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; } |
215 | |
221 | |
216 | template<int N> |
222 | template<int N> |
217 | inline void sv_to (SV *sv, char (&v)[N]) { assign (v, SvPV_nolen (sv)); } |
223 | inline void sv_to (SV *sv, char (&v)[N]) { assign (v, SvPV_nolen (sv)); } |
|
|
224 | |
|
|
225 | inline void sv_to (SV *sv, UUID &v) { |
|
|
226 | char *sv_str = SvOK (sv) ? SvPV_nolen (sv) : 0; |
|
|
227 | unsigned int version = 0; |
|
|
228 | unsigned long long seq = 0; |
|
|
229 | |
|
|
230 | if (!sv_str) |
|
|
231 | return; |
|
|
232 | |
|
|
233 | if (2 == sscanf (sv_str, "<%d.%llx>", &version, &seq) && version == 1) |
|
|
234 | { |
|
|
235 | v.seq = seq; |
|
|
236 | } |
|
|
237 | |
|
|
238 | return; |
|
|
239 | } |
218 | |
240 | |
219 | static SV * |
241 | static SV * |
220 | newSVdt_va (va_list &ap, data_type type) |
242 | newSVdt_va (va_list &ap, data_type type) |
221 | { |
243 | { |
222 | SV *sv; |
244 | SV *sv; |