cell_xsb.h File Reference

#include "xsb_config.h"
#include "cell_def_xsb.h"
#include "basictypes.h"
#include "box_defines.h"
#include "celltags_xsb.h"
#include "context.h"

Defines

#define cell(cptr)   *(cptr)
#define follow(cell)   (*(CPtr)(cell))
#define FLOAT_MASK   0xfffffff8
#define isref(cell)   (!((word)(cell)&0x3))
#define isnonvar(cell)   ((word)(cell)&0x3)
#define cell_tag(cell)   ((word)(cell)&0x7)
#define enc_int(val)   (((Integer)(val) << 3))
#define dec_int(val)   ((Integer)(val) >> 3)
#define enc_addr(addr)   ((Cell)(addr) << 1)
#define dec_addr(dcell)   (((Cell)(dcell) >> 1) & 0x7ffffffc)
#define int_val(dcell)   (Integer)dec_int(dcell)
#define makeint(val)   (Cell)((enc_int(val)) | XSB_INT)
#define string_val(dcell)   (char *)dec_addr(dcell)
#define makestring(str)   (Cell)(enc_addr(str) | XSB_STRING)
#define makenil   makestring(nil_string)
#define cs_val(dcell)   (Pair)dec_addr(dcell)
#define makecs(str)   (Cell)(enc_addr(str) | XSB_STRUCT)
#define clref_val(dcell)   (CPtr)dec_addr(dcell)
#define makelist(list)   (Cell)(enc_addr(list) | XSB_LIST)
#define makeattv(attv)   (Cell)(enc_addr(attv) | XSB_ATTV)
#define trievar_val(dcell)   (Integer)dec_int(dcell)
#define maketrievar(val)   (Cell)(enc_int(val) | XSB_TrieVar)
#define get_str_psc(dcell)   (*((Psc *)dec_addr(dcell)))
#define addr_val(dcell)   string_val(dcell)
#define makeaddr(val)   makestring(val)
#define vptr(dcell)   (CPtr)(dcell)
#define float_val(dcell)   getfloatval(dcell)
#define ref_val(dcell)   (CPtr)(dcell)
#define bld_nil(addr)   cell(addr) = makenil
#define bld_string(addr, str)   cell(addr) = makestring(str)
#define bld_int_tagged(addr, val)   cell(addr) = val
#define bld_int(addr, val)   cell(addr) = makeint(val)
#define bld_float_tagged(addr, val)   cell(addr) = val
#define bld_float(addr, val)   cell(addr) = makefloat(val)
#define bld_ref(addr, val)   cell(addr) = (Cell)(val)
#define bld_cs(addr, str)   cell(addr) = makecs(str)
#define bld_list(addr, list)   cell(addr) = makelist(list)
#define bld_attv(addr, attv)   cell(addr) = makeattv(attv)
#define bld_functor(addr, psc)   cell(addr) = (word)psc
#define bld_copy0(addr, val)   cell(addr) = val
#define bld_copy(addr, val)   cell(addr) = val
#define bld_free(addr)   cell(addr) = (Cell)(addr)
#define isinteger(dcell)   (cell_tag(dcell)==XSB_INT)
#define isfloat(dcell)   (cell_tag(dcell)==XSB_FLOAT)
#define isconstr(dcell)   (cell_tag(dcell)==XSB_STRUCT)
#define islist(dcell)   (cell_tag(dcell)==XSB_LIST)
#define isattv(dcell)   (cell_tag(dcell)==XSB_ATTV)
#define isstring(dcell)   (cell_tag(dcell)==XSB_STRING)
#define numequal(num1, num2)   num1 == num2
#define isnumber(dcell)   ((isinteger(dcell)) || (isfloat(dcell)))
#define isconstant(dcell)   ( isstring(dcell) || isnumber(dcell) )
#define isatom(dcell)
#define isatomic(dcell)
#define isnil(dcell)   (isstring(dcell) && (char *)string_val(dcell) == nil_string)
#define isboxed(term)   (isconstr(term) && get_str_psc(term) == box_psc )
#define box_has_id(dcell, box_identifier)   (int_val(cell(clref_val(dcell)+1))>>16 == box_identifier)
#define MAX_ARITY   255
#define CELL_DEFS_INCLUDED
#define arity_integer(dcell)
#define isboxedinteger(dcell)   (isboxed(dcell) && box_has_id(dcell, ID_BOXED_INT))
#define isboxedfloat(dcell)   (isboxed(dcell) && box_has_id(dcell, ID_BOXED_FLOAT))
#define boxedint_val(dcell)
#define EXTRACT_FLOAT_FROM_16_24_24(highInt, middleInt, lowInt)
#define boxedfloat_val(dcell)
#define oint_val(dcell)
#define ofloat_val(dcell)
#define isofloat(val)   ( (isboxedfloat(val)) || (isfloat(val)) )
#define int_overflow(value)   (int_val(makeint(value)) != (value))
#define bld_boxedint(addr, value)
#define bld_oint(addr, value)

