Changeset a881dc8 in tol
- Timestamp:
- May 5, 2011, 7:58:17 AM (15 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- 2412c49
- Parents:
- 8691a3d
- File:
-
- 1 edited
-
tol/btol/matrix_type/matgra.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tol/btol/matrix_type/matgra.cpp
r8691a3d ra881dc8 3076 3076 3077 3077 //-------------------------------------------------------------------- 3078 bool 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 //-------------------------------------------------------------------- 3078 3130 DeclareContensClass(BMat, BMatTemporary, BMatPolMat); 3079 3131 DefExtOpr(1, BMatPolMat, "PolMat", 3, 3, "Polyn Real Real", … … 3095 3147 { 3096 3148 BPol& pol = Pol(Arg(1)); 3097 register int d;3098 register int i;3099 register int j;3100 register int m = pol.Size();3101 3149 register int r = (BInt)Real(Arg(2)); 3102 3150 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_); 3145 3152 } 3146 3153 /* */
Note: See TracChangeset
for help on using the changeset viewer.
