diff options
author | Marcus Müller <marcus@hostalia.de> | 2018-07-14 00:23:43 +0200 |
---|---|---|
committer | Marcus Müller <marcus@hostalia.de> | 2018-07-14 14:41:25 +0200 |
commit | 89736b31397330861dcaa550b7891ce6e7a5536f (patch) | |
tree | 4f70a5bedcd402ea75097b98f5814d7d04944372 /gr-blocks/lib/file_meta_sink_impl.cc | |
parent | df8914b8f8714a3606617ceeefb1c7a9e8775845 (diff) |
Changed file_meta_sink's signature to take unserialized pmt
For some reason, the block accepts serialized PMT from in-GNU Radio,
then unserializes it, then serializes it back.
All possible uses probably will prefer just passing the PMT itself.
Changing the API inherently fixes the Py3-migration related std::string
handling ambiguity.
Diffstat (limited to 'gr-blocks/lib/file_meta_sink_impl.cc')
-rw-r--r-- | gr-blocks/lib/file_meta_sink_impl.cc | 60 |
1 files changed, 30 insertions, 30 deletions
diff --git a/gr-blocks/lib/file_meta_sink_impl.cc b/gr-blocks/lib/file_meta_sink_impl.cc index b6d858489d..fed28c7352 100644 --- a/gr-blocks/lib/file_meta_sink_impl.cc +++ b/gr-blocks/lib/file_meta_sink_impl.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2012 Free Software Foundation, Inc. + * Copyright 2012,2018 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -56,12 +56,15 @@ namespace gr { file_meta_sink::sptr - file_meta_sink::make(size_t itemsize, const std::string &filename, - double samp_rate, double relative_rate, - gr_file_types type, bool complex, - size_t max_segment_size, - const std::string &extra_dict, - bool detached_header) + file_meta_sink::make(size_t itemsize, + const std::string &filename, + double samp_rate, + double relative_rate, + gr_file_types type, + bool complex, + size_t max_segment_size, + pmt::pmt_t extra_dict, + bool detached_header) { return gnuradio::get_initial_sptr (new file_meta_sink_impl(itemsize, filename, @@ -73,19 +76,19 @@ namespace gr { } file_meta_sink_impl::file_meta_sink_impl(size_t itemsize, - const std::string &filename, - double samp_rate, double relative_rate, - gr_file_types type, bool complex, - size_t max_segment_size, - const std::string &extra_dict, - bool detached_header) + const std::string &filename, + double samp_rate, double relative_rate, + gr_file_types type, bool complex, + size_t max_segment_size, + pmt::pmt_t extra_dict, + bool detached_header) : sync_block("file_meta_sink", - io_signature::make(1, 1, itemsize), - io_signature::make(0, 0, 0)), - d_itemsize(itemsize), - d_samp_rate(samp_rate), d_relative_rate(relative_rate), - d_max_seg_size(max_segment_size), d_total_seg_size(0), - d_updated(false), d_unbuffered(false) + io_signature::make(1, 1, itemsize), + io_signature::make(0, 0, 0)), + d_itemsize(itemsize), + d_samp_rate(samp_rate), d_relative_rate(relative_rate), + d_max_seg_size(max_segment_size), d_total_seg_size(0), + d_updated(false), d_unbuffered(false) { d_fp = 0; d_new_fp = 0; @@ -105,16 +108,13 @@ namespace gr { // handle extra dictionary d_extra = pmt::make_dict(); - if(extra_dict.size() > 0) { - pmt::pmt_t extras = pmt::deserialize_str(extra_dict); - pmt::pmt_t keys = pmt::dict_keys(extras); - pmt::pmt_t vals = pmt::dict_values(extras); - size_t nitems = pmt::length(keys); - for(size_t i = 0; i < nitems; i++) { - d_extra = pmt::dict_add(d_extra, - pmt::nth(i, keys), - pmt::nth(i, vals)); - } + pmt::pmt_t keys = pmt::dict_keys(extra_dict); + pmt::pmt_t vals = pmt::dict_values(extra_dict); + size_t nitems = pmt::length(keys); + for(size_t i = 0; i < nitems; i++) { + d_extra = pmt::dict_add(d_extra, + pmt::nth(i, keys), + pmt::nth(i, vals)); } d_extra_size = pmt::serialize_str(d_extra).size(); @@ -248,7 +248,7 @@ namespace gr { std::string extra_str = pmt::serialize_str(extra); if((header_str.size() != METADATA_HEADER_SIZE) && (extra_str.size() != d_extra_size)) - throw std::runtime_error("file_meta_sink: header or extras is wrong size.\n"); + throw std::runtime_error("file_meta_sink: header or extra_dict is wrong size.\n"); size_t nwritten = 0; while(nwritten < header_str.size()) { |