X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fmpsort.c;h=340091a2920de938e6933572d8ebc135524176a3;hb=bc835ff38e3fb6a3d0f5ed6eed0981dde8884124;hp=d6b1e0e4eefc0ba8a20edd63bf4b377aa8fb98a6;hpb=b4e662d1745d8b26cb6f8d544a10e84c78cc211f;p=gnulib.git diff --git a/lib/mpsort.c b/lib/mpsort.c index d6b1e0e4e..340091a29 100644 --- a/lib/mpsort.c +++ b/lib/mpsort.c @@ -2,19 +2,18 @@ Copyright (C) 2007 Free Software Foundation, Inc. - This program is free software; you can redistribute it and/or modify + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ /* Written by Paul Eggert. */ @@ -29,15 +28,15 @@ typedef int (*comparison_function) (void const *, void const *); static void mpsort_with_tmp (void const **restrict, size_t, - void const **restrict, comparison_function); + void const **restrict, comparison_function); /* Sort a vector BASE containing N pointers, placing the sorted array into TMP. Compare pointers with CMP. N must be at least 2. */ static void mpsort_into_tmp (void const **restrict base, size_t n, - void const **restrict tmp, - comparison_function cmp) + void const **restrict tmp, + comparison_function cmp) { size_t n1 = n / 2; size_t n2 = n - n1; @@ -57,23 +56,23 @@ mpsort_into_tmp (void const **restrict base, size_t n, for (;;) if (cmp (ba, bb) <= 0) { - *tmp++ = ba; - a++; - if (a == alim) - { - a = b; - alim = blim; - break; - } - ba = base[a]; + *tmp++ = ba; + a++; + if (a == alim) + { + a = b; + alim = blim; + break; + } + ba = base[a]; } else { - *tmp++ = bb; - b++; - if (b == blim) - break; - bb = base[b]; + *tmp++ = bb; + b++; + if (b == blim) + break; + bb = base[b]; } memcpy (tmp, base + a, (alim - a) * sizeof *base); @@ -85,21 +84,21 @@ mpsort_into_tmp (void const **restrict base, size_t n, static void mpsort_with_tmp (void const **restrict base, size_t n, - void const **restrict tmp, - comparison_function cmp) + void const **restrict tmp, + comparison_function cmp) { if (n <= 2) { if (n == 2) - { - void const *p0 = base[0]; - void const *p1 = base[1]; - if (! (cmp (p0, p1) <= 0)) - { - base[0] = p1; - base[1] = p0; - } - } + { + void const *p0 = base[0]; + void const *p1 = base[1]; + if (! (cmp (p0, p1) <= 0)) + { + base[0] = p1; + base[1] = p0; + } + } } else { @@ -116,33 +115,33 @@ mpsort_with_tmp (void const **restrict base, size_t n, mpsort_with_tmp (base + n1, n2, tmp, cmp); if (n1 < 2) - tmp[0] = base[0]; + tmp[0] = base[0]; else - mpsort_into_tmp (base, n1, tmp, cmp); + mpsort_into_tmp (base, n1, tmp, cmp); tt = tmp[t]; bb = base[b]; for (i = 0; ; ) - if (cmp (tt, bb) <= 0) - { - base[i++] = tt; - t++; - if (t == tlim) - break; - tt = tmp[t]; - } - else - { - base[i++] = bb; - b++; - if (b == blim) - { - memcpy (base + i, tmp + t, (tlim - t) * sizeof *base); - break; - } - bb = base[b]; - } + if (cmp (tt, bb) <= 0) + { + base[i++] = tt; + t++; + if (t == tlim) + break; + tt = tmp[t]; + } + else + { + base[i++] = bb; + b++; + if (b == blim) + { + memcpy (base + i, tmp + t, (tlim - t) * sizeof *base); + break; + } + bb = base[b]; + } } }