/** * 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 "conspage.h" #include "consspaceobject.h" #include "read.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. */ double numeric_value(struct cons_pointer pointer) { double result = NAN; struct cons_space_object *cell = &pointer2cell(pointer); if (integerp(pointer)) { result = (double) cell->payload.integer.value; } 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(int value) { struct cons_pointer result = allocate_cell(INTEGERTAG); struct cons_space_object *cell = &pointer2cell(result); cell->payload.integer.value = value; return result; }