/*
 * sieve.h - Trial division for prime finding.
 *
 * This is generally not intended for direct use by a user of the library;
 * the prime.c and dhprime.c functions. are more likely to be used.
 * However, a special application may need these.
 */
struct BigNum;

/* Remove multiples of a single number from the sieve */
void
sieveSingle(unsigned char *array, unsigned size, unsigned start, unsigned step);

/* Build a sieve starting at the number and incrementing by "step". */
int sieveBuild(unsigned char *array, unsigned size, struct BigNum const *bn,
	unsigned step, unsigned dbl);

/* Similar, but uses a >16-bit step size */
int sieveBuildBig(unsigned char *array, unsigned size, struct BigNum const *bn,
	struct BigNum const *step, unsigned dbl);

/* Return the next bit set in the sieve (or 0 on failure) */
unsigned sieveSearch(unsigned char const *array, unsigned size, unsigned start);
