Skip to content

Commit 6008395

Browse files
committed
Slightly more efficient double-Elias gamma coding.
1 parent 14b00b8 commit 6008395

20 files changed

+84
-84
lines changed

Compression/bwac_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -373,8 +373,8 @@ ($integers, $double = 0)
373373
$bitstring .= '0';
374374
}
375375
elsif ($double) {
376-
my $t = sprintf('%b', abs($d));
377-
my $l = sprintf('%b', length($t) + 1);
376+
my $t = sprintf('%b', abs($d) + 1);
377+
my $l = sprintf('%b', length($t));
378378
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
379379
}
380380
else {
@@ -404,10 +404,10 @@ ($fh, $double = 0)
404404
my $bl = 0;
405405
++$bl while (read_bit($fh, \$buffer) eq '1');
406406
407-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
407+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
408408
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
409409
410-
push @deltas, ($bit eq '1' ? $int : -$int);
410+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
411411
}
412412
else {
413413
my $bit = read_bit($fh, \$buffer);

Compression/bwad_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -372,8 +372,8 @@ ($integers, $double = 0)
372372
$bitstring .= '0';
373373
}
374374
elsif ($double) {
375-
my $t = sprintf('%b', abs($d));
376-
my $l = sprintf('%b', length($t) + 1);
375+
my $t = sprintf('%b', abs($d) + 1);
376+
my $l = sprintf('%b', length($t));
377377
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
378378
}
379379
else {
@@ -403,10 +403,10 @@ ($fh, $double = 0)
403403
my $bl = 0;
404404
++$bl while (read_bit($fh, \$buffer) eq '1');
405405
406-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
406+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
407407
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
408408
409-
push @deltas, ($bit eq '1' ? $int : -$int);
409+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
410410
}
411411
else {
412412
my $bit = read_bit($fh, \$buffer);

Compression/bwaz_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,8 @@ ($integers, $double = 0)
181181
$bitstring .= '0';
182182
}
183183
elsif ($double) {
184-
my $t = sprintf('%b', abs($d));
185-
my $l = sprintf('%b', length($t) + 1);
184+
my $t = sprintf('%b', abs($d) + 1);
185+
my $l = sprintf('%b', length($t));
186186
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
187187
}
188188
else {
@@ -212,10 +212,10 @@ ($fh, $double = 0)
212212
my $bl = 0;
213213
++$bl while (read_bit($fh, \$buffer) eq '1');
214214

215-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
215+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
216216
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
217217

218-
push @deltas, ($bit eq '1' ? $int : -$int);
218+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
219219
}
220220
else {
221221
my $bit = read_bit($fh, \$buffer);

Compression/bwla_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -304,8 +304,8 @@ ($integers, $double = 0)
304304
$bitstring .= '0';
305305
}
306306
elsif ($double) {
307-
my $t = sprintf('%b', abs($d));
308-
my $l = sprintf('%b', length($t) + 1);
307+
my $t = sprintf('%b', abs($d) + 1);
308+
my $l = sprintf('%b', length($t));
309309
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
310310
}
311311
else {
@@ -335,10 +335,10 @@ ($fh, $double = 0)
335335
my $bl = 0;
336336
++$bl while (read_bit($fh, \$buffer) eq '1');
337337

338-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
338+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
339339
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
340340

341-
push @deltas, ($bit eq '1' ? $int : -$int);
341+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
342342
}
343343
else {
344344
my $bit = read_bit($fh, \$buffer);

Compression/bwlz_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,8 @@ ($integers, $double = 0)
303303
$bitstring .= '0';
304304
}
305305
elsif ($double) {
306-
my $t = sprintf('%b', abs($d));
307-
my $l = sprintf('%b', length($t) + 1);
306+
my $t = sprintf('%b', abs($d) + 1);
307+
my $l = sprintf('%b', length($t));
308308
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
309309
}
310310
else {
@@ -334,10 +334,10 @@ ($fh, $double = 0)
334334
my $bl = 0;
335335
++$bl while (read_bit($fh, \$buffer) eq '1');
336336

337-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
337+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
338338
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
339339

340-
push @deltas, ($bit eq '1' ? $int : -$int);
340+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
341341
}
342342
else {
343343
my $bit = read_bit($fh, \$buffer);

Compression/bwrl_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@ ($integers, $double = 0)
150150
$bitstring .= '0';
151151
}
152152
elsif ($double) {
153-
my $t = sprintf('%b', abs($d));
154-
my $l = sprintf('%b', length($t) + 1);
153+
my $t = sprintf('%b', abs($d) + 1);
154+
my $l = sprintf('%b', length($t));
155155
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
156156
}
157157
else {
@@ -181,10 +181,10 @@ ($fh, $double = 0)
181181
my $bl = 0;
182182
++$bl while (read_bit($fh, \$buffer) eq '1');
183183

184-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
184+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
185185
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
186186

187-
push @deltas, ($bit eq '1' ? $int : -$int);
187+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
188188
}
189189
else {
190190
my $bit = read_bit($fh, \$buffer);

Compression/bwt_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,8 @@ ($integers, $double = 0)
152152
$bitstring .= '0';
153153
}
154154
elsif ($double) {
155-
my $t = sprintf('%b', abs($d));
156-
my $l = sprintf('%b', length($t) + 1);
155+
my $t = sprintf('%b', abs($d) + 1);
156+
my $l = sprintf('%b', length($t));
157157
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
158158
}
159159
else {
@@ -183,10 +183,10 @@ ($fh, $double = 0)
183183
my $bl = 0;
184184
++$bl while (read_bit($fh, \$buffer) eq '1');
185185

186-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
186+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
187187
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
188188

189-
push @deltas, ($bit eq '1' ? $int : -$int);
189+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
190190
}
191191
else {
192192
my $bit = read_bit($fh, \$buffer);

Compression/bww_file_compression.pl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -439,8 +439,8 @@ ($integers)
439439
$bitstring .= '0';
440440
}
441441
else {
442-
my $t = sprintf('%b', $k);
443-
my $l = length($t) + 1;
442+
my $t = sprintf('%b', $k + 1);
443+
my $l = length($t);
444444
my $L = sprintf('%b', $l);
445445
$bitstring .= ('1' x (length($L) - 1)) . '0' . substr($L, 1) . substr($t, 1);
446446
}
@@ -462,10 +462,10 @@ ($fh)
462462

