[Data] Add data and info clear function
authorgichan2-jang <gichan2.jang@samsung.com>
Mon, 14 Aug 2023 07:34:22 +0000 (16:34 +0900)
committerjaeyun-jung <39614140+jaeyun-jung@users.noreply.github.com>
Wed, 16 Aug 2023 05:15:30 +0000 (14:15 +0900)
Add function to clear raw data and info of edge data.
This does not release the edge data handle.

Signed-off-by: gichan2-jang <gichan2.jang@samsung.com>
include/nnstreamer-edge.h
src/libnnstreamer-edge/nnstreamer-edge-data.c
tests/unittest_nnstreamer-edge.cc

index df8d0f859b5bc8136bb2775b7b40205869b440e8..93b26bd911a42103de8371c92bdb01259e564f0e 100644 (file)
@@ -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.
index 4aa8533f138d6f83117cde776b7573357f03c803..39a6476083b3bafc50315455052a99b83066bfe6 100644 (file)
@@ -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.
  */
index f644691b65838c82e4ddc73cb4ed21ac102b6bee..567d3736232ba93427d757f05708a5009298fb69 100644 (file)
@@ -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.
  */