/* * integer.c * * functions for integer cells. * * (c) 2017 Simon Brooke * Licensed under GPL version 2.0, or, at your option, any later version. */ #define _GNU_SOURCE #include #include #include "conspage.h" #include "consspaceobject.h" /** * return the numeric value of this cell, as a C primitive double, not * as a cons-space object. Cell may in principle be any kind of number, * but only integers and reals are so far implemented. */ long double numeric_value( struct cons_pointer pointer ) { long double result = NAN; struct cons_space_object *cell = &pointer2cell( pointer ); if ( integerp( pointer ) ) { result = cell->payload.integer.value * 1.0; } else if ( realp( pointer ) ) { result = cell->payload.real.value; } return result; } /** * Allocate an integer cell representing this value and return a cons pointer to it. */ struct cons_pointer make_integer( int64_t value ) { struct cons_pointer result = allocate_cell( INTEGERTAG ); struct cons_space_object *cell = &pointer2cell( result ); cell->payload.integer.value = value; #ifdef DEBUG dump_object( stderr, result ); #endif return result; }