File: Iterator.pm

package info (click to toggle)
libmaxmind-db-writer-perl 0.300003-5
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,336 kB
  • sloc: ansic: 3,059; perl: 2,895; makefile: 5; sh: 4
file content (102 lines) | stat: -rw-r--r-- 2,340 bytes parent folder | download | duplicates (3)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package Test::MaxMind::DB::Writer::Iterator;

use strict;
use warnings;

use Net::Works::Network ();

sub new {
    my $class      = shift;
    my $ip_version = shift;

    return bless { ip_version => $ip_version }, $class;
}

## no critic (Subroutines::ProhibitManyArgs)
sub process_node_record {
    my $self               = shift;
    my $node_num           = shift;
    my $dir                = shift;
    my $node_ip_num        = shift;
    my $node_prefix_length = shift;

    $self->_saw_network( $node_ip_num, $node_prefix_length, 'node' );

    $self->_saw_record( $node_num, $dir );

    push @{ $self->{node_records} },
        $self->_nw_network( $node_ip_num, $node_prefix_length );

    return;
}

sub process_empty_record {
    my $self               = shift;
    my $node_num           = shift;
    my $dir                = shift;
    my $node_ip_num        = shift;
    my $node_prefix_length = shift;

    $self->_saw_network( $node_ip_num, $node_prefix_length, 'empty' );

    $self->_saw_record( $node_num, $dir );

    return;
}

sub process_data_record {
    my $self                 = shift;
    my $node_num             = shift;
    my $dir                  = shift;
    my $node_ip_num          = shift;
    my $node_prefix_length   = shift;
    my $record_ip_num        = shift;
    my $record_prefix_length = shift;
    my $value                = shift;

    $self->_saw_network( $node_ip_num, $node_prefix_length, 'data' );

    $self->_saw_record( $node_num, $dir );

    push @{ $self->{data_records} },
        [
        $self->_nw_network( $record_ip_num, $record_prefix_length ),
        $value,
        ];

    return;
}

sub _saw_network {
    my $self          = shift;
    my $ip_num        = shift;
    my $prefix_length = shift;

    my $network = $self->_nw_network( $ip_num, $prefix_length );

    $self->{networks}{ $network->as_string() }++;
}

sub _saw_record {
    my $self     = shift;
    my $node_num = shift;
    my $dir      = shift;

    $self->{records}{"$node_num-$dir"}++;

    return;
}

sub _nw_network {
    my $self          = shift;
    my $ip_num        = shift;
    my $prefix_length = shift;

    return Net::Works::Network->new_from_integer(
        integer       => $ip_num,
        prefix_length => $prefix_length,
        version       => $self->{ip_version},
    );
}

1;