[BACK]Return to dist.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / engine

Diff for /OpenXM_contrib2/asir2000/engine/dist.c between version 1.20 and 1.21

version 1.20, 2002/01/28 00:54:43 version 1.21, 2002/01/30 01:09:07
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM: OpenXM_contrib2/asir2000/engine/dist.c,v 1.19 2001/10/09 01:36:11 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/engine/dist.c,v 1.20 2002/01/28 00:54:43 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
   
Line 61 
Line 61 
 #define ORD_ELIM 9  #define ORD_ELIM 9
 #define ORD_WEYL_ELIM 10  #define ORD_WEYL_ELIM 10
 #define ORD_HOMO_WW_DRL 11  #define ORD_HOMO_WW_DRL 11
   #define ORD_DRL_ZIGZAG 12
   #define ORD_HOMO_WW_DRL_ZIGZAG 13
   
   int cmpdl_drl_zigzag(), cmpdl_homo_ww_drl_zigzag();
   
 int (*cmpdl)()=cmpdl_revgradlex;  int (*cmpdl)()=cmpdl_revgradlex;
 int (*primitive_cmpdl[3])() = {cmpdl_revgradlex,cmpdl_gradlex,cmpdl_lex};  int (*primitive_cmpdl[3])() = {cmpdl_revgradlex,cmpdl_gradlex,cmpdl_lex};
   
Line 136  void initd(struct order_spec *spec)
Line 140  void initd(struct order_spec *spec)
                                         cmpdl = cmpdl_weyl_elim; break;                                          cmpdl = cmpdl_weyl_elim; break;
                                 case ORD_HOMO_WW_DRL:                                  case ORD_HOMO_WW_DRL:
                                         cmpdl = cmpdl_homo_ww_drl; break;                                          cmpdl = cmpdl_homo_ww_drl; break;
                                   case ORD_DRL_ZIGZAG:
                                           cmpdl = cmpdl_drl_zigzag; break;
                                   case ORD_HOMO_WW_DRL_ZIGZAG:
                                           cmpdl = cmpdl_homo_ww_drl_zigzag; break;
                                 case ORD_LEX: default:                                  case ORD_LEX: default:
                                         cmpdl = cmpdl_lex; break;                                          cmpdl = cmpdl_lex; break;
                         }                          }
Line 1079  int cmpdl_homo_ww_drl(int n,DL d1,DL d2)
Line 1087  int cmpdl_homo_ww_drl(int n,DL d1,DL d2)
                 return -1;                  return -1;
   
         m = n>>1;          m = n>>1;
         for ( i = 0, e1 = e2 = 0; i < m; i++ ) {          for ( i = 0, e1 = e2 = 0, p1 = d1->d, p2 = d2->d; i < m; i++ ) {
                 e1 += current_weyl_weight_vector[i]*(d1->d[m+i] - d1->d[i]);                  e1 += current_weyl_weight_vector[i]*(p1[m+i] - p1[i]);
                 e2 += current_weyl_weight_vector[i]*(d2->d[m+i] - d2->d[i]);                  e2 += current_weyl_weight_vector[i]*(p2[m+i] - p2[i]);
         }          }
         if ( e1 > e2 )          if ( e1 > e2 )
                 return 1;                  return 1;
Line 1098  int cmpdl_homo_ww_drl(int n,DL d1,DL d2)
Line 1106  int cmpdl_homo_ww_drl(int n,DL d1,DL d2)
         for ( i= n - 1, p1 = d1->d+n-1, p2 = d2->d+n-1;          for ( i= n - 1, p1 = d1->d+n-1, p2 = d2->d+n-1;
                 i >= 0 && *p1 == *p2; i--, p1--, p2-- );                  i >= 0 && *p1 == *p2; i--, p1--, p2-- );
         return i < 0 ? 0 : (*p1 < *p2 ? 1 : -1);          return i < 0 ? 0 : (*p1 < *p2 ? 1 : -1);
   }
   
   int cmpdl_drl_zigzag(int n,DL d1,DL d2)
   {
           int i,t,m;
           int *p1,*p2;
   
           if ( d1->td > d2->td )
                   return 1;
           else if ( d1->td < d2->td )
                   return -1;
           else {
                   m = n>>1;
                   for ( i= m - 1, p1 = d1->d, p2 = d2->d; i >= 0; i-- ) {
                           if ( t = p1[m+i] - p2[m+i] ) return t > 0 ? -1 : 1;
                           if ( t = p1[i] - p2[i] ) return t > 0 ? -1 : 1;
                   }
                   return 0;
           }
   }
   
   int cmpdl_homo_ww_drl_zigzag(int n,DL d1,DL d2)
   {
           int e1,e2,m,i,t;
           int *p1,*p2;
   
           if ( d1->td > d2->td )
                   return 1;
           else if ( d1->td < d2->td )
                   return -1;
   
           m = n>>1;
           for ( i = 0, e1 = e2 = 0, p1 = d1->d, p2 = d2->d; i < m; i++ ) {
                   e1 += current_weyl_weight_vector[i]*(p1[m+i] - p1[i]);
                   e2 += current_weyl_weight_vector[i]*(p2[m+i] - p2[i]);
           }
           if ( e1 > e2 )
                   return 1;
           else if ( e1 < e2 )
                   return -1;
   
           e1 = d1->td - d1->d[n-1];
           e2 = d2->td - d2->d[n-1];
           if ( e1 > e2 )
                   return 1;
           else if ( e1 < e2 )
                   return -1;
   
           for ( i= m - 1, p1 = d1->d, p2 = d2->d; i >= 0; i-- ) {
                   if ( t = p1[m+i] - p2[m+i] ) return t > 0 ? -1 : 1;
                   if ( t = p1[i] - p2[i] ) return t > 0 ? -1 : 1;
           }
           return 0;
 }  }
   
 int cmpdl_order_pair(int n,DL d1,DL d2)  int cmpdl_order_pair(int n,DL d1,DL d2)

Legend:
Removed from v.1.20  
changed lines
  Added in v.1.21

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>