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

Comparing Convert-Scalar/Scalar.xs (file contents):
Revision 1.6 by root, Fri Nov 26 21:05:13 2004 UTC vs.
Revision 1.10 by root, Thu Aug 18 19:07:04 2011 UTC

1#include "EXTERN.h" 1#include "EXTERN.h"
2#include "perl.h" 2#include "perl.h"
3#include "XSUB.h" 3#include "XSUB.h"
4
5#if PERL_VERSION < 7
6# define is_utf8_string(s,l) (croak ("utf8_valid requires perl 5.7 or higher"), 0)
7#endif
8 4
9#define RETCOPY(sv) \ 5#define RETCOPY(sv) \
10 if (GIMME_V != G_VOID) \ 6 if (GIMME_V != G_VOID) \
11 { \ 7 { \
12 dXSTARG; \ 8 dXSTARG; \
15 PUSHs (TARG); \ 11 PUSHs (TARG); \
16 } 12 }
17 13
18MODULE = Convert::Scalar PACKAGE = Convert::Scalar 14MODULE = Convert::Scalar PACKAGE = Convert::Scalar
19 15
20int 16bool
21utf8(scalar,mode=0) 17utf8 (SV *scalar, SV *mode = NO_INIT)
22 SV * scalar
23 SV * mode
24 PROTOTYPE: $;$ 18 PROTOTYPE: $;$
25 CODE: 19 CODE:
26 SvGETMAGIC (scalar); 20 SvGETMAGIC (scalar);
27 RETVAL = !!SvUTF8 (scalar); 21 RETVAL = !!SvUTF8 (scalar);
28 if (items > 1) 22 if (items > 1)
36 } 30 }
37 OUTPUT: 31 OUTPUT:
38 RETVAL 32 RETVAL
39 33
40void 34void
41utf8_on(scalar) 35utf8_on (SV *scalar)
42 SV * scalar
43 PROTOTYPE: $ 36 PROTOTYPE: $
44 PPCODE: 37 PPCODE:
45 if (SvREADONLY (scalar)) 38 if (SvREADONLY (scalar))
46 croak ("Convert::Scalar::utf8_on called on read only scalar"); 39 croak ("Convert::Scalar::utf8_on called on read only scalar");
47 40
48 SvGETMAGIC (scalar); 41 SvGETMAGIC (scalar);
49 SvUTF8_on (scalar); 42 SvUTF8_on (scalar);
50 RETCOPY (scalar); 43 RETCOPY (scalar);
51 44
52void 45void
53utf8_off(scalar) 46utf8_off (SV *scalar)
54 SV * scalar
55 PROTOTYPE: $ 47 PROTOTYPE: $
56 PPCODE: 48 PPCODE:
57 if (SvREADONLY (scalar)) 49 if (SvREADONLY (scalar))
58 croak ("Convert::Scalar::utf8_off called on read only scalar"); 50 croak ("Convert::Scalar::utf8_off called on read only scalar");
59 51
60 SvGETMAGIC (scalar); 52 SvGETMAGIC (scalar);
61 SvUTF8_off (scalar); 53 SvUTF8_off (scalar);
62 RETCOPY (scalar); 54 RETCOPY (scalar);
63 55
64int 56int
65utf8_valid(scalar) 57utf8_valid (SV *scalar)
66 SV * scalar
67 PROTOTYPE: $ 58 PROTOTYPE: $
68 CODE: 59 CODE:
69 STRLEN len; 60 STRLEN len;
70 char *str = SvPV (scalar, len); 61 char *str = SvPV (scalar, len);
71 RETVAL = !!is_utf8_string (str, len); 62 RETVAL = !!is_utf8_string (str, len);
72 OUTPUT: 63 OUTPUT:
73 RETVAL 64 RETVAL
74 65
75void 66void
76utf8_upgrade(scalar) 67utf8_upgrade (SV *scalar)
77 SV * scalar
78 PROTOTYPE: $ 68 PROTOTYPE: $
79 PPCODE: 69 PPCODE:
80 if (SvREADONLY (scalar)) 70 if (SvREADONLY (scalar))
81 croak ("Convert::Scalar::utf8_upgrade called on read only scalar"); 71 croak ("Convert::Scalar::utf8_upgrade called on read only scalar");
82 72
83 sv_utf8_upgrade(scalar); 73 sv_utf8_upgrade(scalar);
84 RETCOPY (scalar); 74 RETCOPY (scalar);
85 75
86bool 76bool
87utf8_downgrade(scalar, fail_ok = 0) 77utf8_downgrade (SV *scalar, bool fail_ok = 0)
88 SV * scalar
89 bool fail_ok
90 PROTOTYPE: $;$ 78 PROTOTYPE: $;$
91 CODE: 79 CODE:
92 if (SvREADONLY (scalar)) 80 if (SvREADONLY (scalar))
93 croak ("Convert::Scalar::utf8_downgrade called on read only scalar"); 81 croak ("Convert::Scalar::utf8_downgrade called on read only scalar");
94 82
95 RETVAL = sv_utf8_downgrade (scalar, fail_ok); 83 RETVAL = !!sv_utf8_downgrade (scalar, fail_ok);
96 OUTPUT: 84 OUTPUT:
97 RETVAL 85 RETVAL
98 86
99void 87void
100utf8_encode(scalar) 88utf8_encode (SV *scalar)
101 SV * scalar
102 PROTOTYPE: $ 89 PROTOTYPE: $
103 PPCODE: 90 PPCODE:
104 if (SvREADONLY (scalar)) 91 if (SvREADONLY (scalar))
105 croak ("Convert::Scalar::utf8_encode called on read only scalar"); 92 croak ("Convert::Scalar::utf8_encode called on read only scalar");
106 93
107 sv_utf8_encode (scalar); 94 sv_utf8_encode (scalar);
108 RETCOPY (scalar); 95 RETCOPY (scalar);
109 96
110UV 97UV
111utf8_length(scalar) 98utf8_length (SV *scalar)
112 SV * scalar
113 PROTOTYPE: $ 99 PROTOTYPE: $
114 CODE: 100 CODE:
115 RETVAL = (UV) utf8_length (SvPV_nolen (scalar), SvEND (scalar)); 101 RETVAL = (UV) utf8_length (SvPV_nolen (scalar), SvEND (scalar));
116 OUTPUT: 102 OUTPUT:
117 RETVAL 103 RETVAL
118 104
105bool
106readonly (SV *scalar, SV *on = NO_INIT)
107 PROTOTYPE: $;$
108 CODE:
109 RETVAL = SvREADONLY (scalar);
110 if (items > 1)
111 {
112 if (SvTRUE (on))
113 SvREADONLY_on (scalar);
114 else
115 SvREADONLY_off (scalar);
116 }
117 OUTPUT:
118 RETVAL
119
119void 120void
121readonly_on (SV *scalar)
122 PROTOTYPE: $
123 CODE:
124 SvREADONLY_on (scalar);
125
126void
127readonly_off (SV *scalar)
128 PROTOTYPE: $
129 CODE:
130 SvREADONLY_off (scalar);
131
132void
120unmagic(scalar, type) 133unmagic (SV *scalar, char type)
121 SV * scalar
122 char type
123 PROTOTYPE: $ 134 PROTOTYPE: $
124 CODE: 135 CODE:
125 sv_unmagic (scalar, type); 136 sv_unmagic (scalar, type);
126 137
127void 138void
128weaken(scalar) 139weaken (SV *scalar)
129 SV * scalar
130 PROTOTYPE: $ 140 PROTOTYPE: $
131 CODE: 141 CODE:
132 sv_rvweaken (scalar); 142 sv_rvweaken (scalar);
133 143
134void 144void
135taint(scalar) 145taint (SV *scalar)
136 SV * scalar
137 PROTOTYPE: $ 146 PROTOTYPE: $
138 CODE: 147 CODE:
139 SvTAINTED_on (scalar); 148 SvTAINTED_on (scalar);
140 149
141int 150bool
142tainted(scalar) 151tainted (SV *scalar)
143 SV * scalar
144 PROTOTYPE: $ 152 PROTOTYPE: $
145 CODE: 153 CODE:
146 RETVAL = SvTAINTED (scalar); 154 RETVAL = !!SvTAINTED (scalar);
147 OUTPUT: 155 OUTPUT:
148 RETVAL 156 RETVAL
149 157
150void 158void
151untaint(scalar) 159untaint (SV *scalar)
152 SV * scalar
153 PROTOTYPE: $ 160 PROTOTYPE: $
154 CODE: 161 CODE:
155 SvTAINTED_off (scalar); 162 SvTAINTED_off (scalar);
156 163
164STRLEN
165len (SV *scalar)
166 PROTOTYPE: $
167 CODE:
168 if (SvTYPE (scalar) < SVt_PV)
169 XSRETURN_UNDEF;
170 RETVAL = SvLEN (scalar);
171 OUTPUT:
172 RETVAL
173
157void 174void
158grow(scalar,newlen) 175grow (SV *scalar, STRLEN newlen)
159 SV * scalar
160 U32 newlen
161 PROTOTYPE: $$ 176 PROTOTYPE: $$
162 PPCODE: 177 PPCODE:
163 sv_grow (scalar, newlen); 178 sv_grow (scalar, newlen);
164 if (GIMME_V != G_VOID) 179 if (GIMME_V != G_VOID)
165 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar))); 180 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar)));
166 181
182void
183extend (SV *scalar, STRLEN addlen)
184 PROTOTYPE: $$
185 PPCODE:
186{
187 if (SvTYPE (scalar) < SVt_PV)
188 sv_upgrade (scalar, SVt_PV);
189
190 if (SvCUR (scalar) + addlen >= SvLEN (scalar))
191 {
192 STRLEN l = SvLEN (scalar);
193 STRLEN o = SvCUR (scalar) + addlen >= 4096 ? sizeof (void *) * 4 : 0;
194
195 if (l < 64)
196 l = 64;
197
198 /* for big sizes, leave a bit of space for malloc management, and assume 4kb or smaller pages */
199 addlen += o;
200
201 while (SvCUR (scalar) + addlen >= l)
202 l <<= 1;
203
204 l -= o;
205
206 sv_grow (scalar, l);
207 }
208
209 if (GIMME_V != G_VOID)
210 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar)));
211}
212
167int 213int
168refcnt(scalar,newrefcnt=0) 214refcnt (SV *scalar, U32 newrefcnt = NO_INIT)
169 SV * scalar
170 int newrefcnt
171 PROTOTYPE: $;$ 215 PROTOTYPE: $;$
172 ALIAS: 216 ALIAS:
173 refcnt_rv = 1 217 refcnt_rv = 1
174 CODE: 218 CODE:
175 if (ix) 219 if (ix)
182 SvREFCNT (scalar) = newrefcnt; 226 SvREFCNT (scalar) = newrefcnt;
183 OUTPUT: 227 OUTPUT:
184 RETVAL 228 RETVAL
185 229
186void 230void
187refcnt_inc(scalar) 231refcnt_inc (SV *scalar)
188 SV * scalar
189 ALIAS: 232 ALIAS:
190 refcnt_inc_rv = 1 233 refcnt_inc_rv = 1
191 PROTOTYPE: $ 234 PROTOTYPE: $
192 CODE: 235 CODE:
193 if (ix) 236 if (ix)
196 scalar = SvRV (scalar); 239 scalar = SvRV (scalar);
197 } 240 }
198 SvREFCNT_inc (scalar); 241 SvREFCNT_inc (scalar);
199 242
200void 243void
201refcnt_dec(scalar) 244refcnt_dec (SV *scalar)
202 SV * scalar
203 ALIAS: 245 ALIAS:
204 refcnt_dec_rv = 1 246 refcnt_dec_rv = 1
205 PROTOTYPE: $ 247 PROTOTYPE: $
206 CODE: 248 CODE:
207 if (ix) 249 if (ix)
210 scalar = SvRV (scalar); 252 scalar = SvRV (scalar);
211 } 253 }
212 SvREFCNT_dec (scalar); 254 SvREFCNT_dec (scalar);
213 255
214bool 256bool
215ok(scalar) 257ok (SV *scalar)
216 SV * scalar
217 PROTOTYPE: $ 258 PROTOTYPE: $
218 CODE: 259 CODE:
219 RETVAL = SvOK (scalar); 260 RETVAL = !!SvOK (scalar);
220 OUTPUT: 261 OUTPUT:
221 RETVAL 262 RETVAL
222 263
223bool 264bool
224uok(scalar) 265uok (SV *scalar)
225 SV * scalar
226 PROTOTYPE: $ 266 PROTOTYPE: $
227 CODE: 267 CODE:
228 RETVAL = SvUOK (scalar); 268 RETVAL = !!SvUOK (scalar);
229 OUTPUT: 269 OUTPUT:
230 RETVAL 270 RETVAL
231 271
232bool 272bool
233rok(scalar) 273rok (SV *scalar)
234 SV * scalar
235 PROTOTYPE: $ 274 PROTOTYPE: $
236 CODE: 275 CODE:
237 RETVAL = SvROK (scalar); 276 RETVAL = !!SvROK (scalar);
238 OUTPUT: 277 OUTPUT:
239 RETVAL 278 RETVAL
240 279
241bool 280bool
242pok(scalar) 281pok (SV *scalar)
243 SV * scalar
244 PROTOTYPE: $ 282 PROTOTYPE: $
245 CODE: 283 CODE:
246 RETVAL = SvPOK (scalar); 284 RETVAL = !!SvPOK (scalar);
247 OUTPUT: 285 OUTPUT:
248 RETVAL 286 RETVAL
249 287
250bool 288bool
251nok(scalar) 289nok (SV *scalar)
252 SV * scalar
253 PROTOTYPE: $ 290 PROTOTYPE: $
254 CODE: 291 CODE:
255 RETVAL = SvNOK (scalar); 292 RETVAL = !!SvNOK (scalar);
256 OUTPUT: 293 OUTPUT:
257 RETVAL 294 RETVAL
258 295
259bool 296bool
260niok(scalar) 297niok (SV *scalar)
261 SV * scalar
262 PROTOTYPE: $ 298 PROTOTYPE: $
263 CODE: 299 CODE:
264 RETVAL = SvNIOK (scalar); 300 RETVAL = !!SvNIOK (scalar);
265 OUTPUT: 301 OUTPUT:
266 RETVAL 302 RETVAL
267 303

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines