Algorithm-HyperLogLog
view release on metacpan or search on metacpan
lib/Algorithm/HyperLogLog.pm view on Meta::CPAN
if ($PERL_ONLY) {
require 'Algorithm/HyperLogLog/PP.pm';
}
}
sub new_from_file {
my ( $class, $filename ) = @_;
open my $fh, '<', $filename or die $!;
my $on_error = sub { close $fh; croak "Invalid dump file($filename)"; };
binmode $fh;
my ( @dumpdata, $buf, $readed );
# Read register size data
$readed = read( $fh, $buf, 1 );
$on_error->() if $readed != 1;
my $k = unpack 'C', $buf;
# Read register content data
my $m = 2**$k;
$readed = read $fh, $buf, $m;
lib/Algorithm/HyperLogLog.pm view on Meta::CPAN
@dumpdata = unpack 'C*', $buf;
my $self = $class->_new_from_dump( $k, \@dumpdata );
return $self;
}
sub dump_to_file {
my ( $self, $filename ) = @_;
my $k = log( $self->register_size ) / log(2); # Calculate log2(register_size)
my $dumpdata = $self->_dump_register();
open my $fh, '>', $filename or die $!;
binmode $fh;
my $buf = pack 'C', $k;
print $fh $buf;
$buf = pack 'C*', @$dumpdata;
print $fh $buf;
close $fh;
}
sub XS {
!$PERL_ONLY;
}
( run in 0.274 second using v1.01-cache-2.11-cpan-87723dcf8b7 )