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:
Peter Hutterer 2011-09-30 10:59:47 +10:00
parent fb84be47db
commit 82c60232c0
3 changed files with 54 additions and 1 deletions

View File

@ -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.
*/

View File

@ -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);

View File

@ -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);