Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[sonar] Replace redundant type with 'auto'.
[simgrid.git] / src / xbt / dynar.cpp
index 2213a3cbebc886d401275b54fd8e3bd2483a23e4..2cf9593eb9e5ad7637f335fb7f93b23c46bfa67c 100644 (file)
@@ -81,7 +81,7 @@ static inline void _xbt_dynar_get_elm(void* dst, const_xbt_dynar_t dynar, unsign
  */
 xbt_dynar_t xbt_dynar_new(const unsigned long elmsize, void_f_pvoid_t free_f)
 {
-  xbt_dynar_t dynar = xbt_new0(s_xbt_dynar_t, 1);
+  auto* dynar = xbt_new0(s_xbt_dynar_t, 1);
 
   dynar->size = 0;
   dynar->used = 0;
@@ -412,3 +412,20 @@ void xbt_dynar_sort(const_xbt_dynar_t dynar, int_f_cpvoid_cpvoid_t compar_fn)
   if (dynar->data != nullptr)
     qsort(dynar->data, dynar->used, dynar->elmsize, compar_fn);
 }
+
+/** @brief Transform a dynar into a nullptr terminated array.
+ *
+ *  @param dynar the dynar to transform
+ *  @return pointer to the first element of the array
+ *
+ *  Note: The dynar won't be usable afterwards.
+ */
+void* xbt_dynar_to_array(xbt_dynar_t dynar)
+{
+  void* res;
+  xbt_dynar_shrink(dynar, 1);
+  memset(xbt_dynar_push_ptr(dynar), 0, dynar->elmsize);
+  res = dynar->data;
+  xbt_free(dynar);
+  return res;
+}