Warning: This is the manual of the legacy Guile 2.0 series. You may want to read the manual of the current stable series instead.
Next: The Complete Example, Previous: Remembering During Operations, Up: Defining New Types (Smobs) [Contents][Index]
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_new_double_smob
. 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
.