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

Diff for /OpenXM_contrib2/asir2000/builtin/strobj.c between version 1.76 and 1.77

version 1.76, 2005/10/15 02:34:13 version 1.77, 2005/10/15 07:40:59
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/builtin/strobj.c,v 1.75 2005/10/15 01:10:15 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/strobj.c,v 1.76 2005/10/15 02:34:13 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 64  struct TeXSymbol {
Line 64  struct TeXSymbol {
 };  };
   
 #define OPNAME(f) (((ARF)FA0(f))->name[0])  #define OPNAME(f) (((ARF)FA0(f))->name[0])
   #define IS_ZERO(f) (((f)->id==I_FORMULA) && FA0(f)==0 )
 #define IS_BINARYPWR(f) (((f)->id==I_BOP) &&(OPNAME(f)=='^'))  #define IS_BINARYPWR(f) (((f)->id==I_BOP) &&(OPNAME(f)=='^'))
 #define IS_NARYADD(f) (((f)->id==I_NARYOP) &&(OPNAME(f)=='+'))  #define IS_NARYADD(f) (((f)->id==I_NARYOP) &&(OPNAME(f)=='+'))
 #define IS_NARYMUL(f) (((f)->id==I_NARYOP) &&(OPNAME(f)=='*'))  #define IS_NARYMUL(f) (((f)->id==I_NARYOP) &&(OPNAME(f)=='*'))
Line 2031  int fnode_is_integer(FNODE f)
Line 2032  int fnode_is_integer(FNODE f)
         }          }
 }  }
   
 int fnode_is_zero(FNODE f)  
 {  
         Q n;  
   
         n = eval(f);  
         if ( !n ) return 1;  
         else return 0;  
 }  
   
 int fnode_is_nonnegative_integer(FNODE f)  int fnode_is_nonnegative_integer(FNODE f)
 {  {
         Q n;          Q n;
Line 2216  FNODE fnode_normalize_add(FNODE f1,FNODE f2,int expand
Line 2208  FNODE fnode_normalize_add(FNODE f1,FNODE f2,int expand
         int s;          int s;
         Num c1,c2,c;          Num c1,c2,c;
   
         if ( fnode_is_zero(f1) ) return f2;          if ( IS_ZERO(f1) ) return f2;
         else if ( fnode_is_zero(f2) ) return f1;          else if ( IS_ZERO(f2) ) return f1;
         f1 = to_naryadd(f1); f2 = to_naryadd(f2);          f1 = to_naryadd(f1); f2 = to_naryadd(f2);
         n1 = (NODE)FA1(f1); n2 = (NODE)FA1(f2);          n1 = (NODE)FA1(f1); n2 = (NODE)FA1(f2);
         r0 = 0;          r0 = 0;
Line 2270  FNODE fnode_normalize_mul(FNODE f1,FNODE f2,int expand
Line 2262  FNODE fnode_normalize_mul(FNODE f1,FNODE f2,int expand
         Num c1,c2,c,e;          Num c1,c2,c,e;
         int l1,l,i,j;          int l1,l,i,j;
   
         if ( fnode_is_zero(f1) || fnode_is_zero(f2) ) return 0;          if ( IS_ZERO(f1) || IS_ZERO(f2) ) return mkfnode(1,I_FORMULA,0);
         else if ( fnode_is_number(f1) )          else if ( fnode_is_number(f1) )
                 return fnode_normalize_mul_coef((Num)eval(f1),f2,expand);                  return fnode_normalize_mul_coef((Num)eval(f1),f2,expand);
         else if ( fnode_is_number(f2) )          else if ( fnode_is_number(f2) )
Line 2332  FNODE fnode_normalize_pwr(FNODE f1,FNODE f2,int expand
Line 2324  FNODE fnode_normalize_pwr(FNODE f1,FNODE f2,int expand
         NODE arg,n;          NODE arg,n;
         Q q;          Q q;
   
         if ( fnode_is_zero(f2) ) return mkfnode(1,I_FORMULA,ONE);          if ( IS_ZERO(f2) ) return mkfnode(1,I_FORMULA,ONE);
         else if ( fnode_is_zero(f1) ) return mkfnode(1,I_FORMULA,0);          else if ( IS_ZERO(f1) ) return mkfnode(1,I_FORMULA,0);
         else if ( fnode_is_one(f2) ) return f1;          else if ( fnode_is_one(f2) ) return f1;
         else if ( fnode_is_number(f1) )          else if ( fnode_is_number(f1) )
                 if ( fnode_is_integer(f2) ) {                  if ( fnode_is_integer(f2) ) {
Line 2371  FNODE fnode_expand_pwr(FNODE f,int n)
Line 2363  FNODE fnode_expand_pwr(FNODE f,int n)
         FNODE f1,f2;          FNODE f1,f2;
   
         if ( !n ) return mkfnode(1,I_FORMULA,ONE);          if ( !n ) return mkfnode(1,I_FORMULA,ONE);
         else if ( fnode_is_zero(f) ) return mkfnode(1,I_FORMULA,0);          else if ( IS_ZERO(f) ) return mkfnode(1,I_FORMULA,0);
         else if ( n == 1 ) return f;          else if ( n == 1 ) return f;
         else {          else {
                 n1 = n/2;                  n1 = n/2;

Legend:
Removed from v.1.76  
changed lines
  Added in v.1.77

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