File Coverage

blib/lib/Data/BitStream/Code/GammaGolomb.pm
Criterion Covered Total %
statement 20 20 100.0
branch n/a
condition n/a
subroutine 9 9 100.0
pod 2 2 100.0
total 31 31 100.0


line stmt bran cond sub pod time code
1             package Data::BitStream::Code::GammaGolomb;
2 28     28   28170 use strict;
  28         63  
  28         1257  
3 28     28   192 use warnings;
  28         63  
  28         1444  
4             BEGIN {
5 28     28   83 $Data::BitStream::Code::GammaGolomb::AUTHORITY = 'cpan:DANAJ';
6 28         2800 $Data::BitStream::Code::GammaGolomb::VERSION = '0.08';
7             }
8              
9             our $CODEINFO = { package => __PACKAGE__,
10             name => 'GammaGolomb',
11             universal => 1,
12             params => 1,
13             encodesub => sub {shift->put_gammagolomb(@_)},
14             decodesub => sub {shift->get_gammagolomb(@_)}, };
15              
16 28     28   166 use Moo::Role;
  28         56  
  28         219  
17             requires qw(put_golomb put_gamma get_golomb get_gamma);
18              
19             sub put_gammagolomb {
20 1640     1640 1 27027 my $self = shift;
21 1640     6988   11655 $self->put_golomb( sub { shift->put_gamma(@_); }, @_ );
  6988         20459  
22             }
23             sub get_gammagolomb {
24 1683     1683 1 23050 my $self = shift;
25 1683     7083   12903 $self->get_golomb( sub { shift->get_gamma(@_); }, @_ );
  7083         23175  
26             }
27 28     28   13943 no Moo::Role;
  28         76  
  28         166  
28             1;
29              
30             # ABSTRACT: A Role implementing Gamma-Golomb codes
31              
32             =pod
33              
34             =head1 NAME
35              
36             Data::BitStream::Code::GammaGolomb - A Role implementing Gamma-Golomb codes
37              
38             =head1 VERSION
39              
40             version 0.08
41              
42             =head1 DESCRIPTION
43              
44             A role written for L that provides get and set methods for
45             Gamma-Golomb codes. The role applies to a stream object.
46              
47             Gamma-Golomb codes are basically Golomb codes using the Elias Gamma code
48             for the quotient instead of a Unary code. This makes them suitable for
49             occasional large outliers that would otherwise use thousands or millions of
50             bits to encode.
51              
52             In particular, the GammaGolomb(3) code is interesting for some distributions.
53              
54             =head1 METHODS
55              
56             =head2 Provided Object Methods
57              
58             =over 4
59              
60             =item B< put_gammagolomb($m, $value) >
61              
62             =item B< put_gammagolomb($m, @values) >
63              
64             Insert one or more values as Gamma-Golomb codes with parameter m. Returns 1.
65              
66             =item B< get_gammagolomb($m) >
67              
68             =item B< get_gammagolomb($m, $count) >
69              
70             Decode one or more Gamma-Golomb codes from the stream. If count is omitted,
71             one value will be read. If count is negative, values will be read until
72             the end of the stream is reached. In scalar context it returns the last
73             code read; in array context it returns an array of all codes read.
74              
75             =back
76              
77             =head2 Parameters
78              
79             The parameter C must be an integer greater than or equal to 1.
80              
81             The quotient of C is encoded using an Elias Gamma code,
82             followed by the remainder in truncated binary form.
83              
84             Note: if C then the result will be coded purely using gamma coding.
85              
86             Note: if C is a power of 2 (C for some non-negative integer
87             C), then the result is equal to the simpler C code, where the
88             operations devolve into a shift and mask.
89              
90             =head2 Required Methods
91              
92             =over 4
93              
94             =item B< put_golomb >
95              
96             =item B< put_gamma >
97              
98             =item B< get_golomb >
99              
100             =item B< get_gamma >
101              
102             These methods are required for the role.
103              
104             =back
105              
106             =head1 SEE ALSO
107              
108             =over 4
109              
110             =item L
111              
112             =item L
113              
114             =item L
115              
116             =item L
117              
118             =item S.W. Golomb, "Run-length encodings", IEEE Transactions on Information Theory, vol 12, no 3, pp 399-401, 1966.
119              
120             =item R.F. Rice and R. Plaunt, "Adaptive Variable-Length Coding for Efficient Compression of Spacecraft Television Data", IEEE Transactions on Communications, vol 16, no 9, pp 889-897, Dec. 1971.
121              
122             =back
123              
124             =head1 AUTHORS
125              
126             Dana Jacobsen
127              
128             =head1 COPYRIGHT
129              
130             Copyright 2011 by Dana Jacobsen
131              
132             This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
133              
134             =cut