Hi Marco,

.t is for template, and at build time, the full implementations of these
blocks are generated, and then compiled.
gr_modtool doesn't support that. However, the magic involved is not
really of the overly complex kind:

* CMake writes a python program to do the substitutions
* In the CMakeLists.txt, that program is applied to all templates
* the resulting headers/C++ implementations are added to the list of
files that need to be built and linked together

For reference, open up gr-blocks/lib/CMakeLists.txt, and have a look at
all the *EXPAND* lines; you'll find the matching CMake routines in
cmake/Modules/GrMiscUtils.cmake.

SWIG *should* handle the templates well by now, but might be
exceptionally hard to tell it what to wrap (and what not). Also, the
classical templating problems arise: Unless you *use* a specific
template specialization, it never gets built -- and in the end, SWIG
might try to wrap things that aren't there; maybe
http://www.swig.org/Doc1.3/SWIGPlus.html#SWIGPlus_nn30 has an approach
that might work for you:

/* Instantiate a few different versions of the template */
%template(intList) List<int>;
%template(doubleList) List<double>;

so in your case, maybe something like

%template(marco_block_cc) marco_block<gr_complex>;

I haven't tested this for a while, though.

The reason there's these expanding templates instead of proper C++
templates in GNU Radio is for historical reasons (SWIG didn't use to
handle templates at all), and for the reason that a block typically
doesn't care about the data that it's being handed at all (e.g. it just
memcpy from A to B), in which case a simple passing of the item size as
parameter is sufficient, or it cares a lot about the type, and needs a
different specialization for basically almost all implementations (e.g.
multiplying two floats is optimized differently than multiplying
complexes). So the reasonable thing to ask here is: Does your block fit
in either of these two categories?

Greetings,
Marcus

On 05/06/2015 12:47 AM, marco Ribero wrote:
> Looking inside gnuradio,I've found blocks like divide_XX where
> relative files have an extension .t (like divide_XX_impl.cc.t )..in
> this way,is possible to manage different types for the same block.
> How is posssible to create blocks like them? is necessary to use
> particular parameters in gr_modtools?
>
> I ask this because I didn't found other clever way to manage multiple
> data type at the same time. I've tried with template, but it doesn't
> wotk(cmake/make work,but swig doesn't work)..also making different
> blocks(same function,different data type) which invoke the same
> template(with different parameters) doesn't work with swig,and crash
> aslo the others wrapper.
>
> Thanks,
> marco
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to