Next: The Complete Example, Previous: Remembering During Operations, Up: Defining New Types (Smobs)
Smobs are called smob because they are small: they normally have only
room for one void*
or SCM
value plus 16 bits. The
reason for this is that smobs are directly implemented by using the
low-level, two-word cells of Guile that are also used to implement
pairs, for example. (see Data Representation for the details.)
One word of the two-word cells is used for SCM_SMOB_DATA
(or
SCM_SMOB_OBJECT
), the other contains the 16-bit type tag and
the 16 extra bits.
In addition to the fundamental two-word cells, Guile also has
four-word cells, which are appropriately called double cells.
You can use them for double smobs and get two more immediate
words of type scm_t_bits
.
A double smob is created with SCM_NEWSMOB2
or
SCM_NEWSMOB3
instead of SCM_NEWSMOB
. Its immediate
words can be retrieved as scm_t_bits
with
SCM_SMOB_DATA_2
and SCM_SMOB_DATA_3
in addition to
SCM_SMOB_DATA
. Unsurprisingly, the words can be set to
scm_t_bits
values with SCM_SET_SMOB_DATA_2
and
SCM_SET_SMOB_DATA_3
.
Of course there are also SCM_SMOB_OBJECT_2
,
SCM_SMOB_OBJECT_3
, SCM_SET_SMOB_OBJECT_2
, and
SCM_SET_SMOB_OBJECT_3
.