I'd like to write an object that takes a variable number of arguments, which can be either float or symbol, and in any order (for example, float float symbol, or symbol float). How can I check the data type of each argument inside the new routine?
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@lists.iem.at https://lists.puredata.info/listinfo/pd-dev
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@lists.iem.at https://lists.puredata.info/listinfo/pd-dev
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@lists.iem.at https://lists.puredata.info/listinfo/pd-dev
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@lists.iem.at https://lists.puredata.info/listinfo/pd-dev