Input: Add double-precision valuator_mask API

Add API for valuator_mask that accepts and returns doubles, rather than
ints.  No double API is provided for set_range at the moment.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Daniel Stone 2011-02-23 17:28:18 +00:00 committed by Peter Hutterer
parent 79d4deb76d
commit 7e919ef5bf
3 changed files with 45 additions and 11 deletions

View File

@ -497,10 +497,10 @@ valuator_mask_isset(const ValuatorMask *mask, int valuator)
} }
/** /**
* Set the valuator to the given data. * Set the valuator to the given floating-point data.
*/ */
void void
valuator_mask_set(ValuatorMask *mask, int valuator, int data) valuator_mask_set_double(ValuatorMask *mask, int valuator, double data)
{ {
mask->last_bit = max(valuator, mask->last_bit); mask->last_bit = max(valuator, mask->last_bit);
SetBit(mask->mask, valuator); SetBit(mask->mask, valuator);
@ -508,13 +508,33 @@ valuator_mask_set(ValuatorMask *mask, int valuator, int data)
} }
/** /**
* Return the requested valuator value. If the mask bit is not set for the * Set the valuator to the given integer data.
* given valuator, the returned value is undefined. */
void
valuator_mask_set(ValuatorMask *mask, int valuator, int data)
{
valuator_mask_set_double(mask, valuator, data);
}
/**
* Return the requested valuator value as a double. If the mask bit is not
* set for the given valuator, the returned value is undefined.
*/
double
valuator_mask_get_double(const ValuatorMask *mask, int valuator)
{
return mask->valuators[valuator];
}
/**
* Return the requested valuator value as an integer, rounding towards zero.
* If the mask bit is not set for the given valuator, the returned value is
* undefined.
*/ */
int int
valuator_mask_get(const ValuatorMask *mask, int valuator) valuator_mask_get(const ValuatorMask *mask, int valuator)
{ {
return trunc(mask->valuators[valuator]); return trunc(valuator_mask_get_double(mask, valuator));
} }
/** /**

View File

@ -583,6 +583,9 @@ extern _X_EXPORT void valuator_mask_set_range(ValuatorMask *mask,
extern _X_EXPORT void valuator_mask_set(ValuatorMask *mask, extern _X_EXPORT void valuator_mask_set(ValuatorMask *mask,
int valuator, int valuator,
int data); int data);
extern _X_EXPORT void valuator_mask_set_double(ValuatorMask *mask,
int valuator,
double data);
extern _X_EXPORT void valuator_mask_zero(ValuatorMask *mask); extern _X_EXPORT void valuator_mask_zero(ValuatorMask *mask);
extern _X_EXPORT int valuator_mask_size(const ValuatorMask *mask); extern _X_EXPORT int valuator_mask_size(const ValuatorMask *mask);
extern _X_EXPORT int valuator_mask_isset(const ValuatorMask *mask, int bit); extern _X_EXPORT int valuator_mask_isset(const ValuatorMask *mask, int bit);
@ -591,6 +594,8 @@ extern _X_EXPORT int valuator_mask_num_valuators(const ValuatorMask *mask);
extern _X_EXPORT void valuator_mask_copy(ValuatorMask *dest, extern _X_EXPORT void valuator_mask_copy(ValuatorMask *dest,
const ValuatorMask *src); const ValuatorMask *src);
extern _X_EXPORT int valuator_mask_get(const ValuatorMask *mask, int valnum); 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);
/* InputOption handling interface */ /* InputOption handling interface */
extern _X_EXPORT InputOption* input_option_new(InputOption *list, const char *key, const char *value); extern _X_EXPORT InputOption* input_option_new(InputOption *list, const char *key, const char *value);

View File

@ -1089,12 +1089,16 @@ static void dix_input_valuator_masks(void)
{ {
ValuatorMask *mask = NULL, *copy; ValuatorMask *mask = NULL, *copy;
int nvaluators = MAX_VALUATORS; int nvaluators = MAX_VALUATORS;
int valuators[nvaluators]; double valuators[nvaluators];
int val_ranged[nvaluators];
int i; int i;
int first_val, num_vals; int first_val, num_vals;
for (i = 0; i < nvaluators; i++) for (i = 0; i < nvaluators; i++)
valuators[i] = i; {
valuators[i] = i + 0.5;
val_ranged[i] = i;
}
mask = valuator_mask_new(nvaluators); mask = valuator_mask_new(nvaluators);
assert(mask != NULL); assert(mask != NULL);
@ -1104,9 +1108,10 @@ static void dix_input_valuator_masks(void)
for (i = 0; i < nvaluators; i++) for (i = 0; i < nvaluators; i++)
{ {
assert(!valuator_mask_isset(mask, i)); assert(!valuator_mask_isset(mask, i));
valuator_mask_set(mask, i, valuators[i]); valuator_mask_set_double(mask, i, valuators[i]);
assert(valuator_mask_isset(mask, i)); assert(valuator_mask_isset(mask, i));
assert(valuator_mask_get(mask, i) == valuators[i]); assert(valuator_mask_get(mask, i) == trunc(valuators[i]));
assert(valuator_mask_get_double(mask, i) == valuators[i]);
assert(valuator_mask_size(mask) == i + 1); assert(valuator_mask_size(mask) == i + 1);
assert(valuator_mask_num_valuators(mask) == i + 1); assert(valuator_mask_num_valuators(mask) == i + 1);
} }
@ -1132,7 +1137,7 @@ static void dix_input_valuator_masks(void)
first_val = 5; first_val = 5;
num_vals = 6; num_vals = 6;
valuator_mask_set_range(mask, first_val, num_vals, valuators); valuator_mask_set_range(mask, first_val, num_vals, val_ranged);
assert(valuator_mask_size(mask) == first_val + num_vals); assert(valuator_mask_size(mask) == first_val + num_vals);
assert(valuator_mask_num_valuators(mask) == num_vals); assert(valuator_mask_num_valuators(mask) == num_vals);
for (i = 0; i < nvaluators; i++) for (i = 0; i < nvaluators; i++)
@ -1142,7 +1147,9 @@ static void dix_input_valuator_masks(void)
else else
{ {
assert(valuator_mask_isset(mask, i)); assert(valuator_mask_isset(mask, i));
assert(valuator_mask_get(mask, i) == valuators[i - first_val]); assert(valuator_mask_get(mask, i) == val_ranged[i - first_val]);
assert(valuator_mask_get_double(mask, i) ==
val_ranged[i - first_val]);
} }
} }
@ -1156,6 +1163,8 @@ static void dix_input_valuator_masks(void)
{ {
assert(valuator_mask_isset(mask, i) == valuator_mask_isset(copy, i)); assert(valuator_mask_isset(mask, i) == valuator_mask_isset(copy, i));
assert(valuator_mask_get(mask, i) == valuator_mask_get(copy, i)); assert(valuator_mask_get(mask, i) == valuator_mask_get(copy, i));
assert(valuator_mask_get_double(mask, i) ==
valuator_mask_get_double(copy, i));
} }
valuator_mask_free(&mask); valuator_mask_free(&mask);