From: gichan2-jang Date: Mon, 14 Aug 2023 07:34:22 +0000 (+0900) Subject: [Data] Add data and info clear function X-Git-Tag: accepted/tizen/unified/20230818.183541~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=716115e2be8d5ff10a86ab5873adff1c1d957b1a;p=platform%2Fupstream%2Fnnstreamer-edge.git [Data] Add data and info clear function Add function to clear raw data and info of edge data. This does not release the edge data handle. Signed-off-by: gichan2-jang --- diff --git a/include/nnstreamer-edge.h b/include/nnstreamer-edge.h index df8d0f8..93b26bd 100644 --- a/include/nnstreamer-edge.h +++ b/include/nnstreamer-edge.h @@ -416,6 +416,16 @@ int nns_edge_data_copy (nns_edge_data_h data_h, nns_edge_data_h *new_data_h); */ int nns_edge_data_add (nns_edge_data_h data_h, void *data, nns_size_t data_len, nns_edge_data_destroy_cb destroy_cb); +/** + * @brief Remove raw data in edge data. + * @param[in] data_h The edge data handle. + * @return 0 on success. Otherwise a negative error value. + * @retval #NNS_EDGE_ERROR_NONE Successful. + * @retval #NNS_EDGE_ERROR_NOT_SUPPORTED Not supported. + * @retval #NNS_EDGE_ERROR_INVALID_PARAMETER Given parameter is invalid. + */ +int nns_edge_data_clear (nns_edge_data_h data_h); + /** * @brief Get the n'th edge data. * @note DO NOT release returned data. You should copy the data to another buffer if the returned data is necessary. @@ -468,6 +478,16 @@ int nns_edge_data_set_info (nns_edge_data_h data_h, const char *key, const char */ int nns_edge_data_get_info (nns_edge_data_h data_h, const char *key, char **value); +/** + * @brief Clear information of edge data. + * @param[in] data_h The edge data handle. + * @return 0 on success. Otherwise a negative error value. + * @retval #NNS_EDGE_ERROR_NONE Successful. + * @retval #NNS_EDGE_ERROR_NOT_SUPPORTED Not supported. + * @retval #NNS_EDGE_ERROR_INVALID_PARAMETER Given parameter is invalid. + */ +int nns_edge_data_clear_info (nns_edge_data_h data_h); + /** * @brief Set the logging level. Default value is NNS_EDGE_LOG_INFO. * @param[in] level The log level to print out. diff --git a/src/libnnstreamer-edge/nnstreamer-edge-data.c b/src/libnnstreamer-edge/nnstreamer-edge-data.c index 4aa8533..39a6476 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-data.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-data.c @@ -247,6 +247,42 @@ nns_edge_data_add (nns_edge_data_h data_h, void *data, nns_size_t data_len, return NNS_EDGE_ERROR_NONE; } +/** + * @brief Remove raw data in edge data. + */ +int +nns_edge_data_clear (nns_edge_data_h data_h) +{ + nns_edge_data_s *ed; + unsigned int i; + + ed = (nns_edge_data_s *) data_h; + if (!ed) { + nns_edge_loge ("Invalid param, given edge data handle is null."); + return NNS_EDGE_ERROR_INVALID_PARAMETER; + } + + if (!nns_edge_handle_is_valid (ed)) { + nns_edge_loge ("Invalid param, given edge data is invalid."); + return NNS_EDGE_ERROR_INVALID_PARAMETER; + } + + nns_edge_lock (ed); + + for (i = 0; i < ed->num; i++) { + if (ed->data[i].destroy_cb) + ed->data[i].destroy_cb (ed->data[i].data); + ed->data[i].data = NULL; + ed->data[i].data_len = 0; + ed->data[i].destroy_cb = NULL; + } + ed->num = 0; + + nns_edge_unlock (ed); + + return NNS_EDGE_ERROR_NONE; +} + /** * @brief Get the n'th edge data. */ @@ -390,6 +426,37 @@ nns_edge_data_get_info (nns_edge_data_h data_h, const char *key, char **value) return ret; } +/** + * @brief Clear information of edge data. + */ +int +nns_edge_data_clear_info (nns_edge_data_h data_h) +{ + nns_edge_data_s *ed; + int ret; + + ed = (nns_edge_data_s *) data_h; + if (!ed) { + nns_edge_loge ("Invalid param, given edge data handle is null."); + return NNS_EDGE_ERROR_INVALID_PARAMETER; + } + + if (!nns_edge_handle_is_valid (ed)) { + nns_edge_loge ("Invalid param, given edge data is invalid."); + return NNS_EDGE_ERROR_INVALID_PARAMETER; + } + + nns_edge_lock (ed); + ret = nns_edge_metadata_destroy (ed->metadata); + if (NNS_EDGE_ERROR_NONE != ret) + goto done; + ret = nns_edge_metadata_create (&ed->metadata); +done: + nns_edge_unlock (ed); + + return ret; +} + /** * @brief Serialize metadata in edge data. */ diff --git a/tests/unittest_nnstreamer-edge.cc b/tests/unittest_nnstreamer-edge.cc index f644691..567d373 100644 --- a/tests/unittest_nnstreamer-edge.cc +++ b/tests/unittest_nnstreamer-edge.cc @@ -1058,6 +1058,78 @@ TEST(edge, getInfoInvalidParam06_n) EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE); } + +/** + * @brief Clear info of edge-data - invalid param. + */ +TEST(edgeData, clearInfoInvalidParam01_n) +{ + int ret; + + ret = nns_edge_data_clear_info (NULL); + EXPECT_NE (NNS_EDGE_ERROR_NONE, ret); +} + +/** + * @brief Clear info of edge-data - invalid param. + */ +TEST(edgeData, clearInfoInvalidParam02_n) +{ + nns_edge_data_h data_h; + int ret; + + ret = nns_edge_data_create (&data_h); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + + nns_edge_handle_set_magic (data_h, NNS_EDGE_MAGIC_DEAD); + + ret = nns_edge_data_clear_info (data_h); + EXPECT_NE (NNS_EDGE_ERROR_NONE, ret); + + nns_edge_handle_set_magic (data_h, NNS_EDGE_MAGIC); + + ret = nns_edge_data_destroy (data_h); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); +} + +/** + * @brief Clear info of edge data. + */ +TEST(edgeData, clearInfo) +{ + nns_edge_data_h data_h; + char *value = NULL; + int ret; + + ret = nns_edge_data_create (&data_h); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + + ret = nns_edge_data_set_info (data_h, "temp-key", "temp-value"); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + + ret = nns_edge_data_get_info (data_h, "temp-key", &value); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + EXPECT_STREQ ("temp-value", value); + SAFE_FREE (value); + + ret = nns_edge_data_clear_info (data_h); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + + ret = nns_edge_data_get_info (data_h, "temp-key", &value); + EXPECT_NE (NNS_EDGE_ERROR_NONE, ret); + + ret = nns_edge_data_set_info (data_h, "temp-key", "temp-value"); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + + ret = nns_edge_data_get_info (data_h, "temp-key", &value); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + EXPECT_STREQ ("temp-value", value); + SAFE_FREE (value); + + ret = nns_edge_data_destroy (data_h); + EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE); +} + /** * @brief Create edge-data - invalid param. */ @@ -2136,6 +2208,76 @@ TEST(edgeData, invalidParam02_n) EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE); } +/** + * @brief Clear raw data in edge-data - invalid param. + */ +TEST(edgeData, clearInvalidParam01_n) +{ + int ret; + + ret = nns_edge_data_clear (NULL); + EXPECT_NE (NNS_EDGE_ERROR_NONE, ret); +} + +/** + * @brief Clear raw data in edge-data - invalid param. + */ +TEST(edgeData, clearInvalidParam02_n) +{ + nns_edge_data_h data_h; + int ret; + + ret = nns_edge_data_create (&data_h); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + + nns_edge_handle_set_magic (data_h, NNS_EDGE_MAGIC_DEAD); + + ret = nns_edge_data_clear (data_h); + EXPECT_NE (NNS_EDGE_ERROR_NONE, ret); + + nns_edge_handle_set_magic (data_h, NNS_EDGE_MAGIC); + + ret = nns_edge_data_destroy (data_h); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); +} + + +/** + * @brief Clear raw data in edge-data. + */ +TEST(edgeData, clear) +{ + nns_edge_data_h data_h; + void *data, *result; + nns_size_t data_len, result_len; + unsigned int count; + int ret; + + data_len = 10U * sizeof (int); + data = malloc (data_len); + ASSERT_TRUE (data != NULL); + + ret = nns_edge_data_create (&data_h); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + + ret = nns_edge_data_add (data_h, data, data_len, nns_edge_free); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + + ret = nns_edge_data_get_count (data_h, &count); + EXPECT_EQ (NNS_EDGE_ERROR_NONE , ret); + EXPECT_EQ (1U, count); + + ret = nns_edge_data_clear (data_h); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + + ret = nns_edge_data_get_count (data_h, &count); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + EXPECT_EQ (0U, count); + + ret = nns_edge_data_destroy (data_h); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); +} + /** * @brief Serialize edge-data - invalid param. */