Listing 4: The expansion routines used by function Expand

void LP::Expand3x3 (
    unsigned char val, unsigned char *block, unsigned width)
{
    *block += val / 4; // First row
    *++block += val / 2;
    *++block += val / 4;
    block += width - 2;
    *block += val / 2; // Second row
    *++block += val;
    *++block += val / 2;
    block += width - 2;
    *block += val / 4; // Third row
    *++block += val / 2;
    *++block += val / 4;
}

void LP::Expand2x3 (
    unsigned char val, unsigned char *block, unsigned width)
{
    *block += val / 4; // First row
    *++block += val / 2;
    block += width - 1;
    *block += val / 2; // Second row
    *++block += val;
    block += width - 1;
    *block += val / 4; // Third row
    *++block += val / 2;
}

void LP::Expand3x2 (
    unsigned char val, unsigned char *block, unsigned width)
{
    *block += val / 4; // First row
    *++block += val / 2;
    *++block += val / 4;
    block += width - 2;
    *block += val / 2; // Second row
    *++block += val;
    *++block += val / 2;
}

void LP::Expand2x2 (
    unsigned char val, unsigned char *block, unsigned width)
{
    *block += val / 16; // First row
    *++block += val / 8;
    block += width - 1;
    *block += val / 8; // Second row
    *++block += val / 4;
}
//End of File