ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Convert-Scalar/Scalar.xs
Revision: 1.9
Committed: Fri Mar 7 10:33:46 2008 UTC (16 years, 2 months ago) by root
Branch: MAIN
CVS Tags: rel-1_04
Changes since 1.8: +9 -9 lines
Log Message:
*** empty log message ***

File Contents

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