Add function documentation
1 parent 3fe5c20 commit f92b710c039f4668f60d2aa24f04d8dd0f11fc8b
@Andreas Jaggi Andreas Jaggi authored on 22 Oct 2015
Showing 1 changed file
View
24
IP.pm
sub Coalesce {
return &coalesce;
}
 
=head2 Subtract
 
Title : Subtract
Usage : my $remaining_networks = Subtract(\@list_of_networks,\@networks_to_subtract);
Function : computes the network definitions resulting from subtracting @networks_to_subtract from @list_of_networks
Returns : reference to a sorted list of NetAddr::IP objects representing the remaining networks
Args : reference to a sorted list of NetAddr::IP objects (the list must be sorted! eg. by using Compact)
: reference to a sorted list of NetAddr::IP objects to subtract (the list must be sorted! eg. by using Compact)
 
=cut
sub Subtract {
my @add = ref $_[0] eq __PACKAGE__ ? ($_[0]) : @{$_[0]};
my @sub = @{$_[1]};
my @ret;
while (@add && @sub) {
if ($sub[0]->contains($add[0])) {
if ($add[0]->within($sub[0])) {
shift @add;
} elsif ($add[0]->contains($sub[0])) {
} elsif ($sub[0]->within($add[0])) {
my ($low,$up) = Exclude(shift @add,shift @sub);
push @ret, @$low;
unshift @add, @$up;
} else {
push @ret, @add;
return \@ret;
}
 
=head2 Exclude
 
Title : Exclude
Usage : my ($remaining_lower_networks,$remaining_upper_networks) = Exclude($original_network,$network_to_exclude);
Function : computes the network definitions resulting from removing the $network_to_exclude from $original_network.
Returns : two list references containing the sorted network definitions 'below' and 'above' the excluded network
Args : NetAddr::IP object of the original network
: NetAddr::IP object of the network to exclude
 
=cut
sub Exclude {
return ([],[]) if $_[0] == $_[1];
return ([$_[0]],[]) unless $_[1]->within($_[0]);
my @low;