/* Copyright (c) 2009 Ian Piumarta
 * All rights reserved.
 * See the file COPYING for details.
 */

#include "_mpint.h"

/* r = r * n */

mp_t *mp_mul_d(mp_t *r, mp_digit_t n)
{
  if (n == 0) return mp_clear(r);
  if (n == 1) return r;
  if (mp_zerop(r)) return r;
  mp_digit_t  c= 0;
  mp_digit_t *p= r->bits;
  mp_digit_t *q= r->bits + r->width;
  do {
    mp_digit2_t cp= (mp_digit2_t)*p * n + c;
    c= cp >> MP_BITS;
    *p= cp;
  } while (++p != q);
  if (c) mp_digitAtPut(r, r->width, c);
  return r;
}

