[PD-dev] How to check data type of arguments in object
Alexandros Drymonitis
adrcki at gmail.com
Wed Sep 13 16:11:36 CEST 2023
Just for the archive, here's a very minimal object that detects the type
of the arguments:
```
#include <m_pd.h>
static t_class *var_args_class;
typedef struct _var_args {
t_object x_obj;
} t_var_args;
void *var_args_new(t_symbol *s, int argc, t_atom *argv)
{
t_var_args *x = (t_var_args *)pd_new(var_args_class);
int i;
for (i = 0; i < argc; i++) {
if (argv->a_type == A_FLOAT) {
float f = atom_getfloat(argv);
post("argumenat at position %d is float: %f",
i, f);
}
else if (argv->a_type == A_SYMBOL) {
t_symbol *s_local = atom_gensym(argv);
post("argument at position %d is symbol: %s",
i, s_local->s_name);
}
argv++;
}
return (x);
}
void var_args_setup(void)
{
var_args_class = class_new(gensym("var_args"),
(t_newmethod)var_args_new,
0, sizeof(t_var_args), CLASS_DEFAULT, A_GIMME, 0);
}
```
On 9/12/23 22:15, Alexandros Drymonitis wrote:
> Or actually, argv->a.type == A_FLOAT. Sorry for clogging the list,
> just wanted to pass the correct information, unless I'm wrong again...
>
> On 9/12/23 19:30, Alexandros Drymonitis wrote:
>> I replied a bit too fast, I guess it should be argv.a_type == A_FLOAT
>> and likewise for symbol. I'll give it a try.
>>
>> On 9/12/23 19:28, Alexandros Drymonitis wrote:
>>> Does this mean that I have to check sort of like this:
>>>
>>> if (argv == A_FLOAT) {
>>> /* do something with the float arg */
>>> }
>>> else if (argv == A_SYMBOL) {
>>> /* do something with the symbol arg */
>>> }
>>>
>>> On 9/12/23 18:55, IOhannes m zmölnig wrote:
>>>> https://github.com/pure-data/externals-howto#class_new-1
>>>> https://github.com/pure-data/externals-howto#atoms
>>>>
>>>> mfg.sfg.jfd
>>>> IOhannes
>>>>
>>>>
>>>> _______________________________________________
>>>> Pd-dev mailing list
>>>> Pd-dev at lists.iem.at
>>>> https://lists.puredata.info/listinfo/pd-dev
More information about the Pd-dev
mailing list