[BACK]Return to warshall.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / yacc

Diff for /src/usr.bin/yacc/warshall.c between version 1.9 and 1.10

version 1.9, 2009/10/27 23:59:50 version 1.10, 2014/03/13 00:56:39
Line 1 
Line 1 
 /*      $OpenBSD$       */  /* $OpenBSD$     */
 /*      $NetBSD: warshall.c,v 1.4 1996/03/19 03:21:51 jtc Exp $ */  /* $NetBSD: warshall.c,v 1.4 1996/03/19 03:21:51 jtc Exp $       */
   
 /*  /*
  * Copyright (c) 1989 The Regents of the University of California.   * Copyright (c) 1989 The Regents of the University of California.
Line 40 
Line 40 
 void  void
 transitive_closure(unsigned int *R, int n)  transitive_closure(unsigned int *R, int n)
 {  {
     int rowsize;          int rowsize;
     unsigned i;          unsigned i;
     unsigned *rowj;          unsigned *rowj;
     unsigned *rp;          unsigned *rp;
     unsigned *rend;          unsigned *rend;
     unsigned *ccol;          unsigned *ccol;
     unsigned *relend;          unsigned *relend;
     unsigned *cword;          unsigned *cword;
     unsigned *rowi;          unsigned *rowi;
   
     rowsize = WORDSIZE(n);          rowsize = WORDSIZE(n);
     relend = R + n*rowsize;          relend = R + n * rowsize;
   
     cword = R;          cword = R;
     i = 0;          i = 0;
     rowi = R;          rowi = R;
     while (rowi < relend)          while (rowi < relend) {
     {                  ccol = cword;
         ccol = cword;                  rowj = R;
         rowj = R;  
   
         while (rowj < relend)                  while (rowj < relend) {
         {                          if (*ccol & (1 << i)) {
             if (*ccol & (1 << i))                                  rp = rowi;
             {                                  rend = rowj + rowsize;
                 rp = rowi;                                  while (rowj < rend)
                 rend = rowj + rowsize;                                          *rowj++ |= *rp++;
                 while (rowj < rend)                          } else {
                     *rowj++ |= *rp++;                                  rowj += rowsize;
             }                          }
             else  
             {  
                 rowj += rowsize;  
             }  
   
             ccol += rowsize;                          ccol += rowsize;
         }                  }
   
         if (++i >= BITS_PER_WORD)                  if (++i >= BITS_PER_WORD) {
         {                          i = 0;
             i = 0;                          cword++;
             cword++;                  }
                   rowi += rowsize;
         }          }
   
         rowi += rowsize;  
     }  
 }  }
   
 void  void
 reflexive_transitive_closure(unsigned int *R, int n)  reflexive_transitive_closure(unsigned int *R, int n)
 {  {
     int rowsize;          int rowsize;
     unsigned i;          unsigned i;
     unsigned *rp;          unsigned *rp;
     unsigned *relend;          unsigned *relend;
   
     transitive_closure(R, n);          transitive_closure(R, n);
   
     rowsize = WORDSIZE(n);          rowsize = WORDSIZE(n);
     relend = R + n*rowsize;          relend = R + n * rowsize;
   
     i = 0;          i = 0;
     rp = R;          rp = R;
     while (rp < relend)          while (rp < relend) {
     {                  *rp |= (1 << i);
         *rp |= (1 << i);                  if (++i >= BITS_PER_WORD) {
         if (++i >= BITS_PER_WORD)                          i = 0;
         {                          rp++;
             i = 0;                  }
             rp++;                  rp += rowsize;
         }          }
   
         rp += rowsize;  
     }  
 }  }

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10