Changeset 4819c4 in git


Ignore:
Timestamp:
Nov 13, 2018, 1:15:30 PM (5 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '17f1d200f27c5bd38f5dfc6e8a0879242279d1d8')
Children:
21627ce8138b555fd3149fbe3683998b56b92633
Parents:
c6363181cd15d8f5d14b9a1cd20f08907c4c13b6
Message:
moved freeAlgebra construction to kernel (libpolys/polys/shiftop)
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • Singular/dyn_modules/freegb/freegb.cc

    rc636318 r4819c4  
    2020      return TRUE;
    2121    }
    22     ring R=rCopy0(r);
    23     int p;
    24     if((r->order[0]==ringorder_C)
    25     ||(r->order[0]==ringorder_c))
    26       p=1;
    27     else
    28       p=0;
    29     // create R->N
    30     R->N=r->N*d;
    31     R->isLPring=r->N;
    32     R->block1[p]=R->N; /* only dp,Dp,wp,Wp; will be discarded for lp*/
    33     // create R->order
    34     switch(r->order[p])
    35     {
    36       case ringorder_dp:
    37       case ringorder_Dp:
    38         break;
    39       case ringorder_wp:
    40       case ringorder_Wp:
    41       {
    42         omFree(R->wvhdl[p]);
    43         int *w=(int*)omAlloc(R->N*sizeof(int));
    44         for(int b=1;b<d;b++)
    45         {
    46           for(int i=r->N-1;i>=0;i--)
    47             w[b*r->N+i]=r->wvhdl[p][i];
    48         }
    49         R->wvhdl[p]=w;
    50         break;
    51       }
    52       case ringorder_lp:
    53       case ringorder_rp:
    54       {
    55         int ** wvhdl=(int**)omAlloc0((r->N+2)*sizeof(int*));
    56         rRingOrder_t* ord=(rRingOrder_t*)omAlloc0((r->N+2)*sizeof(rRingOrder_t));
    57         int* blk0=(int*)omAlloc0((r->N+2)*sizeof(int));
    58         int* blk1=(int*)omAlloc0((r->N+2)*sizeof(int));
    59         omFree(R->wvhdl);  R->wvhdl=wvhdl;
    60         omFree(R->order);  R->order=ord;
    61         omFree(R->block0); R->block0=blk0;
    62         omFree(R->block1); R->block1=blk1;
    63         for(int i=0;i<r->N;i++)
    64         {
    65           ord[i+p]=ringorder_a;
    66           blk0[i+p]=1;
    67           blk1[i+p]=R->N;
    68           wvhdl[i+p]=(int*)omAlloc0(R->N*sizeof(int));
    69           for(int j=0;j<d;j++)
    70           {
    71             assume(j*r->N+i<R->N);
    72             if (r->order[p]==ringorder_lp)
    73               wvhdl[i+p][j*r->N+i]=1;
    74             else
    75               wvhdl[i+p][(j+1)*r->N-i-1]=1;
    76           }
    77         }
    78         ord[r->N+p]=r->order[p]; /* lp or rp */
    79         blk0[r->N+p]=1;
    80         blk1[r->N+p]=R->N;
    81         // copy component order
    82         if (p==1) ord[0]=r->order[0];
    83         else /*p==0*/ ord[r->N+1]=r->order[1];
    84         break;
    85       }
    86       default: WerrorS("ordering not implemented for LP-rings");
    87         return TRUE;
    88     }
    89     // create R->names
    90     char **names=(char**)omAlloc(R->N*sizeof(char_ptr));
    91     for(int b=0;b<d;b++)
    92     {
    93       for(int i=r->N-1;i>=0;i--)
    94         names[b*r->N+i]=omStrDup(r->names[i]);
    95     }
    96     for(int i=r->N-1;i>=0;i--) omFree(R->names[i]);
    97     omFree(R->names);
    98     R->names=names;
    99 
    100     rComplete(R,TRUE);
     22    ring R=freeAlgebra(r,d);
    10123    res->rtyp=RING_CMD;
    10224    res->data=R;
    103     return FALSE;
     25    return R==NULL;
    10426  }
    10527  return TRUE;
  • Singular/libsingular.h

    rc636318 r4819c4  
    1616#include "polys/clapsing.h"
    1717#include "polys/monomials/maps.h"
     18#include "polys/shiftop.h"
    1819#include "kernel/GBEngine/kutil.h"
    1920#include "kernel/GBEngine/kstd1.h"
  • libpolys/polys/shiftop.cc

    rc636318 r4819c4  
    661661}
    662662
    663 #endif
     663ring freeAlgebra(ring r, int d)
     664{
     665  ring R=rCopy0(r);
     666  int p;
     667  if((r->order[0]==ringorder_C)
     668  ||(r->order[0]==ringorder_c))
     669    p=1;
     670  else
     671    p=0;
     672  // create R->N
     673  R->N=r->N*d;
     674  R->isLPring=r->N;
     675  R->block1[p]=R->N; /* only dp,Dp,wp,Wp; will be discarded for lp*/
     676  // create R->order
     677  switch(r->order[p])
     678  {
     679    case ringorder_dp:
     680    case ringorder_Dp:
     681      break;
     682    case ringorder_wp:
     683    case ringorder_Wp:
     684    {
     685      omFree(R->wvhdl[p]);
     686      int *w=(int*)omAlloc(R->N*sizeof(int));
     687      for(int b=1;b<d;b++)
     688      {
     689        for(int i=r->N-1;i>=0;i--)
     690          w[b*r->N+i]=r->wvhdl[p][i];
     691      }
     692      R->wvhdl[p]=w;
     693      break;
     694    }
     695    case ringorder_lp:
     696    case ringorder_rp:
     697    {
     698      int ** wvhdl=(int**)omAlloc0((r->N+2)*sizeof(int*));
     699      rRingOrder_t* ord=(rRingOrder_t*)omAlloc0((r->N+2)*sizeof(rRingOrder_t));
     700      int* blk0=(int*)omAlloc0((r->N+2)*sizeof(int));
     701      int* blk1=(int*)omAlloc0((r->N+2)*sizeof(int));
     702      omFree(R->wvhdl);  R->wvhdl=wvhdl;
     703      omFree(R->order);  R->order=ord;
     704      omFree(R->block0); R->block0=blk0;
     705      omFree(R->block1); R->block1=blk1;
     706      for(int i=0;i<r->N;i++)
     707      {
     708        ord[i+p]=ringorder_a;
     709        blk0[i+p]=1;
     710        blk1[i+p]=R->N;
     711        wvhdl[i+p]=(int*)omAlloc0(R->N*sizeof(int));
     712        for(int j=0;j<d;j++)
     713        {
     714          assume(j*r->N+i<R->N);
     715          if (r->order[p]==ringorder_lp)
     716            wvhdl[i+p][j*r->N+i]=1;
     717         else
     718            wvhdl[i+p][(j+1)*r->N-i-1]=1;
     719        }
     720      }
     721      ord[r->N+p]=r->order[p]; /* lp or rp */
     722      blk0[r->N+p]=1;
     723      blk1[r->N+p]=R->N;
     724      // copy component order
     725      if (p==1) ord[0]=r->order[0];
     726      else /*p==0*/ ord[r->N+1]=r->order[1];
     727      break;
     728    }
     729    default: WerrorS("ordering not implemented for LP-rings");
     730      return NULL;
     731  }
     732  // create R->names
     733  char **names=(char**)omAlloc(R->N*sizeof(char*));
     734  for(int b=0;b<d;b++)
     735  {
     736    for(int i=r->N-1;i>=0;i--)
     737      names[b*r->N+i]=omStrDup(r->names[i]);
     738  }
     739  for(int i=r->N-1;i>=0;i--) omFree(R->names[i]);
     740  omFree(R->names);
     741  R->names=names;
     742
     743  rComplete(R,TRUE);
     744  return R;
     745}
     746#endif
  • libpolys/polys/shiftop.h

    rc636318 r4819c4  
    4848#define pmIsInV(p) p_mIsInV(p, currRing)
    4949
     50ring freeAlgebra(ring r, int d);
    5051#endif
    5152#endif
Note: See TracChangeset for help on using the changeset viewer.