/* a generic DYNamic ARray implementation. */
-/* Copyright (c) 2004-2015. The SimGrid Team.
+/* Copyright (c) 2004-2017. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
*/
extern "C" void xbt_dynar_remove_n_at(xbt_dynar_t const dynar, const unsigned int n, const int idx)
{
- unsigned long nb_shift;
- unsigned long offset;
-
if (not n)
return;
}
}
- nb_shift = dynar->used - n - idx;
+ unsigned long nb_shift = dynar->used - n - idx;
if (nb_shift) {
- offset = nb_shift * dynar->elmsize;
+ unsigned long offset = nb_shift * dynar->elmsize;
memmove(_xbt_dynar_elm(dynar, idx), _xbt_dynar_elm(dynar, idx + n), offset);
}
*
* Beware that if your dynar contains pointed values (such as strings) instead of scalar, this function is probably not
* what you want. Check the documentation of xbt_dynar_search() for more info.
- *
+ *
* Note that usually, the dynar indices are unsigned integers. If you have more than 2 million elements in your dynar,
* this very function will not work (but the other will).
*/
return -1;
}
-/** @brief Returns a boolean indicating whether the element is part of the dynar
+/** @brief Returns a boolean indicating whether the element is part of the dynar
*
* Beware that if your dynar contains pointed values (such as strings) instead of scalar, this function is probably not
* what you want. Check the documentation of xbt_dynar_search() for more info.
return dynar; // to enable functional uses
}
-/** @brief Sorts a dynar according to their color assuming elements can have only three colors.
- * Since there are only three colors, it is linear and much faster than a classical sort.
- * See for example http://en.wikipedia.org/wiki/Dutch_national_flag_problem
- *
- * \param dynar the dynar to sort
- * \param color the color function of type (int (compar_fn*) (void*) (void*)). The return value of color is assumed to
- * be 0, 1, or 2.
- *
- * At the end of the call, elements with color 0 are at the beginning of the dynar, elements with color 2 are at the
- * end and elements with color 1 are in the middle.
- *
- * Remark: if the elements stored in the dynar are structures, the color function has to retrieve the field to sort
- * first.
- */
-extern "C" void xbt_dynar_three_way_partition(xbt_dynar_t const dynar, int_f_pvoid_t color)
-{
- unsigned long int i;
- unsigned long int p = -1;
- unsigned long int q = dynar->used;
- const unsigned long elmsize = dynar->elmsize;
- char* tmp[elmsize];
- void *elm;
-
- for (i = 0; i < q;) {
- void *elmi = _xbt_dynar_elm(dynar, i);
- int colori = color(elmi);
-
- if (colori == 1) {
- ++i;
- } else {
- if (colori == 0) {
- ++p;
- elm = _xbt_dynar_elm(dynar, p);
- ++i;
- } else { /* colori == 2 */
- --q;
- elm = _xbt_dynar_elm(dynar, q);
- }
- if (elm != elmi) {
- memcpy(tmp, elm, elmsize);
- memcpy(elm, elmi, elmsize);
- memcpy(elmi, tmp, elmsize);
- }
- }
- }
-}
-
-/** @brief Transform a dynar into a nullptr terminated array.
+/** @brief Transform a dynar into a nullptr terminated array.
*
* \param dynar the dynar to transform
* \return pointer to the first element of the array