[PATCH] dix: add valuator_mask_fetch_double()
Daniel Stone
daniel at fooishbar.org
Fri Sep 30 16:40:10 PDT 2011
Hi,
On 1 October 2011 00:32, Chase Douglas <chase.douglas at canonical.com> wrote:
> On 09/30/2011 04:07 PM, Daniel Stone wrote:
>> e.g.:
>> double valuator_mask_fetch_double(struct valuator_mask *mask, int index)
>> {
>> if (valuator_mask_isset(mask, index)
>> return valuator_mask_get_double(mask, index);
>> else
>> return 0.0;
>> }
>
> Two issues:
>
> * Can we be sure that 0.0 will never be a valid value in the mask? My
> hunch is no.
No, but people who need to differentiate between 0.0 and NaN can use
valuator_mask_isset, just as before.
> * If we did this, we should do the same for normal int values. I can
> guarantee that 0 is a valid value in some cases, which makes this
> impossible. Ergo, we shouldn't do this for doubles either.
>
> If you really want to clean things up more, you could do:
>
> double valuator_mask_choose_double(struct valuator_mask *mask, int
> index, double value_if_unset)
> {
> if (valuator_mask_isset(mask, index)
> return valuator_mask_get_double(mask, index);
> else
> return value_if_unset;
> }
>
> (I don't really like the name, but couldn't come up with a better one in
> 2 minutes.)
Whichever value you pick will still be valid as a ValuatorMask value.
> This would condense code blocks from:
>
> if (!valuator_mask_fetch_double(mask, i, &value))
> value = prev_value;
>
> to:
>
> value = valuator_mask_choose_double(mask, i, prev_value);
Still though, it's just changing it from:
if (valuator_mask_isset(&mask, i))
value = valuator_mask_get_double(&mask, i);
else
do_something_else();
to:
value = valuator_mask_fetch_double(&mask, i, SENTINEL_CONSTANT);
if (value == SENTINEL_CONSTANT)
do_something_else();
Which doesn't seem massively valuable to me.
> It would also satisfy the ability to use it in places where you don't
> really need a variable:
>
> if (valuator_mask_choose_double(mask, i, prev_value) > 0) { ... }
This could just be:
if (valuator_mask_get_double(&mask, i) != prev_value) { ... }
?
Cheers,
Daniel
More information about the xorg-devel
mailing list