discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] PMT Pairs/Dictionaries type checking bug


From: Jacob Gilbert
Subject: Re: [Discuss-gnuradio] PMT Pairs/Dictionaries type checking bug
Date: Thu, 10 Mar 2016 21:44:43 -0700

Fair enough - it's a functional workaround at least. I'm going to submit a pull request to add a warning to the doxygen about this as it is currently incorrect.

On Thu, Mar 10, 2016 at 8:14 PM, Martin Braun <address@hidden> wrote:
Yeah, we had some discussions about making the dicts more explicit, but
eventually didn't. So this code is currently all you can do.

Cheers,
M

On 03/10/2016 06:59 PM, Jacob Gilbert wrote:
> Looks like this is known to at least some other folks. Here is a fix
> borrowed from:
> https://github.com/gnuradio/gnuradio/blob/master/gr-uhd/lib/usrp_block_impl.cc#L459
>
> void block::msg_handler(pmt::pmt_t msg)
> {
>   try {
>   pmt::pmt_t keys = pmt::dict_keys(msg);
>   } catch (const pmt::wrong_type &e) {
>   msg = pmt::dict_add(pmt::make_dict(), pmt::car(msg), pmt::cdr(msg));
>   }
>
> <<< rest of message handler here... input msg will be a dictionary >>>
> }
>
>
> On Thu, Mar 10, 2016 at 9:26 AM, Jacob Gilbert
> <address@hidden <mailto:address@hidden>> wrote:
>
>     It appears that PMT dictionaries and pairs are treated identically
>     when it comes to using the pmt::is_<type>() checking functions.
>
>     Example:
>
>           pmt::pmt_t test_pair = pmt::cons(pmt::mp("pair"), pmt::mp(1));
>           pmt::pmt_t test_dict = pmt::dict_add(pmt::make_dict(),
>     pmt::mp("dict"), pmt::mp(1));
>
>           if (pmt::is_pair(test_pair)) std::cout << "Pair is a pair" <<
>     std::endl;
>           if (pmt::is_pair(test_dict)) std::cout << "Dict is a pair" <<
>     std::endl;
>           if (pmt::is_dict(test_pair)) std::cout << "Pair is a dict" <<
>     std::endl;
>           if (pmt::is_dict(test_dict)) std::cout << "Dict is a dict" <<
>     std::endl;
>
>     output is:
>
>     Pair is a pair
>     Dict is a pair
>     Pair is a dict
>     Dict is a dict
>
>     Naturally this causes issues if you attempt to use these PMTs (eg:
>     get the keys from a pair). I'm not sure if this is an issue with GNU
>     Radio or with some external PMT handling library, but at a minimum
>     it seems like the doxygen
>     (http://gnuradio.org/doc/doxygen/namespacepmt.html#a936ecb38da9a2a1bb107c090e194700f)
>
>     "PMT_API bool pmt::is_pair (const pmt_t &obj)   Return true if obj
>     is a pair, else false."
>
>     should be updated to reflect this issue for both pmt::is_pair() and
>     pmt::is_dict().
>
>     Jacob
>
>
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> address@hidden
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>


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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]