[BACK]Return to setbit.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpz

Diff for /OpenXM_contrib/gmp/mpz/Attic/setbit.c between version 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2000/09/09 14:12:58 version 1.1.1.3, 2003/08/25 16:06:34
Line 1 
Line 1 
 /* mpz_setbit -- set a specified bit.  /* mpz_setbit -- set a specified bit.
   
 Copyright (C) 1991, 1993, 1994, 1995, 1997, 1999 Free Software Foundation,  Copyright 1991, 1993, 1994, 1995, 1997, 1999, 2001, 2002 Free Software
 Inc.  Foundation, Inc.
   
 This file is part of the GNU MP Library.  This file is part of the GNU MP Library.
   
Line 24  MA 02111-1307, USA. */
Line 24  MA 02111-1307, USA. */
 #include "gmp-impl.h"  #include "gmp-impl.h"
   
 void  void
 #if __STDC__  
 mpz_setbit (mpz_ptr d, unsigned long int bit_index)  mpz_setbit (mpz_ptr d, unsigned long int bit_index)
 #else  
 mpz_setbit (d, bit_index)  
      mpz_ptr d;  
      unsigned long int bit_index;  
 #endif  
 {  {
   mp_size_t dsize = d->_mp_size;    mp_size_t dsize = d->_mp_size;
   mp_ptr dp = d->_mp_d;    mp_ptr dp = d->_mp_d;
   mp_size_t limb_index;    mp_size_t limb_index;
   
   limb_index = bit_index / BITS_PER_MP_LIMB;    limb_index = bit_index / GMP_NUMB_BITS;
   if (dsize >= 0)    if (dsize >= 0)
     {      {
       if (limb_index < dsize)        if (limb_index < dsize)
         {          {
           dp[limb_index] |= (mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB);            dp[limb_index] |= (mp_limb_t) 1 << (bit_index % GMP_NUMB_BITS);
           d->_mp_size = dsize;            d->_mp_size = dsize;
         }          }
       else        else
Line 54  mpz_setbit (d, bit_index)
Line 48  mpz_setbit (d, bit_index)
               dp = d->_mp_d;                dp = d->_mp_d;
             }              }
           MPN_ZERO (dp + dsize, limb_index - dsize);            MPN_ZERO (dp + dsize, limb_index - dsize);
           dp[limb_index] = (mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB);            dp[limb_index] = (mp_limb_t) 1 << (bit_index % GMP_NUMB_BITS);
           d->_mp_size = limb_index + 1;            d->_mp_size = limb_index + 1;
         }          }
     }      }
Line 78  mpz_setbit (d, bit_index)
Line 72  mpz_setbit (d, bit_index)
       if (limb_index > zero_bound)        if (limb_index > zero_bound)
         {          {
           if (limb_index < dsize)            if (limb_index < dsize)
             dp[limb_index] &= ~((mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB));              {
           else                dp[limb_index] &= ~((mp_limb_t) 1 << (bit_index % GMP_NUMB_BITS));
             ;                MPN_NORMALIZE (dp, dsize);
                 d->_mp_size = -dsize;
               }
         }          }
       else if (limb_index == zero_bound)        else if (limb_index == zero_bound)
         {          {
           dp[limb_index] = ((dp[limb_index] - 1)            dp[limb_index] = ((dp[limb_index] - 1)
                             & ~((mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB))) + 1;                              & ~((mp_limb_t) 1 << (bit_index % GMP_NUMB_BITS))) + 1;
           if (dp[limb_index] == 0)            if (dp[limb_index] == 0)
             {              {
               mp_size_t i;                mp_size_t i;
Line 111  mpz_setbit (d, bit_index)
Line 107  mpz_setbit (d, bit_index)
       else        else
         {          {
           mpn_decr_u (dp + limb_index,            mpn_decr_u (dp + limb_index,
                      (mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB));                       (mp_limb_t) 1 << (bit_index % GMP_NUMB_BITS));
           dsize -= dp[dsize - 1] == 0;            dsize -= dp[dsize - 1] == 0;
           d->_mp_size = -dsize;            d->_mp_size = -dsize;
         }          }

Legend:
Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.3

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>