]> gitweb.factorcode.org Git - factor.git/commitdiff
updated function ptr calls (iterators etc..) to take a vm parameter
authorPhil Dawes <phil@phildawes.net>
Mon, 17 Aug 2009 20:37:14 +0000 (21:37 +0100)
committerPhil Dawes <phil@phildawes.net>
Wed, 16 Sep 2009 07:16:25 +0000 (08:16 +0100)
vm/bignum.cpp
vm/bignum.hpp
vm/math.cpp
vm/vm.hpp

index 03b34edd97a44f5507f99116f4d47595cde573ce..f61b44340e553494774adfe56f731b1692ff3680 100755 (executable)
@@ -1980,14 +1980,14 @@ int bignum_unsigned_logbitp(int shift, bignum * bignum)
 }
 
 /* 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));
     }
   {
@@ -2009,14 +2009,14 @@ bignum *factorvm::digit_stream_to_bignum(unsigned int n_digits, unsigned int (*p
         {
           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);
 }
index 5f502dcc22d7b9e11366f009a2f1d6f88e277af1..8f21702f1ad191cabac08483b8b209bea0970a89 100644 (file)
@@ -119,8 +119,9 @@ void        bignum_negate_magnitude(bignum *);
 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);
 
index ed556f268aa6198c288c54272270436bcd2cf5ec..98188059f62278481804630a414c848b47118494 100755 (executable)
@@ -359,9 +359,9 @@ unsigned int factorvm::bignum_producer(unsigned int digit)
        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()
index 42a250832c49ceef29925f084536ae507f37aaa3..0f7a26c020e6befa73b4d156e246e37a0b34de92 100644 (file)
--- a/vm/vm.hpp
+++ b/vm/vm.hpp
@@ -120,7 +120,7 @@ struct factorvm {
        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 */