463463
if ($bl > 0) {
464464

465-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
465+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
466466
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
467467

468-
push @ints, $int;
468+
push @ints, $int - 1;
469469
}
470470
else {
471471
push @ints, 0;
@@ -568,8 +568,8 @@ ($integers)
568568
$bitstring .= '0';
569569
}
570570
else {
571-
my $t = sprintf('%b', abs($d));
572-
my $l = sprintf('%b', length($t) + 1);
571+
my $t = sprintf('%b', abs($d) + 1);
572+
my $l = sprintf('%b', length($t));
573573
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
574574
}
575575
}
@@ -595,10 +595,10 @@ ($fh)
595595
my $bl = 0;
596596
++$bl while (read_bit($fh, \$buffer) eq '1');
597597

598-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
598+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
599599
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
600600

601-
push @deltas, ($bit eq '1' ? $int : -$int);
601+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
602602
}
603603

604604
if ($k == 0) {

Compression/huffman_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,8 @@ ($integers)
131131
$bitstring .= '0';
132132
}
133133
else {
134-
my $t = sprintf('%b', abs($d));
135-
my $l = sprintf('%b', length($t) + 1);
134+
my $t = sprintf('%b', abs($d) + 1);
135+
my $l = sprintf('%b', length($t));
136136
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
137137
}
138138
}
@@ -158,10 +158,10 @@ ($fh)
158158
my $bl = 0;
159159
++$bl while (read_bit($fh, \$buffer) eq '1');
160160

161-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
161+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
162162
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
163163

164-
push @deltas, ($bit eq '1' ? $int : -$int);
164+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
165165
}
166166

