Changeset fb0a2c0 in git


Ignore:
Timestamp:
Feb 8, 2007, 2:13:45 PM (17 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
45b750f46db46153c194606edbe187a53309d6dc
Parents:
6968f1f960104183ebb0a3099dc1bd90ce83c771
Message:
*bricken: prepare noro cache for new arithmetic


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

Legend:

Unmodified
Added
Removed
  • kernel/tgb.cc

    r6968f1 rfb0a2c0  
    55*  Computer Algebra System SINGULAR     *
    66****************************************/
    7 /* $Id: tgb.cc,v 1.125 2007-02-08 10:40:18 bricken Exp $ */
     7/* $Id: tgb.cc,v 1.126 2007-02-08 13:13:45 bricken Exp $ */
    88/*
    99* ABSTRACT: slimgb and F4 implementation
     
    2020#include "tgb_internal.h"
    2121#include "tgbgauss.h"
    22 #include "F4.h"
     22
    2323#include "digitech.h"
    2424#include "gring.h"
     
    22512251public:
    22522252  poly temp_term;
    2253 #ifndef BUCKETS_FOR_NORO_RED
     2253#ifdef NORO_RED_ARRAY_RESERVER
    22542254  int reserved;
    22552255  poly* recursionPolyBuffer;
     
    22802280  poly lookup(poly term, BOOLEAN& succ, int & len);
    22812281  NoroCache(){
    2282 #ifndef BUCKETS_FOR_NORO_RED
     2282#ifdef NORO_RED_ARRAY_RESERVER
    22832283    reserved=0;
    22842284    recursionPolyBuffer=(poly*)omalloc(1000000*sizeof(poly));
     
    22862286    temp_term=pOne();
    22872287  }
    2288 #ifndef BUCKETS_FOR_NORO_RED
     2288#ifdef NORO_RED_ARRAY_RESERVER
    22892289  poly* reserve(int n){
    22902290    poly* res=recursionPolyBuffer+reserved;
     
    23032303    }
    23042304    p_Delete(&temp_term,currRing);
    2305 #ifndef BUCKETS_FOR_NORO_RED
     2305#ifdef NORO_RED_ARRAY_RESERVER
    23062306    omfree(recursionPolyBuffer);
    23072307#endif
     
    23602360poly noro_red(poly p, int &len, NoroCache* cache,slimgb_alg* c);
    23612361
    2362 poly noro_red_mon(poly t, int &len, BOOLEAN& changed, NoroCache* cache,slimgb_alg* c){
     2362class MonRedRes{
     2363public:
     2364  poly p;
     2365  number coef;
     2366  BOOLEAN changed;
     2367  int len;
     2368  BOOLEAN onlyBorrowed;
     2369  bool operator<(const MonRedRes& other) const{
     2370    int cmp=p_LmCmp(p,other.p,currRing);
     2371    if ((cmp<0)||((cmp==0)&&((onlyBorrowed)&&(!(other.onlyBorrowed))))){
     2372      return true;
     2373    } else return false;
     2374  }
     2375};
     2376
     2377MonRedRes noro_red_mon(poly t, NoroCache* cache,slimgb_alg* c){
     2378  MonRedRes res_holder;
    23632379  BOOLEAN succ;
    23642380  //wrp(t);
    2365   changed=TRUE;
    2366   poly cache_lookup=cache->lookup(t,succ, len);//don't own this yet
     2381  res_holder.changed=TRUE;
     2382  poly cache_lookup=cache->lookup(t,succ, res_holder.len);//don't own this yet
    23672383  if (succ){
    23682384    if (cache_lookup==t){
    23692385      //know they are equal
    2370       len=1;
    2371       changed=FALSE;
    2372       return t;
     2386      //res_holder.len=1;
     2387     
     2388      res_holder.changed=FALSE;
     2389      res_holder.p=t;
     2390      res_holder.coef=npInit(1);
     2391      res_holder.onlyBorrowed=FALSE;
     2392      return res_holder;
    23732393    }
    23742394    poly t_new=ppMult_nn(cache_lookup,pGetCoeff(t));
    23752395    p_Delete(&t,c->r);
    2376     return t_new;
     2396    //res_holder.len=1;
     2397    //res_holder.changed=TRUE;
     2398    res_holder.p=t_new;
     2399    res_holder.coef=npInit(1);
     2400    res_holder.onlyBorrowed=FALSE;
     2401    return res_holder;
     2402    //return t_new;
    23772403  } else {
    23782404    unsigned long sev=p_GetShortExpVector(t,currRing);
     
    23952421      res=pp_Mult_mm(pNext(c->strat->S[i]),exp_diff,c->r);
    23962422
    2397       len=c->strat->lenS[i]-1;
    2398       res=noro_red(res,len,cache,c);
     2423      res_holder.len=c->strat->lenS[i]-1;
     2424      res=noro_red(res,res_holder.len,cache,c);
    23992425     
    24002426      cache->insert(t,res,pLength(res));
     
    24022428      //p_Delete(&t_copy_mon,c->r);
    24032429      res=pMult_nn(res,coef_bak);
    2404       return res;
     2430      res_holder.changed=TRUE;
     2431      res_holder.p=res;
     2432      res_holder.coef=npInit(1);
     2433      res_holder.onlyBorrowed=FALSE;
     2434      return res_holder;
     2435
    24052436    } else {
    24062437      number coef_bak=p_GetCoeff(t,c->r);
    24072438      number one=npInit(1);
    24082439      p_SetCoeff(t,one,c->r);
    2409       len=1;
    2410       cache->insert(t,t,len);
     2440      res_holder.len=1;
     2441      cache->insert(t,t,res_holder.len);
    24112442      p_SetCoeff(t,coef_bak,c->r);
    2412       return t;
     2443      //return t;
     2444      res_holder.changed=FALSE;
     2445      res_holder.p=t;
     2446     
     2447      res_holder.coef=npInit(1);
     2448      res_holder.onlyBorrowed=FALSE;
     2449      return res_holder;
    24132450    }
    24142451  }
     
    24402477    return NULL;
    24412478  }
    2442   if (len==1){
    2443     BOOLEAN changed;
    2444     return noro_red_mon(p,len,changed,cache,c);
    2445   }
     2479
    24462480  #ifdef BUCKETS_FOR_NORO_RED
    24472481  kBucket_pt bucket=kBucketCreate(currRing);
     
    24612495    pIter(p);
    24622496    pNext(t)=NULL;
    2463     int l;
     2497    //int l;
    24642498    //poly reference=p_Head(t,c->r);
    2465     BOOLEAN changed;
    2466     t=noro_red_mon(t,l,changed,cache,c);
    2467     if (!(changed)){
     2499    //BOOLEAN changed;
     2500    MonRedRes red=noro_red_mon(t,cache,c);
     2501    if (!(red.changed)){
    24682502      unchanged_size++;
    24692503      if (unchanged_head){
    2470         pNext(unchanged_tail)=t;
     2504        pNext(unchanged_tail)=red.p;
    24712505        pIter(unchanged_tail);
    24722506      } else{
    2473         unchanged_tail=t;
    2474         unchanged_head=t;
     2507        unchanged_tail=red.p;
     2508        unchanged_head=red.p;
    24752509      }
    24762510    } else{
    2477       assume(l==pLength(t));
     2511      assume(red.len==pLength(red.p));
    24782512#ifdef BUCKETS_FOR_NORO_RED
    2479       kBucket_Add_q(bucket,t,&l);
     2513      kBucket_Add_q(bucket,red.p,&red.len);
    24802514#else
    2481      pre_buckets[pos++]=t;
     2515     pre_buckets[pos++]=red.p;
    24822516#endif
    24832517    }
Note: See TracChangeset for help on using the changeset viewer.