File: StoredIterator.xs

package info (click to toggle)
libhash-storediterator-perl 0.008-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 304 kB
  • sloc: perl: 143; makefile: 3
file content (55 lines) | stat: -r--r--r-- 1,032 bytes parent folder | download | duplicates (4)
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);