X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ab4a25d79a9621a8732588406fdbe922a458ef5b..1873a02acdc52506c010f43b4c78a8b8400dc0de:/src/xbt/dynar.cpp diff --git a/src/xbt/dynar.cpp b/src/xbt/dynar.cpp index 47300c393d..4c44eb35d9 100644 --- a/src/xbt/dynar.cpp +++ b/src/xbt/dynar.cpp @@ -1,6 +1,6 @@ /* 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 @@ -393,9 +393,6 @@ extern "C" void xbt_dynar_remove_at(xbt_dynar_t const dynar, const int idx, void */ 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; @@ -409,10 +406,10 @@ extern "C" void xbt_dynar_remove_n_at(xbt_dynar_t const dynar, const unsigned in } } - 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); } @@ -454,7 +451,7 @@ extern "C" unsigned int xbt_dynar_search(xbt_dynar_t const dynar, void* const el * * 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). */ @@ -470,7 +467,7 @@ extern "C" signed int xbt_dynar_search_or_negative(xbt_dynar_t const dynar, void 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. @@ -617,54 +614,7 @@ extern "C" xbt_dynar_t xbt_dynar_sort_strings(xbt_dynar_t dynar) 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