Changeset 6b8106 in git for libpolys/coeffs/numbers.cc


Ignore:
Timestamp:
Sep 13, 2012, 2:59:47 PM (12 years ago)
Author:
Oleksandr Motsak <motsak@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
1592b986a21bcaba5633414189a7b08c5cce6213
Parents:
2ed48b369bc0d2a3c22dd1fc1ff4b91704e73ec6f768d91b15a3cda106e7c041c7889cda1828dbfe
Message:
Merge pull request #185 from alexanderdreyer/spielwiese-countedref

attributes treated accordingly by 'reference' and 'shared'
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libpolys/coeffs/numbers.cc

    rf768d9 r6b8106  
    131131  assume(!(  nCoeff_is_Q(r) || nCoeff_is_Q_a(r) ));
    132132  // all coeffs are given by integers!!!
    133   assume( nCoeff_is_Ring(r) || nCoeff_is_Zp(r) || nCoeff_is_numeric(r) || nCoeff_is_GF(r) || nCoeff_is_Zp_a(r) );
    134133
    135134  numberCollectionEnumerator.Reset();
     135
     136  if( !numberCollectionEnumerator.MoveNext() ) // empty zero polynomial?
     137  {
     138    c = n_Init(1, r);
     139    return;
     140  } 
     141
     142  number &curr = numberCollectionEnumerator.Current();
    136143 
    137144#ifdef HAVE_RINGS
     
    141148    if (nCoeff_has_Units(r))
    142149    {
    143       c = n_GetUnit(numberCollectionEnumerator.Current(), r);
     150      c = n_GetUnit(curr, r);
    144151     
    145152      if (!n_IsOne(c, r))
     
    147154        number inv = n_Invers(c, r);
    148155
    149         do
     156        n_InpMult(curr, inv, r);
     157       
     158        while( numberCollectionEnumerator.MoveNext() )
    150159        {
    151           n_InpMult(numberCollectionEnumerator.Current(), inv, r);
     160          number &n = numberCollectionEnumerator.Current();
     161          n_Normalize(n, r); // ?
     162          n_InpMult(n, inv, r); // TODO: either this or directly divide!!!?
    152163        }
    153         while( numberCollectionEnumerator.MoveNext() );
    154164
    155165        n_Delete(&inv, r);       
     
    162172
    163173  assume(!nCoeff_is_Ring(r));
    164 
    165   c = numberCollectionEnumerator.Current();
     174  assume(nCoeff_is_Zp(r) || nCoeff_is_numeric(r) || nCoeff_is_GF(r) || nCoeff_is_Zp_a(r));
     175
     176  c = curr;
    166177 
    167178  n_Normalize(c, r);
     
    169180  if (!n_IsOne(c, r))
    170181  {   
    171     numberCollectionEnumerator.Current() = n_Init(1, r); // ???
     182    curr = n_Init(1, r); // ???
    172183   
    173184    number inv = n_Invers(c, r);
     
    177188      number &n = numberCollectionEnumerator.Current();
    178189      n_Normalize(n, r); // ?
    179       n_InpMult(n, inv, r);
     190      n_InpMult(n, inv, r); // TODO: either this or directly divide!!!?
    180191    }
    181192   
Note: See TracChangeset for help on using the changeset viewer.