From 7d0955ef7bc7a41855ca3301976c6616981fa27e Mon Sep 17 00:00:00 2001 From: jblum Date: Sat, 14 Mar 2009 05:54:43 +0000 Subject: [PATCH] Add vlen to subtract, divide, and float2complex. Takes care of #302 and #303 git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@10598 221aa14e-8319-0410-a670-987f0aec2ac5 --- .../src/lib/general/gr_float_to_complex.cc | 17 +++++++++-------- .../src/lib/general/gr_float_to_complex.h | 10 ++++++---- .../src/lib/general/gr_float_to_complex.i | 6 +++--- gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t | 17 +++++++++-------- gnuradio-core/src/lib/gengen/gr_divide_XX.h.t | 10 ++++++---- gnuradio-core/src/lib/gengen/gr_divide_XX.i.t | 6 +++--- gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t | 16 ++++++++-------- gnuradio-core/src/lib/gengen/gr_sub_XX.h.t | 10 ++++++---- gnuradio-core/src/lib/gengen/gr_sub_XX.i.t | 6 +++--- .../platforms/python/blocks/gr_divide_xx.xml | 11 ++++++++++- .../python/blocks/gr_float_to_complex.xml | 12 +++++++++++- grc/data/platforms/python/blocks/gr_sub_xx.xml | 11 ++++++++++- 12 files changed, 84 insertions(+), 48 deletions(-) diff --git a/gnuradio-core/src/lib/general/gr_float_to_complex.cc b/gnuradio-core/src/lib/general/gr_float_to_complex.cc index 0c5c22d0..077a498a 100644 --- a/gnuradio-core/src/lib/general/gr_float_to_complex.cc +++ b/gnuradio-core/src/lib/general/gr_float_to_complex.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004, 2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -28,15 +28,16 @@ #include gr_float_to_complex_sptr -gr_make_float_to_complex () +gr_make_float_to_complex (int vlen) { - return gr_float_to_complex_sptr (new gr_float_to_complex ()); + return gr_float_to_complex_sptr (new gr_float_to_complex (vlen)); } -gr_float_to_complex::gr_float_to_complex () +gr_float_to_complex::gr_float_to_complex (int vlen) : gr_sync_block ("gr_float_to_complex", - gr_make_io_signature (1, 2, sizeof (float)), - gr_make_io_signature (1, 1, sizeof (gr_complex))) + gr_make_io_signature (1, 2, sizeof (float) * vlen), + gr_make_io_signature (1, 1, sizeof (gr_complex) * vlen)), + d_vlen (vlen) { } @@ -51,12 +52,12 @@ gr_float_to_complex::work (int noutput_items, switch (input_items.size ()){ case 1: - for (int j = 0; j < noutput_items; j++) + for (int j = 0; j < noutput_items*d_vlen; j++) out[j] = gr_complex (r[j], 0); break; case 2: - for (int j = 0; j < noutput_items; j++) + for (int j = 0; j < noutput_items*d_vlen; j++) out[j] = gr_complex (r[j], i[j]); break; diff --git a/gnuradio-core/src/lib/general/gr_float_to_complex.h b/gnuradio-core/src/lib/general/gr_float_to_complex.h index 67dfa6b1..4a394092 100644 --- a/gnuradio-core/src/lib/general/gr_float_to_complex.h +++ b/gnuradio-core/src/lib/general/gr_float_to_complex.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004, 2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -30,7 +30,7 @@ class gr_float_to_complex; typedef boost::shared_ptr gr_float_to_complex_sptr; gr_float_to_complex_sptr -gr_make_float_to_complex (); +gr_make_float_to_complex (int vlen = 1); /*! * \brief Convert 1 or 2 streams of float to a stream of gr_complex @@ -39,8 +39,10 @@ gr_make_float_to_complex (); class gr_float_to_complex : public gr_sync_block { - friend gr_float_to_complex_sptr gr_make_float_to_complex (); - gr_float_to_complex (); + friend gr_float_to_complex_sptr gr_make_float_to_complex (int vlen); + gr_float_to_complex (int vlen); + + int d_vlen; public: virtual int work (int noutput_items, diff --git a/gnuradio-core/src/lib/general/gr_float_to_complex.i b/gnuradio-core/src/lib/general/gr_float_to_complex.i index 0dd0635b..71e59a8c 100644 --- a/gnuradio-core/src/lib/general/gr_float_to_complex.i +++ b/gnuradio-core/src/lib/general/gr_float_to_complex.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004, 2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -22,9 +22,9 @@ GR_SWIG_BLOCK_MAGIC(gr,float_to_complex) -gr_float_to_complex_sptr gr_make_float_to_complex (); +gr_float_to_complex_sptr gr_make_float_to_complex (int vlen = 1); class gr_float_to_complex : public gr_sync_block { - gr_float_to_complex (); + gr_float_to_complex (int vlen); }; diff --git a/gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t index fbffc2d5..9fc6d34e 100644 --- a/gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t +++ b/gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004, 2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -30,15 +30,16 @@ #include @SPTR_NAME@ -gr_make_@BASE_NAME@ () +gr_make_@BASE_NAME@ (int vlen) { - return @SPTR_NAME@ (new @NAME@ ()); + return @SPTR_NAME@ (new @NAME@ (vlen)); } -@NAME@::@NAME@ () +@NAME@::@NAME@ (int vlen) : gr_sync_block ("@BASE_NAME@", - gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), - gr_make_io_signature (1, 1, sizeof (@O_TYPE@))) + gr_make_io_signature (1, -1, sizeof (@I_TYPE@)*vlen), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@)*vlen)), + d_vlen (vlen) { } @@ -52,13 +53,13 @@ int int ninputs = input_items.size (); if (ninputs == 1){ // compute reciprocal - for (int i = 0; i < noutput_items; i++) + for (int i = 0; i < noutput_items*d_vlen; i++) *optr++ = (@O_TYPE@) ((@O_TYPE@) 1 / ((@I_TYPE@ *) input_items[0])[i]); } else { - for (int i = 0; i < noutput_items; i++){ + for (int i = 0; i < noutput_items*d_vlen; i++){ @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; for (int j = 1; j < ninputs; j++) acc /= ((@I_TYPE@ *) input_items[j])[i]; diff --git a/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t b/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t index 0a1d4d8a..1489986b 100644 --- a/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t +++ b/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004, 2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -30,7 +30,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ gr_make_@BASE_NAME@ (); +@SPTR_NAME@ gr_make_@BASE_NAME@ (int vlen = 1); /*! * \brief output = input_0 / input_1 / input_x ...) @@ -40,9 +40,11 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; */ class @NAME@ : public gr_sync_block { - friend @SPTR_NAME@ gr_make_@BASE_NAME@ (); + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (int vlen); - @NAME@ (); + @NAME@ (int vlen); + + int d_vlen; public: diff --git a/gnuradio-core/src/lib/gengen/gr_divide_XX.i.t b/gnuradio-core/src/lib/gengen/gr_divide_XX.i.t index a4bc4ce6..f07481a8 100644 --- a/gnuradio-core/src/lib/gengen/gr_divide_XX.i.t +++ b/gnuradio-core/src/lib/gengen/gr_divide_XX.i.t @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004, 2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -24,10 +24,10 @@ GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) -@SPTR_NAME@ gr_make_@BASE_NAME@ (); +@SPTR_NAME@ gr_make_@BASE_NAME@ (int vlen = 1); class @NAME@ : public gr_sync_block { private: - @NAME@ (); + @NAME@ (int vlen); }; diff --git a/gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t index 178e1714..93895fed 100644 --- a/gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t +++ b/gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004, 2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -30,15 +30,15 @@ #include @SPTR_NAME@ -gr_make_@BASE_NAME@ () +gr_make_@BASE_NAME@ (int vlen) { - return @SPTR_NAME@ (new @NAME@ ()); + return @SPTR_NAME@ (new @NAME@ (vlen)); } -@NAME@::@NAME@ () +@NAME@::@NAME@ (int vlen) : gr_sync_block ("@BASE_NAME@", - gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), - gr_make_io_signature (1, 1, sizeof (@O_TYPE@))) + gr_make_io_signature (1, -1, sizeof (@I_TYPE@)*vlen), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@)*vlen)) { } @@ -52,12 +52,12 @@ int int ninputs = input_items.size (); if (ninputs == 1){ // negate - for (int i = 0; i < noutput_items; i++) + for (int i = 0; i < noutput_items*d_vlen; i++) *optr++ = (@O_TYPE@) -((@I_TYPE@ *) input_items[0])[i]; } else { - for (int i = 0; i < noutput_items; i++){ + for (int i = 0; i < noutput_items*d_vlen; i++){ @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; for (int j = 1; j < ninputs; j++) acc -= ((@I_TYPE@ *) input_items[j])[i]; diff --git a/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t b/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t index 8839a158..d251e676 100644 --- a/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t +++ b/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004, 2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -30,7 +30,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ gr_make_@BASE_NAME@ (); +@SPTR_NAME@ gr_make_@BASE_NAME@ (int vlen = 1); /*! * \brief output = input_0 - input_1 - ...) @@ -40,9 +40,11 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; */ class @NAME@ : public gr_sync_block { - friend @SPTR_NAME@ gr_make_@BASE_NAME@ (); + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (int vlen); - @NAME@ (); + @NAME@ (int vlen); + + int d_vlen; public: diff --git a/gnuradio-core/src/lib/gengen/gr_sub_XX.i.t b/gnuradio-core/src/lib/gengen/gr_sub_XX.i.t index a4bc4ce6..f07481a8 100644 --- a/gnuradio-core/src/lib/gengen/gr_sub_XX.i.t +++ b/gnuradio-core/src/lib/gengen/gr_sub_XX.i.t @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004, 2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -24,10 +24,10 @@ GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) -@SPTR_NAME@ gr_make_@BASE_NAME@ (); +@SPTR_NAME@ gr_make_@BASE_NAME@ (int vlen = 1); class @NAME@ : public gr_sync_block { private: - @NAME@ (); + @NAME@ (int vlen); }; diff --git a/grc/data/platforms/python/blocks/gr_divide_xx.xml b/grc/data/platforms/python/blocks/gr_divide_xx.xml index 7f875291..04667bc2 100644 --- a/grc/data/platforms/python/blocks/gr_divide_xx.xml +++ b/grc/data/platforms/python/blocks/gr_divide_xx.xml @@ -9,7 +9,7 @@ Divide gr_divide_xx from gnuradio import gr - gr.divide_$(type.fcn)() + gr.divide_$(type.fcn)($vlen) IO Type type @@ -35,20 +35,29 @@ fcn:ss + + Vec Length + vlen + 1 + int + Num Inputs num_inputs 2 int + $vlen > 0 $num_inputs >= 2 in $type + $vlen $num_inputs out $type + $vlen diff --git a/grc/data/platforms/python/blocks/gr_float_to_complex.xml b/grc/data/platforms/python/blocks/gr_float_to_complex.xml index e8734fc6..a1644efd 100644 --- a/grc/data/platforms/python/blocks/gr_float_to_complex.xml +++ b/grc/data/platforms/python/blocks/gr_float_to_complex.xml @@ -9,18 +9,28 @@ Float To Complex gr_float_to_complex from gnuradio import gr - gr.float_to_complex() + gr.float_to_complex($vlen) + + Vec Length + vlen + 1 + int + + $vlen > 0 in float + $vlen in float + $vlen 1 out complex + $vlen diff --git a/grc/data/platforms/python/blocks/gr_sub_xx.xml b/grc/data/platforms/python/blocks/gr_sub_xx.xml index 488e6c36..f1f4797e 100644 --- a/grc/data/platforms/python/blocks/gr_sub_xx.xml +++ b/grc/data/platforms/python/blocks/gr_sub_xx.xml @@ -9,7 +9,7 @@ Subtract gr_sub_xx from gnuradio import gr - gr.sub_$(type.fcn)() + gr.sub_$(type.fcn)($vlen) IO Type type @@ -35,20 +35,29 @@ fcn:ss + + Vec Length + vlen + 1 + int + Num Inputs num_inputs 2 int + $vlen > 0 $num_inputs >= 2 in $type + $vlen $num_inputs out $type + $vlen -- 2.47.2