CIAO-Lib-StackIO
view release on metacpan or search on metacpan
{
idx = SvIV(ST(1));
if ( 0 == idx )
stk_rewind( stack );
else
{
if ( -1 == idx )
idx = stk_count( stack );
stk_set_current( stack, idx );
}
}
OUTPUT:
RETVAL
###########################################################################
int
delete(stack, ... )
CIAO_Lib_StackIO * stack
PREINIT:
int idx;
CODE:
if ( items > 1 )
{
idx = SvIV(ST(1));
if ( idx == -1 )
idx = stk_count( stack );
/* make up for bug in stk_delete_num which doesn't
handle error checking */
RETVAL = idx < 0 ? -1 : stk_delete_num( stack, idx );
}
else
{
RETVAL = stk_delete_current( stack );
}
OUTPUT:
RETVAL
###########################################################################
void
DESTROY(stack)
CIAO_Lib_StackIO * stack
CODE:
stk_close( stack );
###########################################################################
void
stk_disp(stack)
CIAO_Lib_StackIO * stack
###########################################################################
SV *
read(stack, ...)
CIAO_Lib_StackIO * stack
PREINIT:
int idx;
char *retval;
PPCODE:
/* no particular entry requested */
if ( items == 1 )
{
/*
scalar context: return the next entry
*/
if ( GIMME_V == G_SCALAR )
{
retval = stk_read_next( stack );
EXTEND(SP, 1);
if ( retval )
{
PUSHs(sv_2mortal(newSVpv(retval, 0)));
Safefree( retval );
}
else
{
PUSHs(sv_newmortal());
}
}
/*
array context: return it all
*/
else if ( GIMME_V == G_ARRAY )
{
int current = stk_current( stack );
EXTEND(SP, stk_count(stack) );
stk_rewind(stack);
while( retval = stk_read_next( stack ) )
{
PUSHs(sv_2mortal(newSVpv(retval, 0)));
Safefree( retval );
}
if ( current ) stk_set_current( stack, current );
else stk_rewind( stack );
}
}
/* particular entry requested */
else
{
idx = SvIV(ST(1));
if ( idx == -1 )
idx = stk_count( stack );
retval = stk_read_num( stack, idx );
EXTEND(SP, 1);
if ( retval )
{
PUSHs(sv_2mortal(newSVpv(retval, 0)));
Safefree( retval );
}
else
{
PUSHs(sv_newmortal());
}
}
###########################################################################
void
( run in 0.500 second using v1.01-cache-2.11-cpan-71847e10f99 )