Changeset a881dc8 in tol


Ignore:
Timestamp:
May 5, 2011, 7:58:17 AM (15 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
2412c49
Parents:
8691a3d
Message:

Refs #1193

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@3489 be4846ae-f051-483a-831f-b64e7d08527f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tol/btol/matrix_type/matgra.cpp

    r8691a3d ra881dc8  
    30763076
    30773077//--------------------------------------------------------------------
     3078bool Pol2Mat(const BPol& pol, int r, int c, BMat& contens_)
     3079//--------------------------------------------------------------------
     3080{
     3081  register int d;
     3082  register int i;
     3083  register int j;
     3084  register int m = pol.Size();
     3085  contens_.Alloc(r,c);
     3086  if(contens_.Rows()!=r) { return false; }
     3087  if(!r||!c) { return false; }
     3088  contens_.SetAllValuesTo(0);
     3089  register double* y0 = (double*)contens_.GetData().GetBuffer();
     3090  register double* y1 = (double*)contens_.GetData().GetBuffer()+(r*c);
     3091  register double* y;
     3092  struct BMon
     3093  {
     3094    double coef;
     3095    int    degree;
     3096  };
     3097  assert(sizeof(BMon)==sizeof(BMonome<BDat>));
     3098  register BMon* p0 = (BMon*)pol.Buffer();
     3099  register BMon* p1 = (BMon*)pol.Buffer() + m;
     3100  register BMon* pk;
     3101  for(pk=p0; pk<p1; pk++)
     3102  {
     3103    d = pk->degree;
     3104    if(d>=0) { i= d; j=0; }
     3105    else     { j=-d; i=0; }
     3106    y = y0 + (i*c+j);
     3107    for(;(i<r)&&(j<c); i++, j++)
     3108    {
     3109      assert(y<y1);
     3110      if(y>=y1)
     3111      {
     3112        Error(I2("Invalid access in","Acesso inválido en")+ " PolMat " +
     3113              " r="+r+
     3114              " c="+c+
     3115              " r*c="+(r*c)+
     3116              " m="+m+
     3117              " d="+d+
     3118              " i="+i+
     3119              " j="+d+
     3120              " i*c+j="+(i*c+j));
     3121        return false;
     3122      }
     3123      (*y)=pk->coef;
     3124      y += (c+1);
     3125    }
     3126  }
     3127  return true;
     3128}
     3129//--------------------------------------------------------------------
    30783130DeclareContensClass(BMat, BMatTemporary, BMatPolMat);
    30793131DefExtOpr(1, BMatPolMat,   "PolMat", 3, 3, "Polyn Real Real",
    … …  
    30953147{
    30963148  BPol& pol = Pol(Arg(1));
    3097   register int d;
    3098   register int i;
    3099   register int j;
    3100   register int m = pol.Size();
    31013149  register int r = (BInt)Real(Arg(2));
    31023150  register int c = (BInt)Real(Arg(3));
    3103   contens_.Alloc(r,c);
    3104   if(contens_.Rows()!=r) { return; }
    3105   if(!r||!c) { return; }
    3106   contens_.SetAllValuesTo(0);
    3107   register double* y0 = (double*)contens_.GetData().GetBuffer();
    3108   register double* y1 = (double*)contens_.GetData().GetBuffer()+(r*c);
    3109   register double* y;
    3110   struct BMon
    3111   {
    3112     double coef;
    3113     int    degree;
    3114   };
    3115   assert(sizeof(BMon)==sizeof(BMonome<BDat>));
    3116   register BMon* p0 = (BMon*)pol.Buffer();
    3117   register BMon* p1 = (BMon*)pol.Buffer() + m;
    3118   register BMon* pk;
    3119   for(pk=p0; pk<p1; pk++)
    3120   {
    3121     d = pk->degree;
    3122     if(d>=0) { i= d; j=0; }
    3123     else     { j=-d; i=0; }
    3124     y = y0 + (i*c+j);
    3125     for(;(i<r)&&(j<c); i++, j++)
    3126     {
    3127       assert(y<y1);
    3128       if(y>=y1)
    3129       {
    3130         Error(I2("Invalid access in","Acesso inválido en")+ " PolMat " +
    3131               " r="+r+
    3132               " c="+c+
    3133               " r*c="+(r*c)+
    3134               " m="+m+
    3135               " d="+d+
    3136               " i="+i+
    3137               " j="+d+
    3138               " i*c+j="+(i*c+j));
    3139         return;
    3140       }
    3141       (*y)=pk->coef;
    3142       y += (c+1);
    3143     }
    3144   }
     3151  Pol2Mat(pol,r,c,contens_);
    31453152}
    31463153/* */
Note: See TracChangeset for help on using the changeset viewer.