Cross Reference: APItest.xs
xref
: /
osnet-11
/
usr
/
src
/
cmd
/
perl
/
5.8.4
/
distrib
/
ext
/
XS
/
APItest
/
APItest.xs
Home
History
Annotate
Line#
Navigate
Download
Search
only in
./
1
N/A
#
include
"
EXTERN.h
"
1
N/A
#
include
"
perl.h
"
1
N/A
#
include
"
XSUB.h
"
1
N/A
1
N/A
1
N/A
MODULE
=
XS
::
APItest
:
Hash
PACKAGE
=
XS
::
APItest
::
Hash
1
N/A
1
N/A
#
define
UTF8KLEN
(
sv
,
len
) (
SvUTF8
(
sv
) ? -(
I32
)
len
: (
I32
)
len
)
1
N/A
1
N/A
bool
1
N/A
exists
(
hash
,
key_sv
)
1
N/A
PREINIT
:
1
N/A
STRLEN
len
;
1
N/A
const
char
*
key
;
1
N/A
INPUT
:
1
N/A
HV
*
hash
1
N/A
SV
*
key_sv
1
N/A
CODE
:
1
N/A
key
=
SvPV
(
key_sv
,
len
);
1
N/A
RETVAL
=
hv_exists
(
hash
,
key
,
UTF8KLEN
(
key_sv
,
len
));
1
N/A
OUTPUT
:
1
N/A
RETVAL
1
N/A
1
N/A
SV
*
1
N/A
delete
(
hash
,
key_sv
)
1
N/A
PREINIT
:
1
N/A
STRLEN
len
;
1
N/A
const
char
*
key
;
1
N/A
INPUT
:
1
N/A
HV
*
hash
1
N/A
SV
*
key_sv
1
N/A
CODE
:
1
N/A
key
=
SvPV
(
key_sv
,
len
);
1
N/A
/* It's already mortal, so need to increase reference count. */
1
N/A
RETVAL
=
SvREFCNT_inc
(
hv_delete
(
hash
,
key
,
UTF8KLEN
(
key_sv
,
len
), 0));
1
N/A
OUTPUT
:
1
N/A
RETVAL
1
N/A
1
N/A
SV
*
1
N/A
store_ent
(
hash
,
key
,
value
)
1
N/A
PREINIT
:
1
N/A
SV
*
copy
;
1
N/A
HE
*
result
;
1
N/A
INPUT
:
1
N/A
HV
*
hash
1
N/A
SV
*
key
1
N/A
SV
*
value
1
N/A
CODE
:
1
N/A
copy
=
newSV
(0);
1
N/A
result
=
hv_store_ent
(
hash
,
key
,
copy
, 0);
1
N/A
SvSetMagicSV
(
copy
,
value
);
1
N/A
if
(!
result
) {
1
N/A
SvREFCNT_dec
(
copy
);
1
N/A
XSRETURN_EMPTY
;
1
N/A
}
1
N/A
/* It's about to become mortal, so need to increase reference count.
1
N/A
*/
1
N/A
RETVAL
=
SvREFCNT_inc
(
HeVAL
(
result
));
1
N/A
OUTPUT
:
1
N/A
RETVAL
1
N/A
1
N/A
1
N/A
SV
*
1
N/A
store
(
hash
,
key_sv
,
value
)
1
N/A
PREINIT
:
1
N/A
STRLEN
len
;
1
N/A
const
char
*
key
;
1
N/A
SV
*
copy
;
1
N/A
SV
**
result
;
1
N/A
INPUT
:
1
N/A
HV
*
hash
1
N/A
SV
*
key_sv
1
N/A
SV
*
value
1
N/A
CODE
:
1
N/A
key
=
SvPV
(
key_sv
,
len
);
1
N/A
copy
=
newSV
(0);
1
N/A
result
=
hv_store
(
hash
,
key
,
UTF8KLEN
(
key_sv
,
len
),
copy
, 0);
1
N/A
SvSetMagicSV
(
copy
,
value
);
1
N/A
if
(!
result
) {
1
N/A
SvREFCNT_dec
(
copy
);
1
N/A
XSRETURN_EMPTY
;
1
N/A
}
1
N/A
/* It's about to become mortal, so need to increase reference count.
1
N/A
*/
1
N/A
RETVAL
=
SvREFCNT_inc
(*
result
);
1
N/A
OUTPUT
:
1
N/A
RETVAL
1
N/A
1
N/A
1
N/A
SV
*
1
N/A
fetch
(
hash
,
key_sv
)
1
N/A
PREINIT
:
1
N/A
STRLEN
len
;
1
N/A
const
char
*
key
;
1
N/A
SV
**
result
;
1
N/A
INPUT
:
1
N/A
HV
*
hash
1
N/A
SV
*
key_sv
1
N/A
CODE
:
1
N/A
key
=
SvPV
(
key_sv
,
len
);
1
N/A
result
=
hv_fetch
(
hash
,
key
,
UTF8KLEN
(
key_sv
,
len
), 0);
1
N/A
if
(!
result
) {
1
N/A
XSRETURN_EMPTY
;
1
N/A
}
1
N/A
/* Force mg_get */
1
N/A
RETVAL
=
newSVsv
(*
result
);
1
N/A
OUTPUT
:
1
N/A
RETVAL
1
N/A
=
pod
1
N/A
1
N/A
sub
TIEHASH
{
bless
{}, $_[0] }
1
N/A
sub
STORE
{ $_[0]->{$_[
1
]} = $_[
2
] }
1
N/A
sub
FETCH
{ $_[0]->{$_[
1
]} }
1
N/A
sub
FIRSTKEY
{
my
$a =
scalar
keys
%{$_[0]};
each
%{$_[0]} }
1
N/A
sub
NEXTKEY
{
each
%{$_[0]} }
1
N/A
sub
EXISTS
{
exists
$_[0]->{$_[
1
]} }
1
N/A
sub
DELETE
{
delete
$_[0]->{$_[
1
]} }
1
N/A
sub
CLEAR
{ %{$_[0]} = () }
1
N/A
1
N/A
=
cut
1
N/A
1
N/A
MODULE
=
XS
::
APItest
PACKAGE
=
XS
::
APItest
1
N/A
1
N/A
PROTOTYPES
:
DISABLE
1
N/A
1
N/A
void
1
N/A
print_double
(
val
)
1
N/A
double
val
1
N/A
CODE
:
1
N/A
printf
(
"%5.3f\n"
,
val
);
1
N/A
1
N/A
int
1
N/A
have_long_double
()
1
N/A
CODE
:
1
N/A
#
ifdef
HAS_LONG_DOUBLE
1
N/A
RETVAL
=
1
;
1
N/A
#
else
1
N/A
RETVAL
= 0;
1
N/A
#
endif
1
N/A
OUTPUT
:
1
N/A
RETVAL
1
N/A
1
N/A
void
1
N/A
print_long_double
()
1
N/A
CODE
:
1
N/A
#
ifdef
HAS_LONG_DOUBLE
1
N/A
#
if
defined
(
PERL_PRIfldbl
) && (
LONG_DOUBLESIZE
>
DOUBLESIZE
)
1
N/A
long
double
val
=
7.0
;
1
N/A
printf
(
"%5.3"
PERL_PRIfldbl
"\n"
,
val
);
1
N/A
#
else
1
N/A
double
val
=
7.0
;
1
N/A
printf
(
"%5.3f\n"
,
val
);
1
N/A
#
endif
1
N/A
#
endif
1
N/A
1
N/A
void
1
N/A
print_int
(
val
)
1
N/A
int
val
1
N/A
CODE
:
1
N/A
printf
(
"%d\n"
,
val
);
1
N/A
1
N/A
void
1
N/A
print_long
(
val
)
1
N/A
long
val
1
N/A
CODE
:
1
N/A
printf
(
"%ld\n"
,
val
);
1
N/A
1
N/A
void
1
N/A
print_float
(
val
)
1
N/A
float
val
1
N/A
CODE
:
1
N/A
printf
(
"%5.3f\n"
,
val
);
1
N/A
1
N/A
void
1
N/A
print_flush
()
1
N/A
CODE
:
1
N/A
fflush
(
stdout
);