#include "os.h"
#include <mp.h>
#include "dat.h"

/* res = b << shift */
void
mpleft(mpint *b, int shift, mpint *res)
{
	int d, l, r, i, otop;
	mpdigit this, last;

	res->sign = b->sign;
	if(b->top==0){
		res->top = 0;
		return;
	}

	/* a negative left shift is a right shift */
	if(shift < 0){
		mpright(b, -shift, res);
		return;
	}

	/* b and res may be the same so remember the old top */
	otop = b->top;

	/* shift */
	mpbits(res, otop*Dbits + shift);	/* overkill */
	res->top = DIGITS(otop*Dbits + shift);
	d = shift/Dbits;
	l = shift - d*Dbits;
	r = Dbits - l;

	if(l == 0){
		for(i = otop-1; i >= 0; i--)
			res->p[i+d] = b->p[i];
	} else {
		last = 0;
		for(i = otop-1; i >= 0; i--) {
			this = b->p[i];
			res->p[i+d+1] = (last<<l) | (this>>r);
			last = this;
		}
		res->p[d] = last<<l;
	}
	for(i = 0; i < d; i++)
		res->p[i] = 0;

	/* normalize */
	while(res->top > 0 && res->p[res->top-1] == 0)
		res->top--;
}
