Changeset 08cd81 in git


Ignore:
Timestamp:
Jan 30, 2007, 2:54:56 PM (16 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
Children:
aed297d7f79e42a2c2c212557ff0c763106cca0d
Parents:
c1d38666da061feb6b0500e6b192b79f8589f326
Message:
+ improved merging


git-svn-id: file:///usr/local/Singular/svn/trunk@9786 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/tgb.cc

    rc1d386 r08cd81  
    55*  Computer Algebra System SINGULAR     *
    66****************************************/
    7 /* $Id: tgb.cc,v 1.116 2007-01-30 10:37:54 bricken Exp $ */
     7/* $Id: tgb.cc,v 1.117 2007-01-30 13:54:56 bricken Exp $ */
    88/*
    99* ABSTRACT: slimgb and F4 implementation
     
    2626#include "longrat.h"
    2727#define SR_HDL(A) ((long)(A))
    28 static const int bundle_size=100;
     28static const int bundle_size=1000;
    2929static const int delay_factor=3;
    3030int QlogSize(number n);
     
    33963396
    33973397}
    3398 
     3398int 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}
    33993422static void sort_region_down(red_object* los, int l, int u, slimgb_alg* c)
    34003423{
    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);
    34023426  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
    34203467}
    34213468
Note: See TracChangeset for help on using the changeset viewer.