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.1 by root, Thu Sep 27 18:32:22 2001 UTC vs.
Revision 1.11 by root, Mon Feb 3 03:32:13 2014 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 4
5#if PERL_VERSION < 7 5#define RETCOPY(sv) \
6# define is_utf8_string(s,l) (croak ("utf8_valid requires perl 5.7 or higher"), 0) 6 if (GIMME_V != G_VOID) \
7#endif 7 { \
8 dXSTARG; \
9 sv_setsv (TARG, (sv)); \
10 EXTEND (SP, 1); \
11 PUSHs (TARG); \
12 }
8 13
9MODULE = Convert::Scalar PACKAGE = Convert::Scalar 14MODULE = Convert::Scalar PACKAGE = Convert::Scalar
10 15
11int 16bool
12utf8(scalar,mode=0) 17utf8 (SV *scalar, SV *mode = NO_INIT)
13 SV * scalar
14 SV * mode
15 PROTOTYPE: $;$ 18 PROTOTYPE: $;$
16 CODE: 19 CODE:
17 SvGETMAGIC (scalar); 20 SvGETMAGIC (scalar);
18 RETVAL = !!SvUTF8 (scalar); 21 RETVAL = !!SvUTF8 (scalar);
19 if (items > 1) 22 if (items > 1)
20 { 23 {
24 if (SvREADONLY (scalar))
25 croak ("Convert::Scalar::utf8 called on read only scalar");
21 if (SvTRUE (mode)) 26 if (SvTRUE (mode))
22 SvUTF8_on (scalar); 27 SvUTF8_on (scalar);
23 else 28 else
24 SvUTF8_off (scalar); 29 SvUTF8_off (scalar);
25 } 30 }
26 OUTPUT: 31 OUTPUT:
27 RETVAL 32 RETVAL
28 33
29void 34void
30utf8_on(scalar) 35utf8_on (SV *scalar)
31 SV * scalar
32 PROTOTYPE: $ 36 PROTOTYPE: $
33 PPCODE: 37 PPCODE:
38 if (SvREADONLY (scalar))
39 croak ("Convert::Scalar::utf8_on called on read only scalar");
40
34 SvGETMAGIC (scalar); 41 SvGETMAGIC (scalar);
35 SvUTF8_on (scalar); 42 SvUTF8_on (scalar);
36 if (GIMME_V != G_VOID) 43 RETCOPY (scalar);
37 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar)));
38 44
39void 45void
40utf8_off(scalar) 46utf8_off (SV *scalar)
41 SV * scalar
42 PROTOTYPE: $ 47 PROTOTYPE: $
43 PPCODE: 48 PPCODE:
49 if (SvREADONLY (scalar))
50 croak ("Convert::Scalar::utf8_off called on read only scalar");
51
44 SvGETMAGIC (scalar); 52 SvGETMAGIC (scalar);
45 SvUTF8_off (scalar); 53 SvUTF8_off (scalar);
46 if (GIMME_V != G_VOID) 54 RETCOPY (scalar);
47 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar)));
48 55
49int 56int
50utf8_valid(scalar) 57utf8_valid (SV *scalar)
51 SV * scalar
52 PROTOTYPE: $ 58 PROTOTYPE: $
53 CODE: 59 CODE:
54 STRLEN len; 60 STRLEN len;
55 char *str = SvPV (scalar, len); 61 char *str = SvPV (scalar, len);
56 RETVAL = !!is_utf8_string (str, len); 62 RETVAL = !!is_utf8_string (str, len);
57 OUTPUT: 63 OUTPUT:
58 RETVAL 64 RETVAL
59 65
60void 66void
61utf8_upgrade(scalar) 67utf8_upgrade (SV *scalar)
62 SV * scalar
63 PROTOTYPE: $ 68 PROTOTYPE: $
64 PPCODE: 69 PPCODE:
70 if (SvREADONLY (scalar))
71 croak ("Convert::Scalar::utf8_upgrade called on read only scalar");
72
65 sv_utf8_upgrade(scalar); 73 sv_utf8_upgrade(scalar);
66 if (GIMME_V != G_VOID) 74 RETCOPY (scalar);
67 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar)));
68 75
69bool 76bool
70utf8_downgrade(scalar, fail_ok = 0) 77utf8_downgrade (SV *scalar, bool fail_ok = 0)
71 SV * scalar
72 bool fail_ok
73 PROTOTYPE: $;$ 78 PROTOTYPE: $;$
74 CODE: 79 CODE:
80 if (SvREADONLY (scalar))
81 croak ("Convert::Scalar::utf8_downgrade called on read only scalar");
82
75 RETVAL = sv_utf8_downgrade (scalar, fail_ok); 83 RETVAL = !!sv_utf8_downgrade (scalar, fail_ok);
76 OUTPUT: 84 OUTPUT:
77 RETVAL 85 RETVAL
78 86
79void 87void
80utf8_encode(scalar) 88utf8_encode (SV *scalar)
81 SV * scalar
82 PROTOTYPE: $ 89 PROTOTYPE: $
83 PPCODE: 90 PPCODE:
91 if (SvREADONLY (scalar))
92 croak ("Convert::Scalar::utf8_encode called on read only scalar");
93
84 sv_utf8_encode (scalar); 94 sv_utf8_encode (scalar);
85 if (GIMME_V != G_VOID) 95 RETCOPY (scalar);
86 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar)));
87 96
88UV 97UV
89utf8_length(scalar) 98utf8_length (SV *scalar)
90 SV * scalar
91 PROTOTYPE: $ 99 PROTOTYPE: $
92 CODE: 100 CODE:
93 RETVAL = (UV) sv_len_utf8 (scalar); 101 RETVAL = (UV) utf8_length (SvPV_nolen (scalar), SvEND (scalar));
94 OUTPUT: 102 OUTPUT:
95 RETVAL 103 RETVAL
96 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
97void 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
98unmagic(scalar, type) 133unmagic (SV *scalar, char type)
99 SV * scalar
100 char type
101 PROTOTYPE: $ 134 PROTOTYPE: $$
102 CODE: 135 CODE:
103 sv_unmagic (scalar, type); 136 sv_unmagic (scalar, type);
104 137
105void 138void
106weaken(scalar) 139weaken (SV *scalar)
107 SV * scalar
108 PROTOTYPE: $ 140 PROTOTYPE: $
109 CODE: 141 CODE:
110 sv_rvweaken (scalar); 142 sv_rvweaken (scalar);
111 143
112void 144void
113taint(scalar) 145taint (SV *scalar)
114 SV * scalar
115 PROTOTYPE: $ 146 PROTOTYPE: $
116 CODE: 147 CODE:
117 SvTAINTED_on (scalar); 148 SvTAINTED_on (scalar);
118 149
119int 150bool
120tainted(scalar) 151tainted (SV *scalar)
121 SV * scalar
122 PROTOTYPE: $ 152 PROTOTYPE: $
123 CODE: 153 CODE:
124 RETVAL = SvTAINTED (scalar); 154 RETVAL = !!SvTAINTED (scalar);
125 OUTPUT: 155 OUTPUT:
126 RETVAL 156 RETVAL
127 157
128void 158void
129untaint(scalar) 159untaint (SV *scalar)
130 SV * scalar
131 PROTOTYPE: $ 160 PROTOTYPE: $
132 CODE: 161 CODE:
133 SvTAINTED_off (scalar); 162 SvTAINTED_off (scalar);
134 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
135void 174void
136grow(scalar,newlen) 175grow (SV *scalar, STRLEN newlen)
137 SV * scalar
138 U32 newlen
139 PROTOTYPE: $$ 176 PROTOTYPE: $$
140 PPCODE: 177 PPCODE:
141 sv_grow (scalar, newlen); 178 sv_grow (scalar, newlen);
142 if (GIMME_V != G_VOID) 179 if (GIMME_V != G_VOID)
143 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar))); 180 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar)));
144 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
213int
214refcnt (SV *scalar, U32 newrefcnt = NO_INIT)
215 PROTOTYPE: $;$
216 ALIAS:
217 refcnt_rv = 1
218 CODE:
219 if (ix)
220 {
221 if (!SvROK (scalar)) croak ("refcnt_rv requires a reference as it's first argument");
222 scalar = SvRV (scalar);
223 }
224 RETVAL = SvREFCNT (scalar);
225 if (items > 1)
226 SvREFCNT (scalar) = newrefcnt;
227 OUTPUT:
228 RETVAL
229
230void
231refcnt_inc (SV *scalar)
232 ALIAS:
233 refcnt_inc_rv = 1
234 PROTOTYPE: $
235 CODE:
236 if (ix)
237 {
238 if (!SvROK (scalar)) croak ("refcnt_inc_rv requires a reference as it's first argument");
239 scalar = SvRV (scalar);
240 }
241 SvREFCNT_inc (scalar);
242
243void
244refcnt_dec (SV *scalar)
245 ALIAS:
246 refcnt_dec_rv = 1
247 PROTOTYPE: $
248 CODE:
249 if (ix)
250 {
251 if (!SvROK (scalar)) croak ("refcnt_dec_rv requires a reference as it's first argument");
252 scalar = SvRV (scalar);
253 }
254 SvREFCNT_dec (scalar);
255
256bool
257ok (SV *scalar)
258 PROTOTYPE: $
259 CODE:
260 RETVAL = !!SvOK (scalar);
261 OUTPUT:
262 RETVAL
263
264bool
265uok (SV *scalar)
266 PROTOTYPE: $
267 CODE:
268 RETVAL = !!SvUOK (scalar);
269 OUTPUT:
270 RETVAL
271
272bool
273rok (SV *scalar)
274 PROTOTYPE: $
275 CODE:
276 RETVAL = !!SvROK (scalar);
277 OUTPUT:
278 RETVAL
279
280bool
281pok (SV *scalar)
282 PROTOTYPE: $
283 CODE:
284 RETVAL = !!SvPOK (scalar);
285 OUTPUT:
286 RETVAL
287
288bool
289nok (SV *scalar)
290 PROTOTYPE: $
291 CODE:
292 RETVAL = !!SvNOK (scalar);
293 OUTPUT:
294 RETVAL
295
296bool
297niok (SV *scalar)
298 PROTOTYPE: $
299 CODE:
300 RETVAL = !!SvNIOK (scalar);
301 OUTPUT:
302 RETVAL
303

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines