-
- XBT_PUBLIC(void*) xbt_dynar_get_ptr(const xbt_dynar_t dynar, const unsigned long idx);
- XBT_PUBLIC(void*) xbt_dynar_insert_at_ptr(xbt_dynar_t const dynar, const int idx);
- XBT_PUBLIC(void*) xbt_dynar_push_ptr(xbt_dynar_t const dynar);
- XBT_PUBLIC(void*) xbt_dynar_pop_ptr(xbt_dynar_t const dynar);
-
-/** @} */
-/** @defgroup XBT_dynar_speed Speed optimized access to dynars of scalars
- * @ingroup XBT_dynar
- *
- * While the other functions use a memcpy to retrieve the content into the
- * user provided area, those ones use a regular affectation. It only works
- * for scalar values, but should be a little faster.
- *
- * @{
- */
-
- /** @brief Quick retrieval of scalar content
- * @hideinitializer */
+typedef struct xbt_dynar_s *xbt_dynar_t;
+/** constant dynar */
+typedef const struct xbt_dynar_s* const_xbt_dynar_t;
+/* @warning DO NOT USE THIS STRUCTURE DIRECTLY! Use the public interface, even if it's public for sake of inlining */
+typedef struct xbt_dynar_s {
+ unsigned long size;
+ unsigned long used;
+ unsigned long elmsize;
+ void* data;
+ void_f_pvoid_t free_f;
+} s_xbt_dynar_t;
+
+XBT_PUBLIC xbt_dynar_t xbt_dynar_new(const unsigned long elm_size, void_f_pvoid_t free_f);
+XBT_PUBLIC void xbt_dynar_free(xbt_dynar_t* dynar);
+XBT_PUBLIC void xbt_dynar_free_container(xbt_dynar_t* dynar);
+XBT_PUBLIC void xbt_dynar_shrink(xbt_dynar_t dynar, int empty_slots);
+
+/* Dynar as a regular array */
+XBT_PUBLIC void xbt_dynar_get_cpy(const_xbt_dynar_t dynar, unsigned long idx, void* dst);
+
+XBT_PUBLIC void xbt_dynar_insert_at(xbt_dynar_t dynar, int idx, const void* src);
+XBT_PUBLIC void xbt_dynar_remove_at(xbt_dynar_t dynar, int idx, void* dst);
+
+XBT_PUBLIC int xbt_dynar_member(const_xbt_dynar_t dynar, const void* elem);
+XBT_PUBLIC void xbt_dynar_sort(const_xbt_dynar_t dynar, int_f_cpvoid_cpvoid_t compar_fn);
+XBT_ATTRIB_DEPRECATED_v331("This function will be removed") XBT_PUBLIC void* xbt_dynar_to_array(xbt_dynar_t dynar);
+
+/* Dynar size */
+XBT_PUBLIC void xbt_dynar_reset(xbt_dynar_t dynar);
+XBT_PUBLIC unsigned long xbt_dynar_length(const_xbt_dynar_t dynar);
+XBT_PUBLIC int xbt_dynar_is_empty(const_xbt_dynar_t dynar);
+
+/* Perl-like interface */
+XBT_PUBLIC void xbt_dynar_push(xbt_dynar_t dynar, const void* src);
+XBT_PUBLIC void xbt_dynar_pop(xbt_dynar_t dynar, void* dst);
+XBT_PUBLIC void xbt_dynar_unshift(xbt_dynar_t dynar, const void* src);
+XBT_PUBLIC void xbt_dynar_shift(xbt_dynar_t dynar, void* dst);
+XBT_PUBLIC void xbt_dynar_map(const_xbt_dynar_t dynar, void_f_pvoid_t op);
+
+/* Direct content manipulation*/
+XBT_PUBLIC void* xbt_dynar_set_at_ptr(const xbt_dynar_t dynar, unsigned long idx);
+XBT_PUBLIC void* xbt_dynar_get_ptr(const_xbt_dynar_t dynar, unsigned long idx);
+XBT_PUBLIC void* xbt_dynar_insert_at_ptr(xbt_dynar_t dynar, int idx);
+XBT_PUBLIC void* xbt_dynar_push_ptr(xbt_dynar_t dynar);
+XBT_PUBLIC void* xbt_dynar_pop_ptr(xbt_dynar_t dynar);
+
+/* Dynars of scalar */
+/** @brief Quick retrieval of scalar content
+ * @hideinitializer */