From 7be1335b3ab696e0dea0719d975e13d86e112c4b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 9 Jan 2013 09:45:02 +1100 Subject: [PATCH] AP_Param: removed copy_name() and add token to find_by_index() this allows callers to avoid another var_info traverse --- libraries/AP_Param/AP_Param.cpp | 39 ++++----------------------------- libraries/AP_Param/AP_Param.h | 5 ++--- 2 files changed, 6 insertions(+), 38 deletions(-) diff --git a/libraries/AP_Param/AP_Param.cpp b/libraries/AP_Param/AP_Param.cpp index 67fe3c922d..93a5a1ecd5 100644 --- a/libraries/AP_Param/AP_Param.cpp +++ b/libraries/AP_Param/AP_Param.cpp @@ -503,36 +503,6 @@ void AP_Param::add_vector3f_suffix(char *buffer, size_t buffer_size, uint8_t idx } } -// Copy the variable's whole name to the supplied buffer. -// -// If the variable is a group member, prepend the group name. -// -void AP_Param::copy_name(char *buffer, size_t buffer_size, bool force_scalar) -{ - uint32_t group_element; - const struct GroupInfo *ginfo; - uint8_t idx; - const struct AP_Param::Info *info = find_var_info(&group_element, &ginfo, &idx); - if (info == NULL) { - *buffer = 0; - serialDebug("no info found"); - return; - } - strncpy_P(buffer, info->name, buffer_size); - if (ginfo != NULL) { - uint8_t len = strnlen(buffer, buffer_size); - if (len < buffer_size) { - strncpy_P(&buffer[len], ginfo->name, buffer_size-len); - } - if ((force_scalar || idx != 0) && AP_PARAM_VECTOR3F == PGM_UINT8(&ginfo->type)) { - // the caller wants a specific element in a Vector3f - add_vector3f_suffix(buffer, buffer_size, idx); - } - } else if ((force_scalar || idx != 0) && AP_PARAM_VECTOR3F == PGM_UINT8(&info->type)) { - add_vector3f_suffix(buffer, buffer_size, idx); - } -} - // Copy the variable's whole name to the supplied buffer. // // If the variable is a group member, prepend the group name. @@ -641,14 +611,13 @@ AP_Param::find(const char *name, enum ap_var_type *ptype) // Find a variable by index. Note that this is quite slow. // AP_Param * -AP_Param::find_by_index(uint16_t idx, enum ap_var_type *ptype) +AP_Param::find_by_index(uint16_t idx, enum ap_var_type *ptype, ParamToken *token) { - ParamToken token; AP_Param *ap; uint16_t count=0; - for (ap=AP_Param::first(&token, ptype); + for (ap=AP_Param::first(token, ptype); ap && count < idx; - ap=AP_Param::next_scalar(&token, ptype)) { + ap=AP_Param::next_scalar(token, ptype)) { count++; } return ap; @@ -1050,7 +1019,7 @@ void AP_Param::show_all(void) ap; ap=AP_Param::next_scalar(&token, &type)) { char s[AP_MAX_NAME_SIZE+1]; - ap->copy_name(s, sizeof(s), true); + ap->copy_name_token(&token, s, sizeof(s), true); s[AP_MAX_NAME_SIZE] = 0; switch (type) { diff --git a/libraries/AP_Param/AP_Param.h b/libraries/AP_Param/AP_Param.h index 1f7674d73e..cbcc89b943 100644 --- a/libraries/AP_Param/AP_Param.h +++ b/libraries/AP_Param/AP_Param.h @@ -121,11 +121,10 @@ public: /// Note that if the combination of names is larger than the buffer, the /// result in the buffer will be truncated. /// + /// @param token token giving current variable /// @param buffer The destination buffer /// @param bufferSize Total size of the destination buffer. /// - void copy_name(char *buffer, size_t bufferSize, bool force_scalar=false); - void copy_name_token(const ParamToken *token, char *buffer, size_t bufferSize, bool force_scalar=false); /// Find a variable by name. @@ -145,7 +144,7 @@ public: /// @return A pointer to the variable, or NULL if /// it does not exist. /// - static AP_Param * find_by_index(uint16_t idx, enum ap_var_type *ptype); + static AP_Param * find_by_index(uint16_t idx, enum ap_var_type *ptype, ParamToken *token); /// Find a object in the top level var_info table ///