Algorithm-History-Levels
view release on metacpan or search on metacpan
lib/Algorithm/History/Levels.pm view on Meta::CPAN
use warnings;
use Exporter qw(import);
our @EXPORT_OK = qw(group_histories_into_levels);
our %SPEC;
sub _pick_history {
my ($histories, $min_time, $max_time) = @_;
for my $i (0..$#{$histories}) {
#say "D:$histories->[$i][1] between $min_time & $max_time?";
if ($histories->[$i][1] >= $min_time &&
$histories->[$i][1] <= $max_time) {
return splice(@$histories, $i, 1);
}
}
undef;
}
$SPEC{group_histories_into_levels} = {
v => 1.1,
lib/Algorithm/History/Levels.pm view on Meta::CPAN
$min_time -= $lower_num_per_level*$lower_period;
$max_time -= $lower_num_per_level*$lower_period;
}
my $h = _pick_history(\@histories, $min_time, $max_time);
push @{ $res->{levels}[$l] }, $h if $h;
}
# if the level is not fully filled yet, fill it with young or old
# histories
my $num_filled = @{ $res->{levels}[$l] };
#say "D:level=$l, num_filled=$num_filled";
unless ($num_filled >= $num_per_level) {
my @filler = @histories;
if ($args{discard_young_histories} // 0) {
my $time = $now-$num_per_level*$period;
if ($l > 0) {
my ($lower_period, $lower_num_per_level) =
@{ $levels->[$l-1] };
$time -= $lower_num_per_level*$lower_period;
}
@filler = grep { $_->[1] <= $time }
( run in 0.571 second using v1.01-cache-2.11-cpan-483215c6ad5 )