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 )