Browse Source

param: Use utarray_find when looking for changed parameters and use a binary search for finding param handles by name.

sbg
Stephan Brown 8 years ago committed by Beat Küng
parent
commit
99228bdeb1
  1. 34
      src/modules/systemlib/param/param.c

34
src/modules/systemlib/param/param.c

@ -227,19 +227,9 @@ param_find_changed(param_t param)
param_assert_locked(); param_assert_locked();
if (param_values != NULL) { if (param_values != NULL) {
#if 0 /* utarray_find requires bsearch, not available */
struct param_wbuf_s key; struct param_wbuf_s key;
key.param = param; key.param = param;
s = utarray_find(param_values, &key, param_compare_values); s = utarray_find(param_values, &key, param_compare_values);
#else
while ((s = (struct param_wbuf_s *)utarray_next(param_values, s)) != NULL) {
if (s->param == param) {
break;
}
}
#endif
} }
return s; return s;
@ -271,17 +261,27 @@ param_notify_changes(bool is_saved)
param_t param_t
param_find_internal(const char *name, bool notification) param_find_internal(const char *name, bool notification)
{ {
param_t param; param_t middle;
param_t front = 0;
param_t last = get_param_info_count()-1;
/* perform a linear search of the known parameters */ /* perform a binary search of the known parameters */
for (param = 0; handle_in_range(param); param++) { while (front <= last) {
if (!strcmp(param_info_base[param].name, name)) { middle = front + (last-front) / 2;
int ret = strcmp(name, param_info_base[middle].name);
if (ret == 0) {
if (notification) { if (notification) {
param_set_used_internal(param); param_set_used_internal(middle);
} }
return middle;
return param; } else if (middle == front || middle == last) {
/* An end point has been hit, but there has been no match */
break;
} else if (ret < 0) {
last = middle - 1;
} else {
front = middle + 1;
} }
} }

Loading…
Cancel
Save