There are three kinds of atoms:
Numerical values are always floatingpoint-values (t_float
),
even if they could be displayed as integer values.
Each symbol is stored in a lookup-table for reasons of performance.
The command gensym
looks up a string in the lookup-table and
returns the address of the symbol.
If the string is not yet to be found in the table,
a new symbol is added.
Atoms of type A_POINTER are not very important (for simple externals).
The type of an atom a
is stored in the structure-element a.a_type
.
Since the symbols for these selectors are used quite often,
their address in the lookup-table can be queried directly,
without having to use gensym
:
selector | lookup-routine | lookup-address |
bang | gensym("bang") |
&s_bang |
float | gensym("float") |
&s_float |
symbol | gensym("symbol") |
&s_symbol |
pointer | gensym("pointer") |
&s_pointer |
list | gensym("list") |
&s_list |
-- (signal) | gensym("signal") |
&s_symbol |
Other selectors can be used as well. The receiving class has to provide a method for a specifique selector or for ``anything'', which is any arbitrary selector.
Messages that have no explicit selector and start with a numerical value, are recognized automatically either as ``float''-message (only one atom) or as ``list''-message (several atoms).
For example, messages ``12.429
'' and ``float 12.429
'' are identical.
Likewise, the messages ``list 1 for you
'' is identical to ``1 for you
''.