Changeset 2f436b in git for Singular/kbuckets.cc


Ignore:
Timestamp:
Dec 31, 2000, 4:14:47 PM (23 years ago)
Author:
Olaf Bachmann <obachman@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
e609098c45a74ac91c002ffa7ece5eebe7f8c002
Parents:
33ec1145a109507ad3e3cf4a69a847b703358e93
Message:
* version 1-3-13: sparsemat improivements


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

Legend:

Unmodified
Added
Removed
  • Singular/kbuckets.cc

    r33ec11 r2f436b  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: kbuckets.cc,v 1.22 2000-11-28 11:50:51 obachman Exp $ */
     4/* $Id: kbuckets.cc,v 1.23 2000-12-31 15:14:32 obachman Exp $ */
    55
    66#include "mod2.h"
     
    137137}
    138138
    139 
    140139/////////////////////////////////////////////////////////////////////////////
    141140// Convertion from/to Bpolys
     
    270269    *length = 0;
    271270  }
     271}
     272
     273void kBucketSetLm(kBucket_pt bucket, poly lm)
     274{
     275  kBucketMergeLm(bucket);
     276  pNext(lm) = NULL;
     277  bucket->buckets[0] = lm;
     278  bucket->buckets_length[0] = 1;
    272279}
    273280
     
    358365}
    359366
     367
     368//////////////////////////////////////////////////////////////////////////
     369///
     370/// Add to Bucket a poly ,i.e. Bpoly == n*Bpoly
     371///
     372void kBucket_Add_q(kBucket_pt bucket, poly q, int *l)
     373{
     374  if (q == NULL) return;
     375  assume(*l <= 0 || pLength(q) == *l);
     376
     377  int i, l1;
     378  ring r = bucket->bucket_ring;
     379
     380  if (*l <= 0)
     381  {
     382    l1 = pLength(q);
     383    *l = l1;
     384  }
     385  else
     386    l1 = *l;
     387 
     388  kBucketMergeLm(bucket);
     389  kbTest(bucket);
     390  i = pLogLength(l1);
     391
     392  while (bucket->buckets[i] != NULL)
     393  {
     394    q = p_Add_q(q, bucket->buckets[i],
     395                 l1, bucket->buckets_length[i], r);
     396    bucket->buckets[i] = NULL;
     397    bucket->buckets_length[i] = 0;
     398    i = pLogLength(l1);
     399  }
     400
     401  bucket->buckets[i] = q;
     402  bucket->buckets_length[i]=l1;
     403  if (i >= bucket->buckets_used)
     404    bucket->buckets_used = i;
     405  else
     406    kBucketAdjustBucketsUsed(bucket);
     407  kbTest(bucket);
     408}
     409
     410
     411
    360412//////////////////////////////////////////////////////////////////////////
    361413///
     
    432484#endif
    433485  kbTest(bucket);
     486}
     487
     488//////////////////////////////////////////////////////////////////////////
     489///
     490/// Bpoly == Bpoly - m*p; where m is a monom
     491/// Does not destroy p and m
     492/// assume (l <= 0 || pLength(p) == l)
     493void kBucket_Plus_mm_Mult_pp(kBucket_pt bucket, poly m, poly p, int l)
     494{
     495  assume(l <= 0 || pLength(p) == l);
     496  int i, l1;
     497  poly p1 = p;
     498  poly last;
     499  ring r = bucket->bucket_ring;
     500
     501  if (l <= 0)
     502  {
     503    l1 = pLength(p1);
     504    l = l1;
     505  }
     506  else
     507    l1 = l;
     508
     509  if (m == NULL || p == NULL) return;
     510
     511  kBucketMergeLm(bucket);
     512  kbTest(bucket);
     513  i = pLogLength(l1);
     514
     515  if (i <= bucket->buckets_used && bucket->buckets[i] != NULL)
     516  {
     517    p1 = p_Plus_mm_Mult_qq(bucket->buckets[i], m, p1,
     518                           bucket->buckets_length[i], l1, r);
     519    l1 = bucket->buckets_length[i];
     520    bucket->buckets[i] = NULL;
     521    bucket->buckets_length[i] = 0;
     522    i = pLogLength(l1);
     523  }
     524  else
     525  {
     526    p1 = r->p_Procs->pp_Mult_mm(p1, m, r, last);
     527  }
     528   
     529  while (bucket->buckets[i] != NULL)
     530  {
     531    p1 = p_Add_q(p1, bucket->buckets[i],
     532                 l1, bucket->buckets_length[i], r);
     533    bucket->buckets[i] = NULL;
     534    bucket->buckets_length[i] = 0;
     535    i = pLogLength(l1);
     536  }
     537
     538  bucket->buckets[i] = p1;
     539  bucket->buckets_length[i]=l1;
     540  if (i >= bucket->buckets_used)
     541    bucket->buckets_used = i;
     542  else
     543    kBucketAdjustBucketsUsed(bucket);
     544
     545  kbTest(bucket);
     546}
     547
     548poly kBucket_ExtractLarger(kBucket_pt bucket, poly q, poly append)
     549{
     550  if (q == NULL) return append;
     551  poly lm;
     552  do
     553  {
     554    lm = kBucketGetLm(bucket);
     555    if (lm == NULL) return append;
     556    if (p_LmCmp(lm, q, bucket->bucket_ring) == 1)
     557    {
     558      lm = kBucketExtractLm(bucket);
     559      pNext(append) = lm;
     560      pIter(append);
     561    }
     562    else
     563    {
     564      return append;
     565    }
     566  }
     567  while (1);
    434568}
    435569
Note: See TracChangeset for help on using the changeset viewer.