dix: add valuator_mask_fetch_double()
Using this call simplifies callers that don't know if the mask bit is set. Before: if (valuator_mask_isset(mask, valnum)) value = valuator_mask_get_double(mask, valnum)); else value = someothervalue; Now: if (!valuator_mask_fetch_double(mask, valnum, &value)) value = someothervalue; Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com> Reviewed-by: Daniel Stone <daniel@fooishbar.org>
This commit is contained in:
parent
fb84be47db
commit
82c60232c0
|
@ -538,6 +538,42 @@ valuator_mask_get(const ValuatorMask *mask, int valuator)
|
|||
return trunc(valuator_mask_get_double(mask, valuator));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set value to the requested valuator. If the mask bit is set for this
|
||||
* valuator, value contains the requested valuator value and TRUE is
|
||||
* returned.
|
||||
* If the mask bit is not set for this valuator, value is unchanged and
|
||||
* FALSE is returned.
|
||||
*/
|
||||
Bool
|
||||
valuator_mask_fetch_double(const ValuatorMask *mask, int valuator, double *value)
|
||||
{
|
||||
if (valuator_mask_isset(mask, valuator))
|
||||
{
|
||||
*value = valuator_mask_get_double(mask, valuator);
|
||||
return TRUE;
|
||||
} else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set value to the requested valuator. If the mask bit is set for this
|
||||
* valuator, value contains the requested valuator value and TRUE is
|
||||
* returned.
|
||||
* If the mask bit is not set for this valuator, value is unchanged and
|
||||
* FALSE is returned.
|
||||
*/
|
||||
Bool
|
||||
valuator_mask_fetch(const ValuatorMask *mask, int valuator, int *value)
|
||||
{
|
||||
if (valuator_mask_isset(mask, valuator))
|
||||
{
|
||||
*value = valuator_mask_get(mask, valuator);
|
||||
return TRUE;
|
||||
} else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the valuator from the mask.
|
||||
*/
|
||||
|
|
|
@ -597,6 +597,10 @@ extern _X_EXPORT void valuator_mask_copy(ValuatorMask *dest,
|
|||
extern _X_EXPORT int valuator_mask_get(const ValuatorMask *mask, int valnum);
|
||||
extern _X_EXPORT double valuator_mask_get_double(const ValuatorMask *mask,
|
||||
int valnum);
|
||||
extern _X_EXPORT Bool valuator_mask_fetch(const ValuatorMask *mask,
|
||||
int valnum, int *val);
|
||||
extern _X_EXPORT Bool valuator_mask_fetch_double(const ValuatorMask *mask,
|
||||
int valnum, double *val);
|
||||
|
||||
/* InputOption handling interface */
|
||||
extern _X_EXPORT InputOption* input_option_new(InputOption *list, const char *key, const char *value);
|
||||
|
|
15
test/input.c
15
test/input.c
|
@ -1199,14 +1199,19 @@ static void dix_input_valuator_masks(void)
|
|||
assert(valuator_mask_num_valuators(mask) == num_vals);
|
||||
for (i = 0; i < nvaluators; i++)
|
||||
{
|
||||
double val;
|
||||
if (i < first_val || i >= first_val + num_vals)
|
||||
{
|
||||
assert(!valuator_mask_isset(mask, i));
|
||||
else
|
||||
assert(!valuator_mask_fetch_double(mask, i, &val));
|
||||
} else
|
||||
{
|
||||
assert(valuator_mask_isset(mask, i));
|
||||
assert(valuator_mask_get(mask, i) == val_ranged[i - first_val]);
|
||||
assert(valuator_mask_get_double(mask, i) ==
|
||||
val_ranged[i - first_val]);
|
||||
assert(valuator_mask_fetch_double(mask, i, &val));
|
||||
assert(val_ranged[i - first_val] == val);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1218,10 +1223,18 @@ static void dix_input_valuator_masks(void)
|
|||
|
||||
for (i = 0; i < nvaluators; i++)
|
||||
{
|
||||
double a, b;
|
||||
assert(valuator_mask_isset(mask, i) == valuator_mask_isset(copy, i));
|
||||
|
||||
if (!valuator_mask_isset(mask, i))
|
||||
continue;
|
||||
|
||||
assert(valuator_mask_get(mask, i) == valuator_mask_get(copy, i));
|
||||
assert(valuator_mask_get_double(mask, i) ==
|
||||
valuator_mask_get_double(copy, i));
|
||||
assert(valuator_mask_fetch_double(mask, i, &a));
|
||||
assert(valuator_mask_fetch_double(copy, i, &b));
|
||||
assert(a == b);
|
||||
}
|
||||
|
||||
valuator_mask_free(&mask);
|
||||
|
|
Loading…
Reference in New Issue
Block a user