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/H/YapTerm.h

160 lines
3.4 KiB
C
Raw Normal View History

2011-11-04 09:28:09 +00:00
/*************************************************************************
* *
* YAP Prolog %W% %G% *
* Yap Prolog was developed at NCCUP - Universidade do Porto *
* *
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
* *
**************************************************************************
* *
* File: Yap.h *
* mods: *
* comments: abstract type definitions for YAP *
* version: $Id: Yap.h,v 1.38 2008-06-18 10:02:27 vsc Exp $ *
*************************************************************************/
#ifndef YAP_H
2011-11-04 09:28:09 +00:00
#include "YapTermConfig.h"
2015-01-27 03:25:56 +00:00
#include "config.h"
2014-06-11 19:36:50 +01:00
#if HAVE_STDINT_H
#include <stdint.h>
#endif
#if HAVE_INTTYPES_H
#include <inttypes.h>
#endif
2011-11-04 09:28:09 +00:00
typedef void *Functor;
typedef void *Atom;
2011-11-04 09:28:09 +00:00
#endif
2016-04-05 02:28:56 +01:00
#define ALIGN_BY_TYPE(X, TYPE) \
(((CELL)(X) + (sizeof(TYPE) - 1)) & ~(sizeof(TYPE) - 1))
2011-11-04 09:28:09 +00:00
#ifndef EXTERN
#ifdef _MSC_VER
#define EXTERN
#else
2011-11-04 09:28:09 +00:00
#define EXTERN extern
#endif
#endif
2011-11-04 09:28:09 +00:00
/* defines integer types Int and UInt (unsigned) with the same size as a ptr
** and integer types Short and UShort with half the size of a ptr */
2016-04-05 02:28:56 +01:00
#if HAVE_INTTYPES_H
#include <inttypes.h>
#define Int_FORMAT "%" PRIdPTR
#define UInt_ANYFORMAT "%" PRIuPTR
#define UInt_FORMAT "%" PRIuPTR
2014-09-10 05:51:44 +01:00
typedef intptr_t Int;
typedef uintptr_t UInt;
2014-06-11 19:36:50 +01:00
2016-04-05 02:28:56 +01:00
#elif SIZEOF_INT_P == 4
2011-11-04 09:28:09 +00:00
2016-04-05 02:28:56 +01:00
#if SIZEOF_LONGINT == 4
2011-11-04 09:28:09 +00:00
2015-01-20 03:00:42 +00:00
#define Int_FORMAT "%l"
#define UInt_FORMAT "%ul"
2011-11-04 09:28:09 +00:00
2016-04-05 02:28:56 +01:00
#elif SIZEOF_LONG_INT == 4
/* typedef long int Int;*/
/* typedef unsigned long int UInt; */
2011-11-04 09:28:09 +00:00
#if _WIN32 || __ANDROID__
2015-02-09 10:30:24 +00:00
#define Int_FORMAT "%d"
#define UInt_FORMAT "%u"
#else
2011-11-04 09:28:09 +00:00
#define Int_FORMAT "%ld"
#define UInt_FORMAT "%lu"
2015-02-09 10:30:24 +00:00
#endif
2011-11-04 09:28:09 +00:00
#else
#error Yap require integer types of the same size as a pointer
#endif
2016-04-05 02:28:56 +01:00
#if SIZEOF_SHORT_INT == 2
2011-11-04 09:28:09 +00:00
/* */ typedef short int Short;
/* */ typedef unsigned short int UShort;
#else
2016-04-05 02:28:56 +01:00
#error Yap requires integer types half the size of a pointer
2011-11-04 09:28:09 +00:00
#endif
2016-04-05 02:28:56 +01:00
#elif SIZEOF_INT_P == 8
2011-11-04 09:28:09 +00:00
2016-04-05 02:28:56 +01:00
#if SIZEOF_INT == 8
2011-11-04 09:28:09 +00:00
#define Int_FORMAT "%d"
#define UInt_FORMAT "%u"
2016-04-05 02:28:56 +01:00
#elif SIZEOF_LONG_INT == 8
2011-11-04 09:28:09 +00:00
#define Int_FORMAT "%ld"
#define UInt_FORMAT "%lu"
2016-04-05 02:28:56 +01:00
#elif SIZEOF_LONG_LONG_INT == 8
2014-06-16 14:44:04 +01:00
2011-11-04 09:28:09 +00:00
#define Int_FORMAT "%I64d"
#define UInt_FORMAT "%I64u"
2016-04-05 02:28:56 +01:00
#else
#error Yap requires integer types of the same size as a pointer
#endif
2011-11-04 09:28:09 +00:00
2016-04-05 02:28:56 +01:00
#if SIZEOF_SHORT_INT == 4
2011-11-04 09:28:09 +00:00
/* */ typedef short int Short;
/* */ typedef unsigned short int UShort;
2016-04-05 02:28:56 +01:00
#elif SIZEOF_INT == 4
2011-11-04 09:28:09 +00:00
/* */ typedef int Short;
/* */ typedef unsigned int UShort;
2016-04-05 02:28:56 +01:00
#else
#error Yap requires integer types half the size of a pointer
#endif
2011-11-04 09:28:09 +00:00
#else
2016-04-05 02:28:56 +01:00
#error Yap requires pointers of size 4 or 8
2011-11-04 09:28:09 +00:00
#endif
2014-09-10 05:51:44 +01:00
typedef uintptr_t CELL;
typedef uint16_t BITS16;
typedef int16_t SBITS16;
typedef uint32_t BITS32;
2011-11-04 09:28:09 +00:00
2016-04-05 02:28:56 +01:00
#define WordSize sizeof(BITS16)
#define CellSize sizeof(CELL)
#define SmallSize sizeof(SMALLUNSGN)
2011-11-04 09:28:09 +00:00
/*************************************************************************************************
type casting macros
*************************************************************************************************/
2014-09-10 05:51:44 +01:00
typedef uintptr_t Term;
2011-11-04 09:28:09 +00:00
2014-09-10 05:51:44 +01:00
typedef intptr_t yhandle_t;
2014-06-11 19:36:50 +01:00
2014-09-10 05:51:44 +01:00
typedef double Float;
2011-11-04 09:28:09 +00:00
2016-04-05 02:28:56 +01:00
#if SIZEOF_INT < SIZEOF_INT_P
2011-11-04 09:28:09 +00:00
#define SHORT_INTS 1
#else
#define SHORT_INTS 0
#endif
#ifdef __GNUC__
typedef long long int YAP_LONG_LONG;
typedef unsigned long long int YAP_ULONG_LONG;
#else
typedef long int YAP_LONG_LONG;
typedef unsigned long int YAP_ULONG_LONG;
#endif
2016-04-05 02:28:56 +01:00
#define Unsigned(V) ((CELL)(V))
#define Signed(V) ((Int)(V))