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

Diff for /OpenXM_contrib2/asir2000/builtin/poly.c between version 1.6 and 1.9

version 1.6, 2001/03/13 01:10:24 version 1.9, 2001/05/02 09:03: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/asir2000/builtin/poly.c,v 1.5 2000/08/22 05:03:59 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/poly.c,v 1.8 2001/03/29 09:49:56 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 100  void Pis_irred_gf2();
Line 100  void Pis_irred_gf2();
 void Pis_irred_ddd_gf2();  void Pis_irred_ddd_gf2();
 void Pget_next_fft_prime();  void Pget_next_fft_prime();
 void Puadj_coef();  void Puadj_coef();
   void Preorder();
   void Phomogeneous_part();
   void Phomogeneous_deg();
 void simp_ff(Obj,Obj *);  void simp_ff(Obj,Obj *);
 void ranp(int,UP *);  void ranp(int,UP *);
 void field_order_ff(N *);  void field_order_ff(N *);
Line 111  extern int lm_lazy;
Line 114  extern int lm_lazy;
 int current_ff;  int current_ff;
   
 struct ftab poly_tab[] = {  struct ftab poly_tab[] = {
           {"homogeneous_deg",Phomogeneous_deg,-2},
           {"homogeneous_part",Phomogeneous_part,-3},
           {"reorder",Preorder,3},
         {"uadj_coef",Puadj_coef,3},          {"uadj_coef",Puadj_coef,3},
         {"ranp",Pranp,2},          {"ranp",Pranp,2},
         {"p_mag",Pp_mag,1},          {"p_mag",Pp_mag,1},
Line 215  struct ftab poly_tab[] = {
Line 221  struct ftab poly_tab[] = {
   
 extern V up_var;  extern V up_var;
   
   void Phomogeneous_part(arg,rp)
   NODE arg;
   P *rp;
   {
           if ( argc(arg) == 2 )
                   exthp(CO,(P)ARG0(arg),QTOS((Q)ARG1(arg)),rp);
           else
                   exthpc_generic(CO,(P)ARG0(arg),QTOS((Q)ARG2(arg)),
                           VR((P)ARG1(arg)),rp);
   }
   
   void Phomogeneous_deg(arg,rp)
   NODE arg;
   Q *rp;
   {
           int d;
   
           if ( argc(arg) == 1 )
                   d = homdeg((P)ARG0(arg));
           else
                   d = getchomdeg(VR((P)ARG1(arg)),(P)ARG0(arg));
           STOQ(d,*rp);
   }
   
   /*
           p1 = reorder(p,ovl,nvl) => p1 is 'sorted accoding to nvl.
   */
   
   void Preorder(arg,rp)
   NODE arg;
   P *rp;
   {
           VL ovl,nvl,tvl;
           NODE n;
   
           for ( ovl = 0, n = BDY((LIST)ARG1(arg)); n; n = NEXT(n) ) {
                   if ( !ovl ) {
                           NEWVL(ovl); tvl = ovl;
                   } else {
                           NEWVL(NEXT(tvl)); tvl = NEXT(tvl);
                   }
                           VR(tvl) = VR((P)BDY(n));
           }
           for ( nvl = 0, n = BDY((LIST)ARG2(arg)); n; n = NEXT(n) ) {
                   if ( !nvl ) {
                           NEWVL(nvl); tvl = nvl;
                   } else {
                           NEWVL(NEXT(tvl)); tvl = NEXT(tvl);
                   }
                           VR(tvl) = VR((P)BDY(n));
           }
           reorderp(nvl,ovl,(P)ARG0(arg),rp);
   }
   
 /*  /*
         uadj_coef(F,M,M2)          uadj_coef(F,M,M2)
         if ( F is a non-negative integer )          if ( F is a non-negative integer )
Line 666  Q *rp;
Line 726  Q *rp;
         STOQ(ret,*rp);          STOQ(ret,*rp);
 }  }
   
 extern int current_gfs_ext;  extern P current_gfs_ext;
   extern int current_gfs_p;
 extern int current_gfs_q;  extern int current_gfs_q;
 extern int current_gfs_q1;  extern int current_gfs_q1;
 extern int *current_gfs_plus1;  extern int *current_gfs_plus1;
Line 678  NODE arg;
Line 739  NODE arg;
 Obj *rp;  Obj *rp;
 {  {
         int ac;          int ac;
           int d;
         Obj mod,defpoly;          Obj mod,defpoly;
         N n;          N n;
         UP up;          UP up;
Line 694  Obj *rp;
Line 756  Obj *rp;
                         error("setmod_ff : invalid argument");                          error("setmod_ff : invalid argument");
                 switch ( OID(mod) ) {                  switch ( OID(mod) ) {
                         case O_N:                          case O_N:
                                 if ( SGN((Q)mod) < 0 ) {                                  current_ff = FF_GFP;
                                         /* small finite field; primitive root representation */                                  setmod_lm(NM((Q)mod));
                                         current_ff = FF_GFS;  
                                         setmod_sf(BD(NM((Q)mod))[0],1);  
                                 } else {  
                                         current_ff = FF_GFP;  
                                         setmod_lm(NM((Q)mod));  
                                 }  
                                 break;                                  break;
                         case O_P:                          case O_P:
                                 current_ff = FF_GF2N;                                  current_ff = FF_GF2N;
Line 710  Obj *rp;
Line 766  Obj *rp;
                                 error("setmod_ff : invalid argument");                                  error("setmod_ff : invalid argument");
                 }                  }
         } else if ( ac == 2 ) {          } else if ( ac == 2 ) {
                 mod = (Obj)ARG1(arg);                  if ( OID(ARG0(arg)) == O_N ) {
                 if ( SGN((Q)mod) < 0 ) {                          /* small finite field; primitive root representation */
                         error("setmod_ff : not implemented yet");                          current_ff = FF_GFS;
                           setmod_sf(QTOS((Q)ARG0(arg)),QTOS((Q)ARG1(arg)));
                 } else {                  } else {
                           mod = (Obj)ARG1(arg);
                         current_ff = FF_GFPN;                          current_ff = FF_GFPN;
                         defpoly = (Obj)ARG0(arg);                          defpoly = (Obj)ARG0(arg);
                         if ( !mod || !defpoly )                          if ( !mod || !defpoly )
Line 734  Obj *rp;
Line 792  Obj *rp;
                         MKLIST(list,n0);                          MKLIST(list,n0);
                         *rp = (Obj)list; break;                          *rp = (Obj)list; break;
                 case FF_GFS:                  case FF_GFS:
                         STOQ(current_gfs_q,q);                          STOQ(current_gfs_p,q);
                         STOQ(current_gfs_iton[1],r);                          if ( current_gfs_ext ) {
                         n0 = mknode(3,ONE,q,r);                                  enc_to_p(current_gfs_p,current_gfs_iton[1],
                                           VR(current_gfs_ext),&p);
                                   n0 = mknode(3,q,current_gfs_ext,p);
                           } else {
                                   STOQ(current_gfs_iton[1],r);
                                   n0 = mknode(3,q,current_gfs_ext,r);
                           }
                         MKLIST(list,n0);                          MKLIST(list,n0);
                         *rp = (Obj)list; break;                          *rp = (Obj)list; break;
                 default:                  default:
Line 827  Obj *rp;
Line 891  Obj *rp;
         LM l;          LM l;
         GF2N g;          GF2N g;
         GFPN p;          GFPN p;
           GFS s;
   
         switch ( current_ff ) {          switch ( current_ff ) {
                 case FF_GFP:                  case FF_GFP:
Line 835  Obj *rp;
Line 900  Obj *rp;
                         randomgf2n(&g); *rp = (Obj)g; break;                          randomgf2n(&g); *rp = (Obj)g; break;
                 case FF_GFPN:                  case FF_GFPN:
                         randomgfpn(&p); *rp = (Obj)p; break;                          randomgfpn(&p); *rp = (Obj)p; break;
                   case FF_GFS:
                           randomgfs(&s); *rp = (Obj)s; break;
                 default:                  default:
                         error("random_ff : current_ff is not set");                          error("random_ff : current_ff is not set");
         }          }
Line 879  Obj *rp;
Line 946  Obj *rp;
                                 ntogfpn((Obj)p,&rpn); simpgfpn((GFPN)rpn,&spn); *rp = (Obj)spn;                                  ntogfpn((Obj)p,&rpn); simpgfpn((GFPN)rpn,&spn); *rp = (Obj)spn;
                                 break;                                  break;
                         case FF_GFS:                          case FF_GFS:
                                 if ( current_gfs_ext > 1 ) {                                  if ( NID((Num)p) == N_GFS )
                                         error("simp_ff : not implemented yet");                                          *rp = p;
                                 } else {                                  else {
                                         ptomp(current_gfs_q,(P)p,&t); mqtogfs(t,&rs);                                          ptomp(current_gfs_p,(P)p,&t); mqtogfs(t,&rs);
                                         *rp = (Obj)rs;                                          *rp = (Obj)rs;
                                 }                                  }
                                 break;                                  break;
                         default:                          default:
                                 *rp = (Obj)p;                                  *rp = (Obj)p;

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

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