From: Eugene Kurzberg Date: Thu, 15 Sep 2016 11:50:23 +0000 (+0300) Subject: Implemented utility for efficient extra data array creation. X-Git-Tag: submit/tizen/20160927.063109^2~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=04dfb7fe6fbd36861a01ab783cb53d19d0355e37;p=profile%2Fmobile%2Fapps%2Fnative%2Fphone-contacts.git Implemented utility for efficient extra data array creation. Change-Id: I7576fe423c18de12373f20b6dba334d907f98c78 Signed-off-by: Eugene Kurzberg --- diff --git a/contacts-app/src/OperationPickController.cpp b/contacts-app/src/OperationPickController.cpp index 4951c64..0f15276 100644 --- a/contacts-app/src/OperationPickController.cpp +++ b/contacts-app/src/OperationPickController.cpp @@ -23,8 +23,6 @@ #include "App/AppControlRequest.h" #include "Ui/Navigator.h" -#include - #define ID_BUFFER_SIZE 16 using namespace Common; @@ -64,18 +62,17 @@ bool OperationPickController::onSelected(SelectResults results) void OperationPickController::replyIds(SelectResults results) { size_t count = results.size(); - std::vector buffers(count); - std::vector ids(count); + char **ids = App::createExtraDataArray(ID_BUFFER_SIZE, count); for (size_t i = 0; i < count; ++i) { - snprintf(buffers[i], sizeof(buffers[i]), "%d", results[i].value.id); - ids[i] = buffers[i]; + snprintf(ids[i], ID_BUFFER_SIZE, "%d", results[i].value.id); } const char *type = (m_ResultType == ResultAction) ? getActionTypeString(ActionType(results.begin()->type)) : getResultTypeString(m_ResultType); - replyResults(type, ids.data(), ids.size()); + replyResults(type, (const char **) ids, count); + free(ids); } void OperationPickController::replyPath(SelectResults results) diff --git a/lib-apps-common/inc/App/AppControlUtils.h b/lib-apps-common/inc/App/AppControlUtils.h index 4ad19b4..61a35f0 100644 --- a/lib-apps-common/inc/App/AppControlUtils.h +++ b/lib-apps-common/inc/App/AppControlUtils.h @@ -47,6 +47,17 @@ namespace App * @return Vector of integer values on success, otherwise empty vector. */ std::vector EXPORT_API getIntExtraDataArray(app_control_h appControl, const char *key); + + /** + * @brief Create array of strings of equal size. + * @details Both array and strings are created in a contiguous memory + * so it can be released all at once. + * @param[in] dataSize Maximum size of array element + * @param[in] count Number of array elements + * @remark Array elements MUST NOT be released. + * @return Array of pointers to strings, MUST be released using free(). + */ + EXPORT_API char **createExtraDataArray(size_t dataSize, size_t count); } #endif /* APP_APP_CONTROL_UTILS_H */ diff --git a/lib-apps-common/src/App/AppControlUtils.cpp b/lib-apps-common/src/App/AppControlUtils.cpp index b02dd69..8fb0130 100644 --- a/lib-apps-common/src/App/AppControlUtils.cpp +++ b/lib-apps-common/src/App/AppControlUtils.cpp @@ -76,3 +76,17 @@ std::vector App::getIntExtraDataArray(app_control_h appControl, const char return result; } + +char **App::createExtraDataArray(size_t dataSize, size_t count) +{ + typedef char ExtraData[dataSize]; + + char **array = (char **) malloc((sizeof(char *) + dataSize) * count); + ExtraData *extraData = (ExtraData *) (array + count); + + for (size_t i = 0; i < count; ++i) { + array[i] = extraData[i]; + } + + return array; +}