On Sun, Sep 4, 2016 at 9:45 AM, Nikos Alexandris <n...@nikosalexandris.net>
wrote:

> Updated in sandbox, see: https://trac.osgeo.org/grass/changeset/69365
>
> Is it though correct?
>

I was not looking at the logic but

if (hue == -1.0) {

is not safe. Although it will probably work most of the time if you set it
to the exactly same value (`hue = -1;`), but it is not portable because it
is exact comparison for floats/doubles. Generally, you need to do something
like

if (fabs(hue - (-1.0)) < GRASS_EPSILON) {

However, here it might be more appropriate to signal the good or bad state
of hue by some other variable:

hue_good = FALSE;

/* setting hue here together with hue_good = TRUE */

if (!hue_good) {

/* do the null set */

Also, it seems that the code is not consistent with FCELL versus DCELL. I
can see DCELL *rowbuffer and Rast_is_d_null_value but also
(FCELL)saturation as well as floats and doubles. Since the input claims to
be always DCELL, use DCELL/double everywhere.

Related to that, although I'm never sure about where is its appropriate to
use DCELL and where double (DCELL currently gets evaluated to double:
typedef double DCELL;). I would probably use DCELL everywhere in this
function; just to make it clear that we deal purely with cell values and
there is no need to switch to anything else.

And of course, congrats and kudos for your C efforts, Nikos!

Vaclav
_______________________________________________
grass-dev mailing list
grass-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-dev

Reply via email to