106_scan_allpackage/eg/
hv_iter0.rs1use libperl_sys::*;
2use libperl_rs::Perl;
3
4pub struct HvIter<'a> {
5 perl: &'a Perl,
6 hv: *mut HV,
7 he: *mut HE,
8}
9
10impl<'a> HvIter<'a> {
11 pub fn new(perl: &'a Perl, hv: *mut HV) -> HvIter<'a> {
12 perl.hv_iterinit(hv);
13 HvIter {perl, hv, he: std::ptr::null_mut()}
14 }
15}
16
17impl<'a> Iterator for HvIter<'a> {
18 type Item = (String, *mut SV);
19
20 fn next(&mut self) -> Option<Self::Item> {
21 self.he = self.perl.hv_iternext(self.hv);
22 if !self.he.is_null() {
23 let name = self.perl.hv_iterkey(self.he);
24 let value = self.perl.hv_iterval(self.hv, self.he);
25 Some((name, value))
26 } else {
27 None
28 }
29 }
30}