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;
|