Changeset 0b7fb8 in git


Ignore:
Timestamp:
Oct 27, 2014, 9:25:39 PM (9 years ago)
Author:
Oleksandr Motsak <motsak@…>
Branches:
(u'spielwiese', '17f1d200f27c5bd38f5dfc6e8a0879242279d1d8')
Children:
90fa9df2be3b1096c1cca744ca7a710000600938
Parents:
5bcb3f89f4bab03bd5ec200621f88531ed29cd0b
git-author:
Oleksandr Motsak <motsak@mathematik.uni-kl.de>2014-10-27 21:25:39+01:00
git-committer:
Oleksandr Motsak <motsak@mathematik.uni-kl.de>2014-10-31 17:55:06+01:00
Message:
Added sIsEmpty + fixed *Copy
Location:
libpolys/polys
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libpolys/polys/sbuckets.cc

    r5bcb3f r0b7fb8  
    5757{ return bucket->bucket_ring; }
    5858
     59
     60bool sIsEmpty(const sBucket_pt bucket)
     61{
     62  for(int i = 0; i < (BIT_SIZEOF_LONG - 3); i++)
     63  {   
     64    assume( i < (BIT_SIZEOF_LONG - 3) );
     65    assume( pLength(bucket->buckets[i].p) == bucket->buckets[i].length );
     66
     67    if( bucket->buckets[i].p != NULL )
     68      return false;
     69
     70    if( bucket->buckets[i].length != 0 )
     71      return false;
     72  }
     73
     74  return( bucket->max_bucket == 0 );
     75
     76}
     77
     78
    5979/// Copy sBucket non-intrusive!!!
    6080sBucket_pt    sBucketCopy(const sBucket_pt bucket)
     
    6484  sBucket_pt newbucket = sBucketCreate(r);
    6585
    66   for(int i = 0; bucket->buckets[i].p != NULL; i++)
    67   {
     86  newbucket->max_bucket = bucket->max_bucket;
     87
     88  for(int i = 0; i <= bucket->max_bucket; i++)
     89  {   
    6890    assume( i < (BIT_SIZEOF_LONG - 3) );
    6991    assume( pLength(bucket->buckets[i].p) == bucket->buckets[i].length );
     
    259281  while (bucket->buckets[i].p == NULL)
    260282  {
     283    assume( bucket->buckets[i].length == 0 );
    261284    i++;
    262285    if (i > bucket->max_bucket) goto done;
     
    265288  pr = bucket->buckets[i].p;
    266289  lr = bucket->buckets[i].length;
     290
     291  assume( pr != NULL && (lr > 0) );
     292 
    267293  bucket->buckets[i].p = NULL;
    268294  bucket->buckets[i].length = 0;
     
    273299    if (bucket->buckets[i].p != NULL)
    274300    {
     301      assume( bucket->buckets[i].length == pLength(bucket->buckets[i].p) );
     302     
    275303      pr = p_Add_q(pr, bucket->buckets[i].p, lr, bucket->buckets[i].length,
    276304                   bucket->bucket_ring);
     305     
    277306      bucket->buckets[i].p = NULL;
    278307      bucket->buckets[i].length = 0;
    279308    }
    280     i++;
    281   }
    282 
    283   done:
     309
     310    assume( bucket->buckets[i].p == NULL );
     311    assume( bucket->buckets[i].length == 0 );   
     312    i++;
     313  }
     314
     315done:
     316 
    284317  *p = pr;
    285318  *length = lr;
     319 
    286320  bucket->max_bucket = 0;
    287 }
     321
     322  assume( sIsEmpty(bucket) );
     323}
     324
     325
     326
    288327
    289328/////////////////////////////////////////////////////////////////////////////
  • libpolys/polys/sbuckets.h

    r5bcb3f r0b7fb8  
    1919
    2020
     21
    2122//////////////////////////////////////////////////////////////////////////
    2223// Creation/Destruction of buckets
     
    2425sBucket_pt    sBucketCreate(ring r);
    2526void          sBucketDestroy(sBucket_pt *bucket);
    26 
    2727
    2828//////////////////////////////////////////////////////////////////////////
     
    3535/// Returns bucket ring
    3636ring sBucketGetRing(const sBucket_pt bucket);
     37
     38/// Test whether bucket is empty!?
     39bool sIsEmpty(const sBucket_pt bucket);
     40
     41
    3742
    3843/////////////////////////////////////////////////////////////////////////////
Note: See TracChangeset for help on using the changeset viewer.