This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/library/dialect/swi/fli/swi.h

122 lines
2.5 KiB
C
Raw Normal View History

2014-05-12 17:49:11 +01:00
/*************************************************************************
* *
* YAP Prolog *
* *
* Yap Prolog was developed at NCCUP - Universidade do Porto *
* *
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-2014 *
* *
*************************************************************************/
2015-04-13 13:28:17 +01:00
/**
2015-01-04 23:58:23 +00:00
@{
2015-04-13 13:28:17 +01:00
2015-01-04 23:58:23 +00:00
@file swi.h
2014-05-12 17:49:11 +01:00
@defgroup swi-c-interface SWI-Prolog Foreign Language Interface
2014-09-11 20:06:57 +01:00
@ingroup ChYInterface
2014-05-12 17:49:11 +01:00
2014-05-14 10:01:11 +01:00
*
* @tableofcontents
*
* A reimplementation of Jan Wielemaker's SWI-Prolog C-language interface, it supports
* most of the functionality in the original implementation. It allows for:
*
* - Term Construction, Access, and Unification
* - Manipulation of Atoms, Strings, Lists of Codes and Lists of Atoms
* - Query evaluation
* - Thread and Prolog engine management
* - Data-Base Access
*
* In this interface, all Prolog data known by C is referenced through term references (term_t), hence
* Prolog has all the information necessary to perform its memory management without special precautions
* from the C programmer.
2014-05-12 17:49:11 +01:00
*/
2015-06-19 01:29:16 +01:00
#ifndef SWI_H
#define SWI_H 1
#include "SWI-Prolog.h"
2010-11-30 21:59:45 +00:00
void Yap_swi_install(void);
void Yap_install_blobs(void);
#define addr_hash(V) (((CELL) (V)) >> 4 & (N_SWI_HASH-1))
static inline void
add_to_hash(Int i, ADDR key)
{
2013-10-04 13:22:00 +01:00
2010-11-30 21:59:45 +00:00
UInt h = addr_hash(key);
while (SWI_ReverseHash[h].key) {
h = (h+1)%N_SWI_HASH;
}
SWI_ReverseHash[h].key = key;
SWI_ReverseHash[h].pos = i;
}
static inline Term
SWIModuleToModule(module_t m)
{
CACHE_REGS
2010-11-30 21:59:45 +00:00
if (m)
return MkAtomTerm(m->AtomOfME);
2010-11-30 21:59:45 +00:00
if (CurrentModule)
return CurrentModule;
return USER_MODULE;
}
2015-06-19 01:29:16 +01:00
#ifdef YATOM_H
static inline atom_t
AtomToSWIAtom(Atom at)
{
TranslationEntry *p;
2015-08-07 22:57:53 +01:00
if ((p = Yap_GetTranslationProp(at,0)) != NULL)
2015-06-19 01:29:16 +01:00
return (atom_t)(p->Translation*2+1);
return (atom_t)at;
}
#endif
static inline Atom
SWIAtomToAtom(atom_t at)
{
if ((CELL)at & 1)
return SWI_Atoms[at/2];
return (Atom)at;
}
2015-08-07 22:57:53 +01:00
static inline functor_t
FunctorToSWIFunctor(Functor f)
{
TranslationEntry *p;
Atom at = NameOfFunctor(f);
arity_t ar = ArityOfFunctor(f);
if ((p = Yap_GetTranslationProp(at,ar)) != NULL)
return (functor_t)(p->Translation*2+1);
return (functor_t)f;
}
2015-06-19 01:29:16 +01:00
static inline Functor
SWIFunctorToFunctor(functor_t f)
{
2015-08-07 22:57:53 +01:00
if ((CELL)f & 1)
return SWI_Functors[f/2];
2015-06-19 01:29:16 +01:00
return (Functor)f;
}
2013-11-21 00:22:03 +00:00
#define isDefinedProcedure(pred) TRUE // TBD
2014-05-14 10:01:11 +01:00
2015-06-19 01:29:16 +01:00
int Yap_write_blob(AtomEntry *ref, FILE *stream);
#endif
2014-05-14 10:01:11 +01:00
/**
@}
*/