X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f9436b840852218b39dce22d6057b6f223168daa..1873a02acdc52506c010f43b4c78a8b8400dc0de:/src/xbt/dynar.cpp diff --git a/src/xbt/dynar.cpp b/src/xbt/dynar.cpp index 84ba004a4d..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 @@ -365,9 +365,6 @@ extern "C" void xbt_dynar_insert_at(xbt_dynar_t const dynar, const int idx, cons */ extern "C" void xbt_dynar_remove_at(xbt_dynar_t const dynar, const int idx, void* const object) { - unsigned long nb_shift; - unsigned long offset; - _sanity_check_dynar(dynar); _check_inbound_idx(dynar, idx); @@ -377,10 +374,10 @@ extern "C" void xbt_dynar_remove_at(xbt_dynar_t const dynar, const int idx, void dynar->free_f(_xbt_dynar_elm(dynar, idx)); } - nb_shift = dynar->used - 1 - idx; + unsigned long nb_shift = dynar->used - 1 - 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 + 1), offset); } @@ -396,10 +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; - unsigned long cur; - if (not n) return; @@ -408,15 +401,15 @@ extern "C" void xbt_dynar_remove_n_at(xbt_dynar_t const dynar, const unsigned in _check_inbound_idx(dynar, idx + n - 1); if (dynar->free_f) { - for (cur = idx; cur < idx + n; cur++) { + for (unsigned long cur = idx; cur < idx + n; cur++) { dynar->free_f(_xbt_dynar_elm(dynar, cur)); } } - 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); } @@ -458,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). */ @@ -474,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. @@ -621,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 @@ -744,7 +690,6 @@ XBT_TEST_UNIT("int", test_dynar_int, "Dynars of integers") /* Vars_decl [doxygen cruft] */ int i; unsigned int cursor; - int *iptr; xbt_test_add("==== Traverse the empty dynar"); xbt_dynar_t d = xbt_dynar_new(sizeof(int), nullptr); @@ -767,7 +712,7 @@ XBT_TEST_UNIT("int", test_dynar_int, "Dynars of integers") /* 2. Traverse manually the dynar */ for (cursor = 0; cursor < NB_ELEM; cursor++) { - iptr = (int*) xbt_dynar_get_ptr(d, cursor); + int* iptr = (int*)xbt_dynar_get_ptr(d, cursor); xbt_test_assert(cursor == (unsigned int)*iptr, "The retrieved value is not the same than the injected one (%u!=%d)", cursor, *iptr); }