| Akron | f703f6f | 2017-08-25 21:20:52 +0200 | [diff] [blame^] | 1 | package Krawfish::Result::Segment::Sort::SubTerm; |
| Akron | fb9e652 | 2017-05-27 14:35:00 +0200 | [diff] [blame] | 2 | use strict; |
| 3 | use warnings; |
| 4 | |
| Akron | f703f6f | 2017-08-25 21:20:52 +0200 | [diff] [blame^] | 5 | # This will sort based on a pre-ranked subterm |
| 6 | |
| Akron | fb9e652 | 2017-05-27 14:35:00 +0200 | [diff] [blame] | 7 | sub new { |
| 8 | my $class = shift; |
| 9 | |
| 10 | my $self = bless { |
| 11 | index => shift, |
| 12 | suffix => shift // 0, |
| 13 | descending => shift // 0, |
| 14 | }, $class; |
| 15 | |
| 16 | # Get ranking |
| 17 | $self->{dict} = $self->{index}->dictionary or return; |
| 18 | |
| 19 | # Get maximum rank if descending order |
| 20 | $self->{max} = $self->{ranks}->max if $self->{descending}; |
| 21 | |
| 22 | return $self; |
| 23 | }; |
| 24 | |
| 25 | sub get { |
| 26 | my $self = shift; |
| 27 | my $subterm_id = shift; |
| 28 | my $rank; |
| 29 | if ($self->{suffix}) { |
| 30 | $rank = $self->{dict}->prefix_rank_by_subterm_id($subterm_id); |
| 31 | } |
| 32 | else { |
| 33 | $rank = $self->{dict}->suffix_rank_by_subterm_id($subterm_id); |
| 34 | }; |
| 35 | |
| 36 | # Revert if maximum rank is set |
| 37 | return $max ? $max - $rank : $rank; |
| 38 | }; |
| 39 | |
| 40 | |
| 41 | 1; |