Algorithm-GDiffDelta
view release on metacpan or search on metacpan
compile_gdiff view on Meta::CPAN
my $offset_type = lc $1;
my $len_type = lc $2;
die "line $.: wrong number of args\n" unless @arg == 2;
print $COPY_OPCODE{"${offset_type}_$len_type"};
write_num($offset_type, $arg[0]);
write_num($len_type, $arg[1]);
}
else {
die "line $.: unrecognized command '$opcode'\n";
}
}
# EOF opcode.
print "\x00";
sub parse_arg
{
local $_ = shift;
if (/^"(.*)"\z/) {
$_ = $1;
s/\\n/\n/g;
return $_;
}
elsif (/^0x[\dA-F]+\z/i || /^0\d+\z/) {
return oct;
}
elsif (/^(\d+)\z/) {
return $1;
}
else {
die "line $.: bad arg '$_'\n";
}
}
sub write_num
{
my ($type, $num) = @_;
if ($type eq 'ubyte') {
die "line $.: ubyte value out of range\n" if $num > 0xFF;
print chr($num);
}
elsif ($type eq 'ushort') {
die "line $.: ushort value out of range\n" if $num > 0xFFFF;
print pack('n', $num);
}
elsif ($type eq 'int') {
print pack('N', $num);
}
elsif ($type eq 'long') {
# TODO
die "support for 'long' type not implemented yet";
}
else {
croak "bad number type '$type'";
}
}
# vi:ts=4 sw=4 expandtab:
( run in 0.694 second using v1.01-cache-2.11-cpan-5b529ec07f3 )