From 73e068dd97208771b45f55261a12c38c0ad7f826 Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Sat, 20 Aug 2016 19:24:11 +0200 Subject: [PATCH] python/lib/gen_code.py: add support for multiple _do outputs --- python/lib/gen_code.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/python/lib/gen_code.py b/python/lib/gen_code.py index 1f9b9dc2..b89f171e 100644 --- a/python/lib/gen_code.py +++ b/python/lib/gen_code.py @@ -81,7 +81,7 @@ objoutsize = { 'specdesc': '1', 'tempo': '1', 'filterbank': 'self->n_filters', - 'tss': 'self->hop_size', + 'tss': 'self->buf_size', } objinputsize = { @@ -93,6 +93,7 @@ objinputsize = { 'specdesc': 'self->buf_size / 2 + 1', 'tempo': 'self->hop_size', 'wavetable': 'self->hop_size', + 'tss': 'self->buf_size / 2 + 1', } def get_name(proto): @@ -373,6 +374,8 @@ Py_{shortname}_do (Py_{shortname} * self, PyObject * args) output_params = self.do_outputs #print input_params #print output_params + out += """ + PyObject *outputs;""" for input_param in input_params: out += """ PyObject *py_{0};""".format(input_param['name']) @@ -415,12 +418,25 @@ Py_{shortname}_do (Py_{shortname} * self, PyObject * args) out += """ {do_fn}(self->o, {inputs}, {c_outputs}); +""".format( + do_fn = do_fn, + inputs = inputs, c_outputs = c_outputs, + ) + if len(self.do_outputs) > 1: + out += """ + outputs = PyTuple_New(2);""".format(len(self.do_outputs)) + for i, p in enumerate(self.do_outputs): + out += """ + PyTuple_SetItem( outputs, {i}, self->{p[name]});""".format(i = i, p = p) + else: + out += """ + outputs = self->{p[name]};""".format(p = self.do_outputs[0]) + out += """ - return {outputs}; + return outputs; }} """.format( - do_fn = do_fn, - inputs = inputs, outputs = outputs, c_outputs = c_outputs, + outputs = outputs, ) return out -- 2.11.0