[BACK]Return to qsort.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / stdlib

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/libc/stdlib/qsort.c between version 1.14 and 1.15

version 1.14, 2005/12/24 21:11:16 version 1.15, 2008/03/11 18:04:59
Line 68  static inline void  swapfunc __P((char *
Line 68  static inline void  swapfunc __P((char *
         es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1;          es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1;
   
 static inline void  static inline void
 swapfunc(a, b, n, swaptype)  swapfunc(char *a, char *b, size_t n, int swaptype)
         char *a, *b;  
         size_t n;  
         int swaptype;  
 {  {
   
         if (swaptype <= 1)          if (swaptype <= 1)
                 swapcode(long, a, b, n)                  swapcode(long, a, b, n)
         else          else
Line 90  swapfunc(a, b, n, swaptype)
Line 88  swapfunc(a, b, n, swaptype)
 #define vecswap(a, b, n) if ((n) > 0) swapfunc((a), (b), (size_t)(n), swaptype)  #define vecswap(a, b, n) if ((n) > 0) swapfunc((a), (b), (size_t)(n), swaptype)
   
 static inline char *  static inline char *
 med3(a, b, c, cmp)  med3(char *a, char *b, char *c,
         char *a, *b, *c;      int (*cmp) __P((const void *, const void *)))
         int (*cmp) __P((const void *, const void *));  
 {  {
   
         return cmp(a, b) < 0 ?          return cmp(a, b) < 0 ?
                (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a ))                 (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a ))
               :(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c ));                :(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c ));
 }  }
   
 void  void
 qsort(a, n, es, cmp)  qsort(void *a, size_t n, size_t es,
         void *a;      int (*cmp) __P((const void *, const void *)))
         size_t n, es;  
         int (*cmp) __P((const void *, const void *));  
 {  {
         char *pa, *pb, *pc, *pd, *pl, *pm, *pn;          char *pa, *pb, *pc, *pd, *pl, *pm, *pn;
         int d, r, swaptype, swap_cnt;          size_t d, r;
           int swaptype, swap_cnt, cmp_result;
   
         _DIAGASSERT(a != NULL);          _DIAGASSERT(a != NULL);
         _DIAGASSERT(cmp != NULL);          _DIAGASSERT(cmp != NULL);
Line 137  loop: SWAPINIT(a, es);
Line 134  loop: SWAPINIT(a, es);
   
         pc = pd = (char *) a + (n - 1) * es;          pc = pd = (char *) a + (n - 1) * es;
         for (;;) {          for (;;) {
                 while (pb <= pc && (r = cmp(pb, a)) <= 0) {                  while (pb <= pc && (cmp_result = cmp(pb, a)) <= 0) {
                         if (r == 0) {                          if (cmp_result == 0) {
                                 swap_cnt = 1;                                  swap_cnt = 1;
                                 swap(pa, pb);                                  swap(pa, pb);
                                 pa += es;                                  pa += es;
                         }                          }
                         pb += es;                          pb += es;
                 }                  }
                 while (pb <= pc && (r = cmp(pc, a)) >= 0) {                  while (pb <= pc && (cmp_result = cmp(pc, a)) >= 0) {
                         if (r == 0) {                          if (cmp_result == 0) {
                                 swap_cnt = 1;                                  swap_cnt = 1;
                                 swap(pc, pd);                                  swap(pc, pd);
                                 pd -= es;                                  pd -= es;

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.15

CVSweb <webmaster@jp.NetBSD.org>