diff options
author | Marcus Müller <mmueller@gnuradio.org> | 2019-08-07 21:45:12 +0200 |
---|---|---|
committer | Marcus Müller <marcus@hostalia.de> | 2019-08-09 23:04:28 +0200 |
commit | f7bbf2c1d8d780294f3e016aff239ca35eb6516e (patch) | |
tree | e09ab6112e02b2215b2d59ac24d3d6ea2edac745 /gr-blocks/lib/file_source_impl.cc | |
parent | 78431dc6941e3acc67c858277dfe4a0ed583643c (diff) |
Tree: clang-format without the include sorting
Diffstat (limited to 'gr-blocks/lib/file_source_impl.cc')
-rw-r--r-- | gr-blocks/lib/file_source_impl.cc | 322 |
1 files changed, 163 insertions, 159 deletions
diff --git a/gr-blocks/lib/file_source_impl.cc b/gr-blocks/lib/file_source_impl.cc index e9ef6a2145..b025f449af 100644 --- a/gr-blocks/lib/file_source_impl.cc +++ b/gr-blocks/lib/file_source_impl.cc @@ -40,7 +40,7 @@ #define GR_FSTAT _fstat #define GR_FILENO _fileno #define GR_STAT _stat -#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) #else #define GR_FSEEK fseeko #define GR_FTELL ftello @@ -50,223 +50,227 @@ #endif namespace gr { - namespace blocks { - - file_source::sptr file_source::make(size_t itemsize, const char *filename, bool repeat, - uint64_t start_offset_items, uint64_t length_items) - { - return gnuradio::get_initial_sptr - (new file_source_impl(itemsize, filename, repeat, start_offset_items, length_items)); - } - - file_source_impl::file_source_impl(size_t itemsize, const char *filename, bool repeat, - uint64_t start_offset_items, uint64_t length_items) - : sync_block("file_source", - io_signature::make(0, 0, 0), - io_signature::make(1, 1, itemsize)), - d_itemsize(itemsize), - d_start_offset_items(start_offset_items), d_length_items(length_items), - d_fp(0), d_new_fp(0), d_repeat(repeat), d_updated(false), - d_file_begin(true), d_repeat_cnt(0), d_add_begin_tag(pmt::PMT_NIL) - { - open(filename, repeat, start_offset_items, length_items); - do_update(); - - std::stringstream str; - str << name() << unique_id(); - _id = pmt::string_to_symbol(str.str()); - } - - file_source_impl::~file_source_impl() - { - if(d_fp) - fclose ((FILE*)d_fp); - if(d_new_fp) - fclose ((FILE*)d_new_fp); - } - - bool - file_source_impl::seek(int64_t seek_point, int whence) - { - if (d_seekable) { +namespace blocks { + +file_source::sptr file_source::make(size_t itemsize, + const char* filename, + bool repeat, + uint64_t start_offset_items, + uint64_t length_items) +{ + return gnuradio::get_initial_sptr(new file_source_impl( + itemsize, filename, repeat, start_offset_items, length_items)); +} + +file_source_impl::file_source_impl(size_t itemsize, + const char* filename, + bool repeat, + uint64_t start_offset_items, + uint64_t length_items) + : sync_block( + "file_source", io_signature::make(0, 0, 0), io_signature::make(1, 1, itemsize)), + d_itemsize(itemsize), + d_start_offset_items(start_offset_items), + d_length_items(length_items), + d_fp(0), + d_new_fp(0), + d_repeat(repeat), + d_updated(false), + d_file_begin(true), + d_repeat_cnt(0), + d_add_begin_tag(pmt::PMT_NIL) +{ + open(filename, repeat, start_offset_items, length_items); + do_update(); + + std::stringstream str; + str << name() << unique_id(); + _id = pmt::string_to_symbol(str.str()); +} + +file_source_impl::~file_source_impl() +{ + if (d_fp) + fclose((FILE*)d_fp); + if (d_new_fp) + fclose((FILE*)d_new_fp); +} + +bool file_source_impl::seek(int64_t seek_point, int whence) +{ + if (d_seekable) { seek_point += d_start_offset_items; - switch(whence) { + switch (whence) { case SEEK_SET: - break; + break; case SEEK_CUR: - seek_point += (d_length_items - d_items_remaining); - break; + seek_point += (d_length_items - d_items_remaining); + break; case SEEK_END: - seek_point = d_length_items - seek_point; - break; + seek_point = d_length_items - seek_point; + break; default: - GR_LOG_WARN(d_logger, "bad seek mode"); - return 0; + GR_LOG_WARN(d_logger, "bad seek mode"); + return 0; } - if ((seek_point < (int64_t)d_start_offset_items) - || (seek_point > (int64_t)(d_start_offset_items+d_length_items-1))) { - GR_LOG_WARN(d_logger, "bad seek point"); - return 0; + if ((seek_point < (int64_t)d_start_offset_items) || + (seek_point > (int64_t)(d_start_offset_items + d_length_items - 1))) { + GR_LOG_WARN(d_logger, "bad seek point"); + return 0; } return GR_FSEEK((FILE*)d_fp, seek_point * d_itemsize, SEEK_SET) == 0; - } - else { + } else { GR_LOG_WARN(d_logger, "file not seekable"); return 0; - } } +} - void - file_source_impl::open(const char *filename, bool repeat, - uint64_t start_offset_items, uint64_t length_items) - { - // obtain exclusive access for duration of this function - gr::thread::scoped_lock lock(fp_mutex); +void file_source_impl::open(const char* filename, + bool repeat, + uint64_t start_offset_items, + uint64_t length_items) +{ + // obtain exclusive access for duration of this function + gr::thread::scoped_lock lock(fp_mutex); - if(d_new_fp) { + if (d_new_fp) { fclose(d_new_fp); d_new_fp = 0; - } + } - if((d_new_fp = fopen (filename, "rb")) == NULL) { + if ((d_new_fp = fopen(filename, "rb")) == NULL) { GR_LOG_ERROR(d_logger, boost::format("%s: %s") % filename % strerror(errno)); throw std::runtime_error("can't open file"); - } + } - struct GR_STAT st; + struct GR_STAT st; - if(GR_FSTAT(GR_FILENO(d_new_fp), &st)) { + if (GR_FSTAT(GR_FILENO(d_new_fp), &st)) { GR_LOG_ERROR(d_logger, boost::format("%s: %s") % filename % strerror(errno)); throw std::runtime_error("can't fstat file"); - } - if(S_ISREG(st.st_mode)) { + } + if (S_ISREG(st.st_mode)) { d_seekable = true; - } - else { + } else { d_seekable = false; - } + } - uint64_t file_size; + uint64_t file_size; - if (d_seekable) { - //Check to ensure the file will be consumed according to item size + if (d_seekable) { + // Check to ensure the file will be consumed according to item size GR_FSEEK(d_new_fp, 0, SEEK_END); file_size = GR_FTELL(d_new_fp); // Make sure there will be at least one item available - if ((file_size / d_itemsize) < (start_offset_items+1)) { - if (start_offset_items) { - GR_LOG_WARN(d_logger, "file is too small for start offset"); - } - else { - GR_LOG_WARN(d_logger, "file is too small"); - } - fclose(d_new_fp); - throw std::runtime_error("file is too small"); + if ((file_size / d_itemsize) < (start_offset_items + 1)) { + if (start_offset_items) { + GR_LOG_WARN(d_logger, "file is too small for start offset"); + } else { + GR_LOG_WARN(d_logger, "file is too small"); + } + fclose(d_new_fp); + throw std::runtime_error("file is too small"); } - } - else { + } else { file_size = INT64_MAX; - } + } - uint64_t items_available = (file_size / d_itemsize - start_offset_items); + uint64_t items_available = (file_size / d_itemsize - start_offset_items); - // If length is not specified, use the remainder of the file. Check alignment at end. - if (length_items == 0) { + // If length is not specified, use the remainder of the file. Check alignment at end. + if (length_items == 0) { length_items = items_available; - if (file_size % d_itemsize){ - GR_LOG_WARN(d_logger, "file size is not a multiple of item size"); + if (file_size % d_itemsize) { + GR_LOG_WARN(d_logger, "file size is not a multiple of item size"); } - } + } - // Check specified length. Warn and use available items instead of throwing an exception. - if (length_items > items_available) { + // Check specified length. Warn and use available items instead of throwing an + // exception. + if (length_items > items_available) { length_items = items_available; GR_LOG_WARN(d_logger, "file too short, will read fewer than requested items"); - } + } - // Rewind to start offset - if (d_seekable) { + // Rewind to start offset + if (d_seekable) { GR_FSEEK(d_new_fp, start_offset_items * d_itemsize, SEEK_SET); - } - - d_updated = true; - d_repeat = repeat; - d_start_offset_items = start_offset_items; - d_length_items = length_items; - d_items_remaining = length_items; } - void - file_source_impl::close() - { - // obtain exclusive access for duration of this function - gr::thread::scoped_lock lock(fp_mutex); + d_updated = true; + d_repeat = repeat; + d_start_offset_items = start_offset_items; + d_length_items = length_items; + d_items_remaining = length_items; +} - if(d_new_fp != NULL) { +void file_source_impl::close() +{ + // obtain exclusive access for duration of this function + gr::thread::scoped_lock lock(fp_mutex); + + if (d_new_fp != NULL) { fclose(d_new_fp); d_new_fp = NULL; - } - d_updated = true; } + d_updated = true; +} - void - file_source_impl::do_update() - { - if(d_updated) { +void file_source_impl::do_update() +{ + if (d_updated) { gr::thread::scoped_lock lock(fp_mutex); // hold while in scope - if(d_fp) - fclose(d_fp); + if (d_fp) + fclose(d_fp); - d_fp = d_new_fp; // install new file pointer + d_fp = d_new_fp; // install new file pointer d_new_fp = 0; d_updated = false; d_file_begin = true; - } } +} - void - file_source_impl::set_begin_tag(pmt::pmt_t val) - { - d_add_begin_tag = val; - } +void file_source_impl::set_begin_tag(pmt::pmt_t val) { d_add_begin_tag = val; } - int - file_source_impl::work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) - { - char *o = (char*)output_items[0]; - uint64_t size = noutput_items; +int file_source_impl::work(int noutput_items, + gr_vector_const_void_star& input_items, + gr_vector_void_star& output_items) +{ + char* o = (char*)output_items[0]; + uint64_t size = noutput_items; - do_update(); // update d_fp is reqd - if(d_fp == NULL) + do_update(); // update d_fp is reqd + if (d_fp == NULL) throw std::runtime_error("work with file not open"); - gr::thread::scoped_lock lock(fp_mutex); // hold for the rest of this function + gr::thread::scoped_lock lock(fp_mutex); // hold for the rest of this function - // No items remaining - all done - if (d_items_remaining == 0) + // No items remaining - all done + if (d_items_remaining == 0) return WORK_DONE; - while(size) { + while (size) { // Add stream tag whenever the file starts again if (d_file_begin && d_add_begin_tag != pmt::PMT_NIL) { - add_item_tag(0, nitems_written(0) + noutput_items - size, - d_add_begin_tag, pmt::from_long(d_repeat_cnt), _id); - d_file_begin = false; + add_item_tag(0, + nitems_written(0) + noutput_items - size, + d_add_begin_tag, + pmt::from_long(d_repeat_cnt), + _id); + d_file_begin = false; } uint64_t nitems_to_read = std::min(size, d_items_remaining); // Since the bounds of the file are known, unexpected nitems is an error if (nitems_to_read != fread(o, d_itemsize, nitems_to_read, (FILE*)d_fp)) - throw std::runtime_error("fread error"); + throw std::runtime_error("fread error"); size -= nitems_to_read; d_items_remaining -= nitems_to_read; @@ -275,25 +279,25 @@ namespace gr { // Ran out of items ("EOF") if (d_items_remaining == 0) { - // Repeat: rewind and request tag - if (d_repeat && d_seekable) { - GR_FSEEK(d_fp, d_start_offset_items * d_itemsize, SEEK_SET); - d_items_remaining = d_length_items; - if (d_add_begin_tag != pmt::PMT_NIL) { - d_file_begin = true; - d_repeat_cnt++; + // Repeat: rewind and request tag + if (d_repeat && d_seekable) { + GR_FSEEK(d_fp, d_start_offset_items * d_itemsize, SEEK_SET); + d_items_remaining = d_length_items; + if (d_add_begin_tag != pmt::PMT_NIL) { + d_file_begin = true; + d_repeat_cnt++; + } } - } - // No repeat: return - else { - break; - } + // No repeat: return + else { + break; + } } - } - - return (noutput_items - size); } - } /* namespace blocks */ + return (noutput_items - size); +} + +} /* namespace blocks */ } /* namespace gr */ |