Changeset 08cd81 in git
- Timestamp:
- Jan 30, 2007, 2:54:56 PM (16 years ago)
- Branches:
- (u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
- Children:
- aed297d7f79e42a2c2c212557ff0c763106cca0d
- Parents:
- c1d38666da061feb6b0500e6b192b79f8589f326
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/tgb.cc
rc1d386 r08cd81 5 5 * Computer Algebra System SINGULAR * 6 6 ****************************************/ 7 /* $Id: tgb.cc,v 1.11 6 2007-01-30 10:37:54bricken Exp $ */7 /* $Id: tgb.cc,v 1.117 2007-01-30 13:54:56 bricken Exp $ */ 8 8 /* 9 9 * ABSTRACT: slimgb and F4 implementation … … 26 26 #include "longrat.h" 27 27 #define SR_HDL(A) ((long)(A)) 28 static const int bundle_size=100 ;28 static const int bundle_size=1000; 29 29 static const int delay_factor=3; 30 30 int QlogSize(number n); … … 3396 3396 3397 3397 } 3398 3398 int search_red_object_pos(red_object* a, int top, red_object* key ){ 3399 3400 int an = 0; 3401 int en= top; 3402 if (top==-1) return 0; 3403 if (pLmCmp(key->p,a[top].p)==1) 3404 return top+1; 3405 int i; 3406 loop 3407 { 3408 if (an >= en-1) 3409 { 3410 if (pLmCmp(key->p,a[an].p)==-1) 3411 return an; 3412 return en; 3413 } 3414 i=(an+en) / 2; 3415 if (pLmCmp(key->p,a[i].p)==-1) 3416 en=i; 3417 else 3418 an=i; 3419 } 3420 3421 } 3399 3422 static void sort_region_down(red_object* los, int l, int u, slimgb_alg* c) 3400 3423 { 3401 qsort(los+l,u-l+1,sizeof(red_object),red_object_better_gen); 3424 int r_size=u-l+1; 3425 qsort(los+l,r_size,sizeof(red_object),red_object_better_gen); 3402 3426 int i; 3403 3404 for(i=l;i<=u;i++) 3405 { 3406 BOOLEAN moved=FALSE; 3407 int j; 3408 for(j=i;j;j--) 3409 { 3410 if(pLmCmp(los[j].p,los[j-1].p)==-1){ 3411 red_object h=los[j]; 3412 los[j]=los[j-1]; 3413 los[j-1]=h; 3414 moved=TRUE; 3415 } 3416 else break; 3417 } 3418 if(!moved) return; 3419 } 3427 int * new_indices=(int*) omalloc((r_size)*sizeof(int)); 3428 int bound=0; 3429 BOOLEAN at_end=FALSE; 3430 for(i=l;i<=u;i++){ 3431 if (!(at_end)){ 3432 bound=new_indices[i-l]=bound+search_red_object_pos(los+bound,l-bound-1,los+i); 3433 if (bound==l) at_end=TRUE; 3434 } 3435 else{ 3436 new_indices[i-l]=l; 3437 } 3438 } 3439 red_object* los_region=(red_object*) omalloc(sizeof(red_object)*(u-l+1)); 3440 for (int i=0;i<r_size;i++){ 3441 new_indices[i]+=i; 3442 los_region[i]=los[l+i]; 3443 assume((i==0)||(new_indices[i]>new_indices[i-1])); 3444 3445 } 3446 3447 i=r_size-1; 3448 int j=u; 3449 int j2=l-1; 3450 while(i>=0){ 3451 if (new_indices[i]==j){ 3452 los[j]=los_region[i]; 3453 i--; 3454 j--; 3455 } else{ 3456 assume(new_indices[i]<j); 3457 los[j]=los[j2]; 3458 assume(j2>=0); 3459 j2--; 3460 j--; 3461 } 3462 } 3463 omfree(los_region); 3464 3465 omfree(new_indices); 3466 3420 3467 } 3421 3468
Note: See TracChangeset
for help on using the changeset viewer.