[postgis-devel] [wktraster] Core tests failure for r5841

Mateusz Loskot mateusz at loskot.net
Thu Jan 13 15:53:56 PST 2011


On 13/01/11 18:49, Pierre Racine wrote:
>> This is one of number of places where the problem exists.
>> Others are rt_band_set_pixel, rt_band_set_nodata, and generally
>> in any place where double is implicitly or explicitly squeezed in
>> integral types.
> 
> I agree the solution should be apply for rt_band_set_pixel and rt_band_set_nodata.
> 
> Does everybody is happy with my code snippet implementing MIN/MAX?

Pierre,

The idea is good. Though, I would suggest to follow Sandro's suggestion
to wrap it with reusable macros / functions. Spreading such branching
and spreading in number of places yet injected in switch case statement
will make the code an epic poetry, unnecessarily.

Following <stdint.h> type names we operate in the code, we could have

clamp_int16
clamp_uint16
clamp_int32
clamp_uint32
...

If we are happy to use C99/POSIX, then we can simplify the branching

int16_t clamp_int16(double value)
{
    return (int16_t)fmin(fmax((value), SHRT_MIN), SHRT_MAX);
}

uint16_t clamp_uint16(double value)
{
    return (uint16_t)fmin(fmax((value), USHRT_MIN), USHRT_MAX);
}

Then, in code the intentions are explicit and clear:

        case PT_16BSI:
            {
                int16_t *ptr = mem;

                for (i = 0; i < numval; i++)
                    ptr[i] = clamp_int16_t(initialvalue);
                checkvalint = ptr[0];
                break;
            }


Best regards,
-- 
Mateusz Loskot, http://mateusz.loskot.net
Charter Member of OSGeo, http://osgeo.org
Member of ACCU, http://accu.org



More information about the postgis-devel mailing list