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

Diff for /OpenXM_contrib2/asir2000/engine/ndbug.c between version 1.1 and 1.2

version 1.1, 2004/03/15 07:32:20 version 1.2, 2004/03/15 08:44:53
Line 1 
Line 0 
 #include "nd.h"  
   
 ND nd_add_q(ND p1,ND p2)  
 {  
         int n,c,can;  
         ND r;  
         NM m1,m2,mr0,mr,s;  
         Q t;  
   
         if ( !p1 ) return p2;  
         else if ( !p2 ) return p1;  
         else {  
                 can = 0;  
                 for ( n = NV(p1), m1 = BDY(p1), m2 = BDY(p2), mr0 = 0; m1 && m2; ) {  
                         c = DL_COMPARE(DL(m1),DL(m2));  
                         switch ( c ) {  
                                 case 0:  
                                         addq(CQ(m1),CQ(m2),&t);  
                                         s = m1; m1 = NEXT(m1);  
                                         if ( t ) {  
                                                 can++; NEXTNM2(mr0,mr,s); CQ(mr) = (t);  
                                         } else {  
                                                 can += 2; FREENM(s);  
                                         }  
                                         s = m2; m2 = NEXT(m2); FREENM(s);  
                                         break;  
                                 case 1:  
                                         s = m1; m1 = NEXT(m1); NEXTNM2(mr0,mr,s);  
                                         break;  
                                 case -1:  
                                         s = m2; m2 = NEXT(m2); NEXTNM2(mr0,mr,s);  
                                         break;  
                         }  
                 }  
                 if ( !mr0 )  
                         if ( m1 ) mr0 = m1;  
                         else if ( m2 ) mr0 = m2;  
                         else return 0;  
                 else if ( m1 ) NEXT(mr) = m1;  
                 else if ( m2 ) NEXT(mr) = m2;  
                 else NEXT(mr) = 0;  
                 BDY(p1) = mr0;  
                 SG(p1) = MAX(SG(p1),SG(p2));  
                 LEN(p1) = LEN(p1)+LEN(p2)-can;  
                 FREEND(p2);  
                 return p1;  
         }  
 }  

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

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