ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/JSON-XS/XS.xs
(Generate patch)

Comparing JSON-XS/XS.xs (file contents):
Revision 1.44 by root, Mon Jun 25 04:08:17 2007 UTC vs.
Revision 1.45 by root, Mon Jun 25 06:57:42 2007 UTC

28#define F_SHRINK 0x00000200UL 28#define F_SHRINK 0x00000200UL
29#define F_ALLOW_BLESSED 0x00000400UL 29#define F_ALLOW_BLESSED 0x00000400UL
30#define F_CONV_BLESSED 0x00000800UL // NYI 30#define F_CONV_BLESSED 0x00000800UL // NYI
31#define F_MAXDEPTH 0xf8000000UL 31#define F_MAXDEPTH 0xf8000000UL
32#define S_MAXDEPTH 27 32#define S_MAXDEPTH 27
33#define F_MAXSIZE 0x01f00000UL
34#define S_MAXSIZE 20
33 35
34#define DEC_DEPTH(flags) (1UL << ((flags & F_MAXDEPTH) >> S_MAXDEPTH)) 36#define DEC_DEPTH(flags) (1UL << ((flags & F_MAXDEPTH) >> S_MAXDEPTH))
37#define DEC_SIZE(flags) (1UL << ((flags & F_MAXSIZE ) >> S_MAXSIZE ))
35 38
36#define F_PRETTY F_INDENT | F_SPACE_BEFORE | F_SPACE_AFTER 39#define F_PRETTY F_INDENT | F_SPACE_BEFORE | F_SPACE_AFTER
37#define F_DEFAULT (9UL << S_MAXDEPTH) 40#define F_DEFAULT (9UL << S_MAXDEPTH)
38 41
39#define INIT_SIZE 32 // initial scalar size to be allocated 42#define INIT_SIZE 32 // initial scalar size to be allocated
1133 SV *sv; 1136 SV *sv;
1134 1137
1135 SvGETMAGIC (string); 1138 SvGETMAGIC (string);
1136 SvUPGRADE (string, SVt_PV); 1139 SvUPGRADE (string, SVt_PV);
1137 1140
1141 if (flags & F_MAXSIZE && SvCUR (string) > DEC_SIZE (flags))
1142 croak ("attempted decode of JSON text of %lu bytes size, but max_size is set to %lu",
1143 (unsigned long)SvCUR (string), (unsigned long)DEC_SIZE (flags));
1144
1138 if (flags & F_UTF8) 1145 if (flags & F_UTF8)
1139 sv_utf8_downgrade (string, 0); 1146 sv_utf8_downgrade (string, 0);
1140 else 1147 else
1141 sv_utf8_upgrade (string); 1148 sv_utf8_upgrade (string);
1142 1149
1276 RETVAL = newSVsv (self); 1283 RETVAL = newSVsv (self);
1277} 1284}
1278 OUTPUT: 1285 OUTPUT:
1279 RETVAL 1286 RETVAL
1280 1287
1288SV *max_size (SV *self, UV max_size = 0)
1289 CODE:
1290{
1291 UV *uv = SvJSON (self);
1292 UV log2 = 0;
1293
1294 if (max_size > 0x80000000UL) max_size = 0x80000000UL;
1295 if (max_size == 1) max_size = 2;
1296
1297 while ((1UL << log2) < max_size)
1298 ++log2;
1299
1300 *uv = *uv & ~F_MAXSIZE | (log2 << S_MAXSIZE);
1301
1302 RETVAL = newSVsv (self);
1303}
1304 OUTPUT:
1305 RETVAL
1306
1281void encode (SV *self, SV *scalar) 1307void encode (SV *self, SV *scalar)
1282 PPCODE: 1308 PPCODE:
1283 XPUSHs (encode_json (scalar, *SvJSON (self))); 1309 XPUSHs (encode_json (scalar, *SvJSON (self)));
1284 1310
1285void decode (SV *self, SV *jsonstr) 1311void decode (SV *self, SV *jsonstr)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines