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

Diff for /OpenXM_contrib2/asir2018/engine/dist.c between version 1.19 and 1.20

version 1.19, 2019/12/27 08:13:59 version 1.20, 2020/02/03 05:51:52
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/asir2018/engine/dist.c,v 1.18 2019/12/12 04:44:59 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2018/engine/dist.c,v 1.19 2019/12/27 08:13:59 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
   
Line 3212  int compdmm_schreyer(int n,DMM m1,DMM m2)
Line 3212  int compdmm_schreyer(int n,DMM m1,DMM m2)
   }    }
 }  }
   
   int compdmm_schreyer_old(int n,DMM m1,DMM m2)
   {
     int pos1,pos2,t,npos1,npos2;
     DMM *in,*sum;
     DMMstack s;
     static DL d1=0,d2=0;
     static int dlen=0;
   
     sch_count++;
     pos1 = m1->pos; pos2 = m2->pos;
     if ( pos1 == pos2 ) return (*cmpdl)(n,m1->dl,m2->dl);
     if ( n > dlen ) {
       NEWDL(d1,n); NEWDL(d2,n); dlen = n;
     }
     sum = dmm_stack->sum;
     _copydl(n,m1->dl,d1);
     _copydl(n,m2->dl,d2);
     for ( s = dmm_stack; s; s = NEXT(s) ) {
       in = s->in;
       _addtodl(n,in[pos1]->dl,d1);
       _addtodl(n,in[pos2]->dl,d2);
       if ( in[pos1]->pos == in[pos2]->pos && _eqdl(n,d1,d2)) {
         if ( pos1 < pos2 ) return 1;
         else if ( pos1 > pos2 ) return -1;
         else return 0;
       }
       pos1 = in[pos1]->pos;
       pos2 = in[pos2]->pos;
       if ( pos1 == pos2 ) return (*cmpdl)(n,d1,d2);
     }
     if ( dpm_base_ordtype == 1 ) {
       if ( pos1 < pos2 ) return 1;
       else if ( pos1 > pos2 ) return -1;
       else return (*cmpdl)(n,d1,d2);
     } else {
       t = (*cmpdl)(n,d1,d2);
       if ( t ) return t;
       else if ( pos1 < pos2 ) return 1;
       else if ( pos1 > pos2 ) return -1;
       else return 0;
     }
   }
   
   extern int NaiveSchreyer;
   
 int compdmm(int n,DMM m1,DMM m2)  int compdmm(int n,DMM m1,DMM m2)
 {  {
   int t;    int t,t1;
   int *base_ord;    int *base_ord;
   
   switch ( dpm_ordtype ) {    switch ( dpm_ordtype ) {
Line 3235  int compdmm(int n,DMM m1,DMM m2)
Line 3280  int compdmm(int n,DMM m1,DMM m2)
     else if ( m1->pos > m2->pos ) return -1;      else if ( m1->pos > m2->pos ) return -1;
     else return (*cmpdl)(n,m1->dl,m2->dl);      else return (*cmpdl)(n,m1->dl,m2->dl);
   case 3: /* Schreyer */    case 3: /* Schreyer */
     return compdmm_schreyer(n,m1,m2);      if ( NaiveSchreyer )
         t = compdmm_schreyer_old(n,m1,m2);
       else
         t = compdmm_schreyer(n,m1,m2);
       return t;
   case 4:  /* POT with base_ord */    case 4:  /* POT with base_ord */
     base_ord = dp_current_spec->module_base_ord;      base_ord = dp_current_spec->module_base_ord;
     if ( base_ord[m1->pos] < base_ord[m2->pos] ) return 1;      if ( base_ord[m1->pos] < base_ord[m2->pos] ) return 1;

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

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