Functions

float getfloatval (Cell)
Cell makefloat (float)
int sign (Float)
Float make_float_from_ints (UInteger, UInteger)
void bld_boxedfloat (CTXTdeclc CPtr, Float)

Define Documentation

#define addr_val dcell   )     string_val(dcell)
 

#define arity_integer dcell   ) 
 

Value:

(isinteger(dcell) && int_val(dcell) >= 0 \
          && int_val(dcell) <= MAX_ARITY)

#define bld_attv addr,
attv   )     cell(addr) = makeattv(attv)
 

#define bld_boxedint addr,
value   ) 
 

Value:

{Cell binttemp = makecs(hreg);                                  \
      new_heap_functor(hreg,box_psc);                                           \
      bld_int(hreg,((ID_BOXED_INT << BOX_ID_OFFSET ) )); hreg++;        \
      bld_int(hreg,INT_LOW_24_BITS(value)); hreg++;                     \
      bld_int(hreg,((value) & LOW_24_BITS_MASK)); hreg++;                   \
      cell(addr) = binttemp;}

#define bld_copy addr,
val   )     cell(addr) = val
 

#define bld_copy0 addr,
val   )     cell(addr) = val
 

#define bld_cs addr,
str   )     cell(addr) = makecs(str)
 

#define bld_float addr,
val   )     cell(addr) = makefloat(val)
 

#define bld_float_tagged addr,
val   )     cell(addr) = val
 

#define bld_free addr   )     cell(addr) = (Cell)(addr)
 

#define bld_functor addr,
psc   )     cell(addr) = (word)psc
 

#define bld_int addr,
val   )     cell(addr) = makeint(val)
 

#define bld_int_tagged addr,
val   )     cell(addr) = val
 

#define bld_list addr,
list   )     cell(addr) = makelist(list)
 

#define bld_nil addr   )     cell(addr) = makenil
 

#define bld_oint addr,
value   ) 
 

Value:

if (int_overflow(((Integer)value))) {                   \
      bld_boxedint(addr, ((Integer)value));                     \
    } else {bld_int(addr,((Integer)value));}

#define bld_ref addr,
val   )     cell(addr) = (Cell)(val)
 

#define bld_string addr,
str   )     cell(addr) = makestring(str)
 

#define box_has_id dcell,
box_identifier   )     (int_val(cell(clref_val(dcell)+1))>>16 == box_identifier)
 

#define boxedfloat_val dcell   ) 
 

Value:

(                                                   \
     (Float)(    EXTRACT_FLOAT_FROM_16_24_24(           \
                   (int_val(cell(clref_val(dcell)+1))), \
                   (int_val(cell(clref_val(dcell)+2))), \
                   (int_val(cell(clref_val(dcell)+3)))  \
                 )                                      \
            )                                           \
    )

#define boxedint_val dcell   ) 
 

Value:

((Integer)((((unsigned long)int_val(cell(clref_val(dcell)+2))<<24)   \
                  | int_val(cell(clref_val(dcell)+3)))))

#define cell cptr   )     *(cptr)
 

#define CELL_DEFS_INCLUDED
 

#define cell_tag cell   )     ((word)(cell)&0x7)
 

#define clref_val dcell   )     (CPtr)dec_addr(dcell)
 

#define cs_val dcell   )     (Pair)dec_addr(dcell)
 

#define dec_addr dcell   )     (((Cell)(dcell) >> 1) & 0x7ffffffc)
 

#define dec_int val   )     ((Integer)(val) >> 3)
 

#define enc_addr addr   )     ((Cell)(addr) << 1)
 

#define enc_int val   )     (((Integer)(val) << 3))
 

#define EXTRACT_FLOAT_FROM_16_24_24 highInt,
middleInt,
lowInt   ) 
 

Value:

