commit 9f47db702daf8a966db4c81554e013062bcbdd48
parent 802ce6d81a34db455610b4dcd7e6868d21da6fcc
Author: Andres Navarro <canavarro82@gmail.com>
Date: Sat, 23 Apr 2011 10:35:19 -0300
Added klisp_State * argument to all functions that may perform allocation.
Diffstat:
3 files changed, 68 insertions(+), 43 deletions(-)
diff --git a/src/imath.c b/src/imath.c
@@ -23,18 +23,19 @@
#include <assert.h>
-#if DEBUG
-#define STATIC /* public */
-#else
-#define STATIC static
-#endif
-
/* Andres Navarro: klisp includes */
#include "kobject.h"
#include "kstate.h"
#include "kmem.h"
#include "kerror.h"
+
+#if DEBUG
+#define STATIC /* public */
+#else
+#define STATIC static
+#endif
+
/* {{{ Constants */
const mp_result MP_OK = 0; /* no error, all is well */
diff --git a/src/imrat.c b/src/imrat.c
@@ -17,6 +17,12 @@
#include <ctype.h>
#include <assert.h>
+/* Andres Navarro: klisp includes */
+#include "kobject.h"
+#include "kstate.h"
+#include "kmem.h"
+#include "kerror.h"
+
/* {{{ Useful macros */
#define TEMP(K) (temp + (K))
@@ -125,7 +131,6 @@ void mp_rat_clear(mp_rat r)
{
mp_int_clear(MP_NUMER_P(r));
mp_int_clear(MP_DENOM_P(r));
-
}
/* }}} */
diff --git a/src/imrat.h b/src/imrat.h
@@ -49,40 +49,57 @@ typedef enum {
MP_ROUND_HALF_DOWN
} mp_round_mode;
-mp_result mp_rat_init(mp_rat r);
-mp_rat mp_rat_alloc(void);
-mp_result mp_rat_init_size(mp_rat r, mp_size n_prec, mp_size d_prec);
-mp_result mp_rat_init_copy(mp_rat r, mp_rat old);
-mp_result mp_rat_set_value(mp_rat r, int numer, int denom);
-void mp_rat_clear(mp_rat r);
-void mp_rat_free(mp_rat r);
-mp_result mp_rat_numer(mp_rat r, mp_int z); /* z = num(r) */
-mp_result mp_rat_denom(mp_rat r, mp_int z); /* z = den(r) */
+mp_result mp_rat_init(klisp_State *K, mp_rat r);
+mp_rat mp_rat_alloc(klisp_State *K);
+mp_result mp_rat_init_size(klisp_State *K, mp_rat r, mp_size n_prec,
+ mp_size d_prec);
+mp_result mp_rat_init_copy(klisp_State *K, mp_rat r, mp_rat old);
+mp_result mp_rat_set_value(klisp_State *K, mp_rat r, int numer, int denom);
+void mp_rat_clear(klisp_State *K, mp_rat r);
+void mp_rat_free(klisp_State *K, mp_rat r);
+mp_result mp_rat_numer(klisp_State *K, mp_rat r, mp_int z); /* z = num(r) */
+mp_result mp_rat_denom(klisp_State *K, mp_rat r, mp_int z); /* z = den(r) */
+/* NOTE: this doesn't use the allocator */
mp_sign mp_rat_sign(mp_rat r);
-mp_result mp_rat_copy(mp_rat a, mp_rat c); /* c = a */
+mp_result mp_rat_copy(klisp_State *K, mp_rat a, mp_rat c); /* c = a */
+/* NOTE: this doesn't use the allocator */
void mp_rat_zero(mp_rat r); /* r = 0 */
-mp_result mp_rat_abs(mp_rat a, mp_rat c); /* c = |a| */
-mp_result mp_rat_neg(mp_rat a, mp_rat c); /* c = -a */
-mp_result mp_rat_recip(mp_rat a, mp_rat c); /* c = 1 / a */
-mp_result mp_rat_add(mp_rat a, mp_rat b, mp_rat c); /* c = a + b */
-mp_result mp_rat_sub(mp_rat a, mp_rat b, mp_rat c); /* c = a - b */
-mp_result mp_rat_mul(mp_rat a, mp_rat b, mp_rat c); /* c = a * b */
-mp_result mp_rat_div(mp_rat a, mp_rat b, mp_rat c); /* c = a / b */
-
-mp_result mp_rat_add_int(mp_rat a, mp_int b, mp_rat c); /* c = a + b */
-mp_result mp_rat_sub_int(mp_rat a, mp_int b, mp_rat c); /* c = a - b */
-mp_result mp_rat_mul_int(mp_rat a, mp_int b, mp_rat c); /* c = a * b */
-mp_result mp_rat_div_int(mp_rat a, mp_int b, mp_rat c); /* c = a / b */
-mp_result mp_rat_expt(mp_rat a, mp_small b, mp_rat c); /* c = a ^ b */
-
-int mp_rat_compare(mp_rat a, mp_rat b); /* a <=> b */
-int mp_rat_compare_unsigned(mp_rat a, mp_rat b); /* |a| <=> |b| */
-int mp_rat_compare_zero(mp_rat r); /* r <=> 0 */
-int mp_rat_compare_value(mp_rat r, mp_small n, mp_small d); /* r <=> n/d */
+mp_result mp_rat_abs(klisp_State *K, mp_rat a, mp_rat c); /* c = |a| */
+mp_result mp_rat_neg(klisp_State *K, mp_rat a, mp_rat c); /* c = -a */
+mp_result mp_rat_recip(klisp_State *K, mp_rat a, mp_rat c); /* c = 1 / a */
+/* c = a + b */
+mp_result mp_rat_add(klisp_State *K, mp_rat a, mp_rat b, mp_rat c);
+/* c = a - b */
+mp_result mp_rat_sub(klisp_State *K, mp_rat a, mp_rat b, mp_rat c);
+/* c = a * b */
+mp_result mp_rat_mul(klisp_State *K, mp_rat a, mp_rat b, mp_rat c);
+/* c = a / b */
+mp_result mp_rat_div(klisp_State *K, mp_rat a, mp_rat b, mp_rat c);
+
+/* c = a + b */
+mp_result mp_rat_add_int(klisp_State *K, mp_rat a, mp_int b, mp_rat c);
+/* c = a - b */
+mp_result mp_rat_sub_int(klisp_State *K, mp_rat a, mp_int b, mp_rat c);
+/* c = a * b */
+mp_result mp_rat_mul_int(klisp_State *K, mp_rat a, mp_int b, mp_rat c);
+/* c = a / b */
+mp_result mp_rat_div_int(klisp_State *K, mp_rat a, mp_int b, mp_rat c);
+/* c = a ^ b */
+mp_result mp_rat_expt(klisp_State *K, mp_rat a, mp_small b, mp_rat c);
+
+/* NOTE: because we may need to do multiplications, some of
+ these take a klisp_State */
+int mp_rat_compare(klisp_State *K, mp_rat a, mp_rat b); /* a <=> b */
+/* |a| <=> |b| */
+int mp_rat_compare_unsigned(klisp_State *K, mp_rat a, mp_rat b);
+int mp_rat_compare_zero(mp_rat r); /* r <=> 0 */
+int mp_rat_compare_value(klisp_State *K, mp_rat r, mp_small n,
+ mp_small d); /* r <=> n/d */
int mp_rat_is_integer(mp_rat r);
/* Convert to integers, if representable (returns MP_RANGE if not). */
+/* NOTE: this doesn't use the allocator */
mp_result mp_rat_to_ints(mp_rat r, mp_small *num, mp_small *den);
/* Convert to nul-terminated string with the specified radix, writing
@@ -103,16 +120,18 @@ mp_result mp_rat_string_len(mp_rat r, mp_size radix);
mp_result mp_rat_decimal_len(mp_rat r, mp_size radix, mp_size prec);
/* Read zero-terminated string into r */
-mp_result mp_rat_read_string(mp_rat r, mp_size radix, const char *str);
-mp_result mp_rat_read_cstring(mp_rat r, mp_size radix, const char *str,
- char **end);
-mp_result mp_rat_read_ustring(mp_rat r, mp_size radix, const char *str,
- char **end);
+mp_result mp_rat_read_string(klisp_State *K, mp_rat r, mp_size radix,
+ const char *str);
+mp_result mp_rat_read_cstring(klisp_State *K, mp_rat r, mp_size radix,
+ const char *str, char **end);
+mp_result mp_rat_read_ustring(klisp_State *K, mp_rat r, mp_size radix,
+ const char *str, char **end);
/* Read zero-terminated string in decimal format into r */
-mp_result mp_rat_read_decimal(mp_rat r, mp_size radix, const char *str);
-mp_result mp_rat_read_cdecimal(mp_rat r, mp_size radix, const char *str,
- char **end);
+mp_result mp_rat_read_decimal(klisp_State *K, mp_rat r, mp_size radix,
+ const char *str);
+mp_result mp_rat_read_cdecimal(klisp_State *K, mp_rat r, mp_size radix,
+ const char *str, char **end);
#ifdef __cplusplus
}