/*--------------------------------------------------------------------
This source distribution is placed in the public domain by its author,
Jason Papadopoulos. You may use it for any purpose, free of charge,
without having to notify anyone. I disclaim any responsibility for any
errors.

Optionally, please be nice and tell me if you find this source to be
useful. Again optionally, if you add to the functionality present here
please consider making those additions public too, so that others may 
benefit from your work.	
       				   --jasonp@boo.net 6/3/07
--------------------------------------------------------------------*/

#ifndef _MP_INT_H_
#define _MP_INT_H_

#include <mp.h>

#ifdef __cplusplus
extern "C" {
#endif
	/* routines that are used within the multiple precision
	   code but are also useful by themselves and as building
	   blocks in other libraries */

	/* return the index of the first nonzero word in
	   x, searching backwards from max_words */

static INLINE uint32 num_nonzero_words(uint32 *x, uint32 max_words) {

	uint32 i;
	for (i = max_words; i && !x[i-1]; i--)
		;
	return i;
}

	/* Internal structure used by routines that need
	   to do division */

typedef struct {
	uint32 nwords;
	uint32 val[2 * MAX_MP_WORDS];
} big_mp_t;

	/* internal division routine; the input is twice the
	   size of an mp_t to allow for a quotient and remainder
	   each that large. Note that no check is made that
	   the quotient fits in an mp_t */

void mp_divrem_core(big_mp_t *num, mp_t *denom, mp_t *quot, mp_t *rem);

#ifdef __cplusplus
}
#endif

#endif /* !_MP_INT_H_ */


syntax highlighted by Code2HTML, v. 0.9.1