(make_float_from_ints(  (((((UInteger) highInt) & LOW_16_BITS_MASK) <<16) | (((UInteger) middleInt) >> 8)), \
                              ((((UInteger) middleInt)<<24) | (UInteger)lowInt)) )

#define FLOAT_MASK   0xfffffff8
 

#define float_val dcell   )     getfloatval(dcell)
 

#define follow cell   )     (*(CPtr)(cell))
 

#define get_str_psc dcell   )     (*((Psc *)dec_addr(dcell)))
 

define get_str_psc(dcell) ((cs_val(dcell))->psc_ptr)

#define int_overflow value   )     (int_val(makeint(value)) != (value))
 

#define int_val dcell   )     (Integer)dec_int(dcell)
 

#define isatom dcell   ) 
 

Value:

((isstring(dcell)) || \
                         (isconstr(dcell) && get_arity(get_str_psc(dcell))==0))

#define isatomic dcell   ) 
 

Value:

((isstring(dcell)) || (isnumber(dcell)) || \
                         (isconstr(dcell) && get_arity(get_str_psc(dcell))==0))

#define isattv dcell   )     (cell_tag(dcell)==XSB_ATTV)
 

#define isboxed term   )     (isconstr(term) && get_str_psc(term) == box_psc )
 

#define isboxedfloat dcell   )     (isboxed(dcell) && box_has_id(dcell, ID_BOXED_FLOAT))
 

#define isboxedinteger dcell   )     (isboxed(dcell) && box_has_id(dcell, ID_BOXED_INT))
 

#define isconstant dcell   )     ( isstring(dcell) || isnumber(dcell) )
 

#define isconstr dcell   )     (cell_tag(dcell)==XSB_STRUCT)
 

#define isfloat dcell   )     (cell_tag(dcell)==XSB_FLOAT)
 

#define isinteger dcell   )     (cell_tag(dcell)==XSB_INT)
 

#define islist dcell   )     (cell_tag(dcell)==XSB_LIST)
 

#define isnil dcell   )     (isstring(dcell) && (char *)string_val(dcell) == nil_string)
 

#define isnonvar cell   )     ((word)(cell)&0x3)
 

#define isnumber dcell   )     ((isinteger(dcell)) || (isfloat(dcell)))
 

#define isofloat val   )     ( (isboxedfloat(val)) || (isfloat(val)) )
 

#define isref cell   )     (!((word)(cell)&0x3))
 

#define isstring dcell   )     (cell_tag(dcell)==XSB_STRING)
 

#define makeaddr val   )     makestring(val)
 

#define makeattv attv   )     (Cell)(enc_addr(attv) | XSB_ATTV)
 

#define makecs str   )     (Cell)(enc_addr(str) | XSB_STRUCT)
 

#define makeint val   )     (Cell)((enc_int(val)) | XSB_INT)
 

#define makelist list   )     (Cell)(enc_addr(list) | XSB_LIST)
 

#define makenil   makestring(nil_string)
 

#define makestring str   )     (Cell)(enc_addr(str) | XSB_STRING)
 

#define maketrievar val   )     (Cell)(enc_int(val) | XSB_TrieVar)
 

#define MAX_ARITY   255
 

#define numequal num1,
num2   )     num1 == num2
 

#define ofloat_val dcell   ) 
 

Value:

(isfloat(dcell)          \
     ?float_val(dcell)         \
     :(isboxedfloat(dcell) \
       ?boxedfloat_val(dcell)  \
       :12345.6789))

#define oint_val dcell   ) 
 

Value:

(isinteger(dcell)        \
     ?int_val(dcell)         \
     :(isboxedinteger(dcell) \
       ?boxedint_val(dcell)  \
       :(Integer)0x80000000))

#define ref_val dcell   )     (CPtr)(dcell)
 

#define string_val dcell   )     (char *)dec_addr(dcell)
 

#define trievar_val dcell   )     (Integer)dec_int(dcell)
 

#define vptr dcell   )     (CPtr)(dcell)
 


Function Documentation

void bld_boxedfloat CTXTdeclc  CPtr,
Float 
[inline]
 

float getfloatval Cell   )  [inline]
 

Float make_float_from_ints UInteger  ,
UInteger 
[inline]
 

Cell makefloat float   )  [inline]
 

int sign Float   )  [inline]
 


Generated on Wed Jul 26 13:26:53 2006 for XSB by  doxygen 1.4.5