1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "../../ppport.h"
/* These were stolen from http://cpansearch.perl.org/src/AMS/Storable-2.30/Storable.xs */
#ifndef HvRITER_set
# define HvRITER_set(hv,r) (HvRITER(hv) = r)
#endif
#ifndef HvEITER_set
# define HvEITER_set(hv,r) (HvEITER(hv) = r)
#endif
#ifndef HvRITER_get
# define HvRITER_get HvRITER
#endif
#ifndef HvEITER_get
# define HvEITER_get HvEITER
#endif
/* end theft */
typedef struct {
HE *eiter;
I32 riter;
} hsi;
MODULE = Hash::StoredIterator PACKAGE = Hash::StoredIterator
TYPEMAP: <<EOT
hsi * T_PTR
EOT
hsi *hash_get_iterator( hv )
HV *hv
CODE:
Newx( RETVAL, 1, hsi );
RETVAL->riter = HvRITER_get(hv);
RETVAL->eiter = HvEITER_get(hv);
OUTPUT:
RETVAL
void hash_set_iterator( hv, itr )
HV *hv
hsi *itr
CODE:
HvRITER_set(hv, itr->riter);
HvEITER_set(hv, itr->eiter);
void hash_init_iterator( hv )
HV *hv
CODE:
hv_iterinit(hv);
|