1package Math::Calc::Units::Convert::Byte;
2use base 'Math::Calc::Units::Convert::Base2Metric';
3use strict;
4
5my %units = ( bit => [ 1/8, 'byte' ] );
6my %pref = ( bit => 0.1, default => 1 );
7my %ranges = ( default => [ 1, 999 ] );
8
9my %total_unit_map;
10
11sub major_pref {
12    return 1;
13}
14
15sub major_variants {
16    my ($self) = @_;
17    return $self->variants('byte');
18}
19
20sub get_ranges {
21    return \%ranges;
22}
23
24sub get_prefs {
25    return \%pref;
26}
27
28sub unit_map {
29    my ($self) = @_;
30    if (keys %total_unit_map == 0) {
31	%total_unit_map = (%{$self->SUPER::unit_map()}, %units);
32    }
33    return \%total_unit_map;
34}
35
36sub canonical_unit { return 'byte'; }
37
38sub abbreviated_canonical_unit { return 'B'; }
39
40# simple_convert : unitName x unitName -> multiplier
41#
42sub simple_convert {
43    my ($self, $from, $to) = @_;
44
45    # 'b', 'byte', or 'bytes'
46    return 1 if $from =~ /^b(yte(s?))?$/i;
47
48    if (my $easy = $self->SUPER::simple_convert($from, $to)) {
49	return $easy;
50    }
51
52    # mb == megabyte
53    if ($from =~ /^(.)b(yte(s?))?$/i) {
54	if (my ($prefix) = $self->expand($1)) {
55	    return $self->simple_convert($prefix . "byte", $to);
56	}
57    }
58
59    return; # Failed
60}
61
621;
63