expand C-interface to allow access to common term operations (request from Ingo Molnar).

This commit is contained in:
Vítor Santos Costa
2010-08-02 19:48:17 +01:00
parent 1e737747bf
commit 388f4fb782
6 changed files with 211 additions and 28 deletions

View File

@@ -509,9 +509,14 @@ X_API Term STD_PROTO(YAP_ExtendList,(Term, Term));
X_API int STD_PROTO(YAP_CloseList,(Term, Term));
X_API int STD_PROTO(YAP_IsAttVar,(Term));
X_API Term STD_PROTO(YAP_AttsOfVar,(Term));
X_API Term STD_PROTO(YAP_TermHash,(Term));
X_API int STD_PROTO(YAP_FileNoFromStream,(Term));
X_API void *STD_PROTO(YAP_FileDescriptorFromStream,(Term));
X_API void *STD_PROTO(YAP_Record,(Term));
X_API Term STD_PROTO(YAP_Recorded,(void *));
X_API int STD_PROTO(YAP_Erase,(void *));
X_API int STD_PROTO(YAP_Variant,(Term, Term));
X_API int STD_PROTO(YAP_ExactlyEqual,(Term, Term));
X_API Int STD_PROTO(YAP_TermHash,(Term, Int, Int, int));
static int (*do_getf)(void);
@@ -1050,6 +1055,46 @@ YAP_Unify(Term t1, Term t2)
return out;
}
/* == */
X_API int
YAP_ExactlyEqual(Term t1, Term t2)
{
int out;
BACKUP_MACHINE_REGS();
out = Yap_eq(t1, t2);
RECOVER_MACHINE_REGS();
return out;
}
/* =@= */
X_API int
YAP_Variant(Term t1, Term t2)
{
int out;
BACKUP_MACHINE_REGS();
out = Yap_Variant(Deref(t1), Deref(t2));
RECOVER_MACHINE_REGS();
return out;
}
/* =@= */
X_API Int
YAP_TermHash(Term t, Int sz, Int depth, int variant)
{
Int out;
BACKUP_MACHINE_REGS();
out = Yap_TermHash(t, sz, depth, variant);
RECOVER_MACHINE_REGS();
return out;
}
X_API Int
YAP_CurrentSlot(void)
{
@@ -2992,20 +3037,6 @@ YAP_AttsOfVar(Term t)
return attv->Atts;
}
X_API Term
YAP_TermHash(Term t)
{
attvar_record *attv;
t = Deref(t);
if (!IsVarTerm(t))
return TermNil;
if (IsAttVar(VarOfTerm(t)))
return TermNil;
attv = (attvar_record *)VarOfTerm(t);
return attv->Atts;
}
X_API int
YAP_FileNoFromStream(Term t)
{
@@ -3026,3 +3057,24 @@ YAP_FileDescriptorFromStream(Term t)
return Yap_FileDescriptorFromStream(t);
}
X_API void *
YAP_Record(Term t)
{
return (void *)Yap_StoreTermInDB(Deref(t), 0);
}
X_API Term
YAP_Recorded(void *handle)
{
return Yap_FetchTermFromDB((DBTerm *)handle);
}
X_API int
YAP_Erase(void *handle)
{
Yap_ReleaseTermFromDB((DBTerm *)handle);
return 1;
}