}
/* Allocates memory */
-bignum *factorvm::digit_stream_to_bignum(unsigned int n_digits, unsigned int (*producer)(unsigned int), unsigned int radix, int negative_p)
+bignum *factorvm::digit_stream_to_bignum(unsigned int n_digits, unsigned int (*producer)(unsigned int, factorvm*), unsigned int radix, int negative_p)
{
BIGNUM_ASSERT ((radix > 1) && (radix <= BIGNUM_RADIX_ROOT));
if (n_digits == 0)
return (BIGNUM_ZERO ());
if (n_digits == 1)
{
- fixnum digit = ((fixnum) ((*producer) (0)));
+ fixnum digit = ((fixnum) ((*producer) (0,this)));
return (fixnum_to_bignum (negative_p ? (- digit) : digit));
}
{
{
bignum_destructive_scale_up (result, ((bignum_digit_type) radix));
bignum_destructive_add
- (result, ((bignum_digit_type) ((*producer) (n_digits))));
+ (result, ((bignum_digit_type) ((*producer) (n_digits,this))));
}
return (bignum_trim (result));
}
}
}
-bignum *digit_stream_to_bignum(unsigned int n_digits, unsigned int (*producer)(unsigned int), unsigned int radix, int negative_p)
+bignum *digit_stream_to_bignum(unsigned int n_digits, unsigned int (*producer)(unsigned int, factorvm*), unsigned int radix, int negative_p)
{
return vm->digit_stream_to_bignum(n_digits,producer,radix,negative_p);
}
bignum * bignum_integer_length(bignum * arg1);
int bignum_unsigned_logbitp(int shift, bignum * bignum);
int bignum_logbitp(int shift, bignum * arg);
+struct factorvm;
bignum * digit_stream_to_bignum(unsigned int n_digits,
- unsigned int (*producer)(unsigned int),
+ unsigned int (*producer)(unsigned int,factorvm*),
unsigned int radix,
int negative_p);
return *(ptr + digit);
}
-unsigned int bignum_producer(unsigned int digit)
+unsigned int bignum_producer(unsigned int digit, factorvm *myvm)
{
- return vm->bignum_producer(digit);
+ return myvm->bignum_producer(digit);
}
inline void factorvm::vmprim_byte_array_to_bignum()
bignum *bignum_integer_length(bignum * x);
int bignum_logbitp(int shift, bignum * arg);
int bignum_unsigned_logbitp(int shift, bignum * bignum);
- bignum *digit_stream_to_bignum(unsigned int n_digits, unsigned int (*producer)(unsigned int), unsigned int radix, int negative_p);
+ bignum *digit_stream_to_bignum(unsigned int n_digits, unsigned int (*producer)(unsigned int, factorvm *), unsigned int radix, int negative_p);
//data_heap
bool secure_gc; /* Set by the -securegc command line argument */