00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 #include <string.h>
00014 #include <numerix/rational.hpp>
00015 #include <basix/evaluator.hpp>
00016 #include <basix/literal.hpp>
00017 namespace mmx {
00018 
00019 string
00020 as_string (const integer& i) {
00021   char* s= mpz_get_str (NULL, 10, *i);
00022   string r= s;
00023   mmx_free (s, strlen (s) + 1);
00024   
00025 
00026 
00027 
00028 
00029   return r;
00030 }
00031 
00032 generic
00033 construct (const integer& i) {
00034   return construct (as<generic> (i));
00035 }
00036 
00037 generic
00038 construct (const rational& x) {
00039   return construct (as<generic> (x));
00040 }
00041 
00042 syntactic
00043 flatten (const integer& i) {
00044   return syntactic (as_string (i));
00045 }
00046 
00047 syntactic
00048 flatten (const rational& x) {
00049   if (denominator (x) == 1) return flatten (numerator (x));
00050   return flatten (numerator (x)) / flatten (denominator (x));
00051 }
00052 
00053 void
00054 mpz_binary_write (const port& p, const mpz_t arg) {
00055   int n= arg->_mp_size;
00056   nat a= (nat) (n<0? -n: n);
00057   binary_write<int> (p, n);
00058   for (nat i=0; i<a; i++)
00059     binary_write<mp_limb_t> (p, arg->_mp_d[i]);
00060 }
00061 
00062 void
00063 mpz_binary_read (const port& p, mpz_t dest) {
00064   int n= binary_read<int> (p);
00065   nat a= (nat) (n<0? -n: n);
00066   (void) _mpz_realloc (dest, a);
00067   for (nat i=0; i<a; i++)
00068     dest->_mp_d[i]= binary_read<mp_limb_t> (p);
00069   dest->_mp_size= n;
00070 }
00071 
00072 void
00073 numeric_to_string (const integer& x, string& s) {
00074   s= as_string (x);
00075 }
00076 
00077 bool
00078 string_to_numeric (const string& s, integer& val) {
00079   val= integer (s);
00080   return is_integer_string (s);
00081 }
00082 
00083 bool
00084 is_literal_integer (const literal& l) {
00085   return is_integer_string (*l);
00086 }
00087 
00088 integer
00089 as_literal_integer (const literal& l) {
00090   return integer (*l);
00091 }
00092 
00093 }