support for PL_ mpz and mpq ops

add missing atom_nchars
This commit is contained in:
Vítor Santos Costa
2010-06-18 23:24:36 +01:00
parent 4c45f8c4b1
commit d1d149b9fd
4 changed files with 112 additions and 0 deletions

View File

@@ -1594,6 +1594,47 @@ Yap_gmp_to_size(Term t, int base)
return 1;
}
int
Yap_term_to_existing_big(Term t, MP_INT *b)
{
if (IsVarTerm(t))
return FALSE;
if (IsIntegerTerm(t)) {
mpz_set_si(b,IntegerOfTerm(t));
return TRUE;
}
if (IsBigIntTerm(t)) {
if (RepAppl(t)[1] != BIG_INT)
return FALSE;
mpz_set(b,Yap_BigIntOfTerm(t));
return TRUE;
}
return FALSE;
}
int
Yap_term_to_existing_rat(Term t, MP_RAT *b)
{
if (IsVarTerm(t))
return FALSE;
if (IsIntegerTerm(t)) {
mpq_set_si(b, IntegerOfTerm(t), 1);
return TRUE;
}
if (IsBigIntTerm(t)) {
CELL flag = RepAppl(t)[1];
if (flag == BIG_INT) {
mpq_set_z(b, Yap_BigIntOfTerm(t));
return TRUE;
}
if (flag == BIG_RATIONAL) {
mpq_set(b, Yap_BigRatOfTerm(t));
return TRUE;
}
}
return FALSE;
}
#endif