Problems? Is your data what you think it is? PerlMonks

### Re^3: Efficient 7bit compression

by Ven'Tatsu (Deacon)
 on Mar 14, 2005 at 19:43 UTC ( #439416=note: print w/replies, xml ) Need Help??

in reply to Re^2: Efficient 7bit compression
in thread Efficient 7bit compression

I'm not sure how this fares in reguard to speed, but it only uses 2-5 scalars, tries to avoid generating intermidiate lists, and modifies their arguments inplace.
```sub shrink {
my \$dbit = 0;
for (my \$sbit = 0; \$sbit < length(\$_[0]) * 8; \$sbit++) {
next if \$sbit % 8 == 7;
vec(\$_[0], \$dbit++, 1) = vec(\$_[0], \$sbit, 1);
}
my \$dlen = length(\$_[0]) * 7 / 8;
\$dlen++ unless \$dlen == int(\$dlen);
\$dlen = int(\$dlen);
my \$extra = length(\$_[0]) - \$dlen;
if (\$extra > 0) {
substr(\$_[0], \$dlen, \$extra, '');
}
for (my \$pbit = \$dbit; \$pbit < \$dlen * 8; \$pbit++) {
vec(\$_[0], \$pbit, 1) = 0;
}
}

sub grow {
my \$sbit = int(length(\$_[0]) * 8 / 7) * 7 - 1;
for (my \$dbit = int(length(\$_[0]) * 8 / 7) * 8 - 1; \$dbit >= 0; \$d
+bit--) {
vec(\$_[0], \$dbit, 1) = \$dbit % 8 == 7 ? 0 : vec(\$_[0], \$sbit--
+, 1);
}
}
I have the nagging fealing there is a better way to implement ceil (near the middle of shrink).
If padding the compressed string with 0 bits is not needed then the second for loop of shrink can be omitted to save (on average) 4 bits of time.

Replies are listed 'Best First'.
Re^4: Efficient 7bit compression
by Roy Johnson (Monsignor) on Mar 14, 2005 at 20:22 UTC
...a better way to implement ceil...
```    my \$dlen = int((7 + length(\$_[0]) * 7)/8);
substr(\$_[0], \$dlen) = '';
vec (\$_[0], \$dbit++, 1) = 0 while (\$dbit < \$dlen * 8);
}
This replaces your shrink function from the definition of \$dlen on.

Caution: Contents may have been coded under pressure.

Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://439416]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (4)
As of 2023-12-08 00:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
What's your preferred 'use VERSION' for new CPAN modules in 2023?

Results (33 votes). Check out past polls.

Notices?