167167
if ($k == 0) {

Compression/lzbw_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ ($integers, $double = 0)
202202
$bitstring .= '0';
203203
}
204204
elsif ($double) {
205-
my $t = sprintf('%b', abs($d));
206-
my $l = sprintf('%b', length($t) + 1);
205+
my $t = sprintf('%b', abs($d) + 1);
206+
my $l = sprintf('%b', length($t));
207207
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
208208
}
209209
else {
@@ -233,10 +233,10 @@ ($fh, $double = 0)
233233
my $bl = 0;
234234
++$bl while (read_bit($fh, \$buffer) eq '1');
235235

236-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
236+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
237237
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
238238

239-
push @deltas, ($bit eq '1' ? $int : -$int);
239+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
240240
}
241241
else {
242242
my $bit = read_bit($fh, \$buffer);

Compression/lzbwd_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,8 @@ ($integers, $double = 0)
214214
$bitstring .= '0';
215215
}
216216
elsif ($double) {
217-
my $t = sprintf('%b', abs($d));
218-
my $l = sprintf('%b', length($t) + 1);
217+
my $t = sprintf('%b', abs($d) + 1);
218+
my $l = sprintf('%b', length($t));
219219
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
220220
}
221221
else {
@@ -245,10 +245,10 @@ ($fh, $double = 0)
245245
my $bl = 0;
246246
++$bl while (read_bit($fh, \$buffer) eq '1');
247247

248-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
248+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
249249
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
250250

251-
push @deltas, ($bit eq '1' ? $int : -$int);
251+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
252252
}
253253
else {
254254
my $bit = read_bit($fh, \$buffer);

Compression/lzbwh_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,8 @@ ($integers, $double = 0)
214214
$bitstring .= '0';
215215
}
216216
elsif ($double) {
217-
my $t = sprintf('%b', abs($d));
218-
my $l = sprintf('%b', length($t) + 1);
217+
my $t = sprintf('%b', abs($d) + 1);
218+
my $l = sprintf('%b', length($t));
219219
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
220220
}
221221
else {
@@ -245,10 +245,10 @@ ($fh, $double = 0)
245245
my $bl = 0;
246246
++$bl while (read_bit($fh, \$buffer) eq '1');
247247

248-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
248+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
249249
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
250250

251-
push @deltas, ($bit eq '1' ? $int : -$int);
251+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
252252
}
253253
else {
254254
my $bit = read_bit($fh, \$buffer);

Compression/mrh_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,8 @@ ($integers, $double = 0)
175175
$bitstring .= '0';
176176
}
177177
elsif ($double) {
178-
my $t = sprintf('%b', abs($d));
179-
my $l = sprintf('%b', length($t) + 1);
178+
my $t = sprintf('%b', abs($d) + 1);
179+
my $l = sprintf('%b', length($t));
180180
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
181181
}
182182
else {
@@ -206,10 +206,10 @@ ($fh, $double = 0)
206206
my $bl = 0;
207207
++$bl while (read_bit($fh, \$buffer) eq '1');
208208

209-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
209+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
210210
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
211211

212-
push @deltas, ($bit eq '1' ? $int : -$int);
212+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
213213
}
214214
else {
215215
my $bit = read_bit($fh, \$buffer);

Compression/ppmh_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,8 @@ ($integers, $double = 0)
158158
$bitstring .= '0';
159159
}
160160
elsif ($double) {
161-
my $t = sprintf('%b', abs($d));
162-
my $l = sprintf('%b', length($t) + 1);
161+
my $t = sprintf('%b', abs($d) + 1);
162+
my $l = sprintf('%b', length($t));
163163
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
164164
}
165165
else {
@@ -189,10 +189,10 @@ ($fh, $double = 0)
189189
my $bl = 0;
190190
++$bl while (read_bit($fh, \$buffer) eq '1');
191191

192-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
192+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
193193
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
194194

195-
push @deltas, ($bit eq '1' ? $int : -$int);
195+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
196196
}
197197
else {
198198
my $bit = read_bit($fh, \$buffer);

Compression/rlac_file_compression.pl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,8 @@ ($integers, $double = 0)
147147
$bitstring .= '0';
148148
}
149149
elsif ($double) {
150-
my $t = sprintf('%b', abs($d));
151-
my $l = sprintf('%b', length($t) + 1);
150+
my $t = sprintf('%b', abs($d) + 1);
151+
my $l = sprintf('%b', length($t));
152152
$bitstring .= '1' . (($d < 0) ? '0' : '1') . ('1' x (length($l) - 1)) . '0' . substr($l, 1) . substr($t, 1);
153153
}
154154
else {
@@ -178,10 +178,10 @@ ($fh, $double = 0)
178178
my $bl = 0;
179179
++$bl while (read_bit($fh, \$buffer) eq '1');
180180

181-
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl)) - 1;
181+
my $bl2 = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. $bl));
182182
my $int = oct('0b1' . join('', map { read_bit($fh, \$buffer) } 1 .. ($bl2 - 1)));
183183

184-
push @deltas, ($bit eq '1' ? $int : -$int);
184+
push @deltas, ($bit eq '1' ? 1 : -1) * ($int - 1);
185185
}
186186
else {
187187
my $bit = read_bit($fh, \$buffer);

0 commit comments

Comments
 (0)