#include "App/AppControlRequest.h"
#include "Ui/Navigator.h"
-#include <vector>
-
#define ID_BUFFER_SIZE 16
using namespace Common;
void OperationPickController::replyIds(SelectResults results)
{
size_t count = results.size();
- std::vector<char[ID_BUFFER_SIZE]> buffers(count);
- std::vector<const char *> 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)
* @return Vector of integer values on success, otherwise empty vector.
*/
std::vector<int> 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 */
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;
+}