ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Convert-Scalar/Scalar.xs
Revision: 1.6
Committed: Fri Nov 26 21:05:13 2004 UTC (19 years, 5 months ago) by root
Branch: MAIN
Changes since 1.5: +13 -8 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #include "EXTERN.h"
2 #include "perl.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
9 #define RETCOPY(sv) \
10 if (GIMME_V != G_VOID) \
11 { \
12 dXSTARG; \
13 sv_setsv (TARG, (sv)); \
14 EXTEND (SP, 1); \
15 PUSHs (TARG); \
16 }
17
18 MODULE = Convert::Scalar PACKAGE = Convert::Scalar
19
20 int
21 utf8(scalar,mode=0)
22 SV * scalar
23 SV * mode
24 PROTOTYPE: $;$
25 CODE:
26 SvGETMAGIC (scalar);
27 RETVAL = !!SvUTF8 (scalar);
28 if (items > 1)
29 {
30 if (SvREADONLY (scalar))
31 croak ("Convert::Scalar::utf8 called on read only scalar");
32 if (SvTRUE (mode))
33 SvUTF8_on (scalar);
34 else
35 SvUTF8_off (scalar);
36 }
37 OUTPUT:
38 RETVAL
39
40 void
41 utf8_on(scalar)
42 SV * scalar
43 PROTOTYPE: $
44 PPCODE:
45 if (SvREADONLY (scalar))
46 croak ("Convert::Scalar::utf8_on called on read only scalar");
47
48 SvGETMAGIC (scalar);
49 SvUTF8_on (scalar);
50 RETCOPY (scalar);
51
52 void
53 utf8_off(scalar)
54 SV * scalar
55 PROTOTYPE: $
56 PPCODE:
57 if (SvREADONLY (scalar))
58 croak ("Convert::Scalar::utf8_off called on read only scalar");
59
60 SvGETMAGIC (scalar);
61 SvUTF8_off (scalar);
62 RETCOPY (scalar);
63
64 int
65 utf8_valid(scalar)
66 SV * scalar
67 PROTOTYPE: $
68 CODE:
69 STRLEN len;
70 char *str = SvPV (scalar, len);
71 RETVAL = !!is_utf8_string (str, len);
72 OUTPUT:
73 RETVAL
74
75 void
76 utf8_upgrade(scalar)
77 SV * scalar
78 PROTOTYPE: $
79 PPCODE:
80 if (SvREADONLY (scalar))
81 croak ("Convert::Scalar::utf8_upgrade called on read only scalar");
82
83 sv_utf8_upgrade(scalar);
84 RETCOPY (scalar);
85
86 bool
87 utf8_downgrade(scalar, fail_ok = 0)
88 SV * scalar
89 bool fail_ok
90 PROTOTYPE: $;$
91 CODE:
92 if (SvREADONLY (scalar))
93 croak ("Convert::Scalar::utf8_downgrade called on read only scalar");
94
95 RETVAL = sv_utf8_downgrade (scalar, fail_ok);
96 OUTPUT:
97 RETVAL
98
99 void
100 utf8_encode(scalar)
101 SV * scalar
102 PROTOTYPE: $
103 PPCODE:
104 if (SvREADONLY (scalar))
105 croak ("Convert::Scalar::utf8_encode called on read only scalar");
106
107 sv_utf8_encode (scalar);
108 RETCOPY (scalar);
109
110 UV
111 utf8_length(scalar)
112 SV * scalar
113 PROTOTYPE: $
114 CODE:
115 RETVAL = (UV) utf8_length (SvPV_nolen (scalar), SvEND (scalar));
116 OUTPUT:
117 RETVAL
118
119 void
120 unmagic(scalar, type)
121 SV * scalar
122 char type
123 PROTOTYPE: $
124 CODE:
125 sv_unmagic (scalar, type);
126
127 void
128 weaken(scalar)
129 SV * scalar
130 PROTOTYPE: $
131 CODE:
132 sv_rvweaken (scalar);
133
134 void
135 taint(scalar)
136 SV * scalar
137 PROTOTYPE: $
138 CODE:
139 SvTAINTED_on (scalar);
140
141 int
142 tainted(scalar)
143 SV * scalar
144 PROTOTYPE: $
145 CODE:
146 RETVAL = SvTAINTED (scalar);
147 OUTPUT:
148 RETVAL
149
150 void
151 untaint(scalar)
152 SV * scalar
153 PROTOTYPE: $
154 CODE:
155 SvTAINTED_off (scalar);
156
157 void
158 grow(scalar,newlen)
159 SV * scalar
160 U32 newlen
161 PROTOTYPE: $$
162 PPCODE:
163 sv_grow (scalar, newlen);
164 if (GIMME_V != G_VOID)
165 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar)));
166
167 int
168 refcnt(scalar,newrefcnt=0)
169 SV * scalar
170 int newrefcnt
171 PROTOTYPE: $;$
172 ALIAS:
173 refcnt_rv = 1
174 CODE:
175 if (ix)
176 {
177 if (!SvROK (scalar)) croak ("refcnt_rv requires a reference as it's first argument");
178 scalar = SvRV (scalar);
179 }
180 RETVAL = SvREFCNT (scalar);
181 if (items > 1)
182 SvREFCNT (scalar) = newrefcnt;
183 OUTPUT:
184 RETVAL
185
186 void
187 refcnt_inc(scalar)
188 SV * scalar
189 ALIAS:
190 refcnt_inc_rv = 1
191 PROTOTYPE: $
192 CODE:
193 if (ix)
194 {
195 if (!SvROK (scalar)) croak ("refcnt_inc_rv requires a reference as it's first argument");
196 scalar = SvRV (scalar);
197 }
198 SvREFCNT_inc (scalar);
199
200 void
201 refcnt_dec(scalar)
202 SV * scalar
203 ALIAS:
204 refcnt_dec_rv = 1
205 PROTOTYPE: $
206 CODE:
207 if (ix)
208 {
209 if (!SvROK (scalar)) croak ("refcnt_dec_rv requires a reference as it's first argument");
210 scalar = SvRV (scalar);
211 }
212 SvREFCNT_dec (scalar);
213
214 bool
215 ok(scalar)
216 SV * scalar
217 PROTOTYPE: $
218 CODE:
219 RETVAL = SvOK (scalar);
220 OUTPUT:
221 RETVAL
222
223 bool
224 uok(scalar)
225 SV * scalar
226 PROTOTYPE: $
227 CODE:
228 RETVAL = SvUOK (scalar);
229 OUTPUT:
230 RETVAL
231
232 bool
233 rok(scalar)
234 SV * scalar
235 PROTOTYPE: $
236 CODE:
237 RETVAL = SvROK (scalar);
238 OUTPUT:
239 RETVAL
240
241 bool
242 pok(scalar)
243 SV * scalar
244 PROTOTYPE: $
245 CODE:
246 RETVAL = SvPOK (scalar);
247 OUTPUT:
248 RETVAL
249
250 bool
251 nok(scalar)
252 SV * scalar
253 PROTOTYPE: $
254 CODE:
255 RETVAL = SvNOK (scalar);
256 OUTPUT:
257 RETVAL
258
259 bool
260 niok(scalar)
261 SV * scalar
262 PROTOTYPE: $
263 CODE:
264 RETVAL = SvNIOK (scalar);
265 OUTPUT:
266 RETVAL
267