Skip to content

Commit 5d63762

Browse files
fwunschmarcusmueller
authored andcommitted
blocks: Keep 1 in N: raise on n<1, fix docs, tabs to spaces
1 parent b9f3fa5 commit 5d63762

File tree

2 files changed

+24
-23
lines changed

2 files changed

+24
-23
lines changed

gr-blocks/include/gnuradio/blocks/keep_one_in_n.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ namespace gr {
3030
namespace blocks {
3131

3232
/*!
33-
* \brief decimate a stream, keeping one item out of every \p n.
33+
* \brief decimate a stream, keeping the last item out of every \p n.
3434
* \ingroup stream_operators_blk
3535
*/
3636
class BLOCKS_API keep_one_in_n : virtual public block

gr-blocks/lib/keep_one_in_n_impl.cc

+23-22
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ namespace gr {
3737

3838
keep_one_in_n_impl::keep_one_in_n_impl(size_t itemsize, int n)
3939
: block("keep_one_in_n",
40-
io_signature::make (1, 1, itemsize),
41-
io_signature::make (1, 1, itemsize)),
42-
d_count(n)
40+
io_signature::make (1, 1, itemsize),
41+
io_signature::make (1, 1, itemsize)),
42+
d_count(n)
4343
{
4444
// To avoid bad behavior with using set_relative_rate in this block with
4545
// VERY large values of n, we will keep track of things ourselves. Using
@@ -53,8 +53,9 @@ namespace gr {
5353
void
5454
keep_one_in_n_impl::set_n(int n)
5555
{
56-
if (n < 1)
57-
n = 1;
56+
if (n < 1) {
57+
throw std::invalid_argument("N must be at least 1.");
58+
}
5859

5960
d_n = n;
6061
d_count = n;
@@ -67,27 +68,27 @@ namespace gr {
6768

6869
int
6970
keep_one_in_n_impl::general_work(int noutput_items,
70-
gr_vector_int &ninput_items,
71-
gr_vector_const_void_star &input_items,
72-
gr_vector_void_star &output_items)
71+
gr_vector_int &ninput_items,
72+
gr_vector_const_void_star &input_items,
73+
gr_vector_void_star &output_items)
7374
{
7475
const char *in = (const char *) input_items[0];
7576
char *out = (char *) output_items[0];
7677

7778
size_t item_size = input_signature ()->sizeof_stream_item (0);
78-
int ni = 0;
79-
int no = 0;
79+
int ni = 0;
80+
int no = 0;
8081

8182
while (ni < ninput_items[0] && no < noutput_items){
82-
d_count--;
83-
if (d_count <= 0){
84-
memcpy (out, in, item_size); // copy 1 item
85-
out += item_size;
86-
no++;
87-
d_count = d_n;
88-
}
89-
in += item_size;
90-
ni++;
83+
d_count--;
84+
if (d_count <= 0){
85+
memcpy (out, in, item_size); // copy 1 item
86+
out += item_size;
87+
no++;
88+
d_count = d_n;
89+
}
90+
in += item_size;
91+
ni++;
9192
}
9293

9394
// Because we have set TPP_DONT, we have to propagate the tags here manually.
@@ -96,9 +97,9 @@ namespace gr {
9697
std::vector<tag_t>::iterator t;
9798
get_tags_in_range(tags, 0, nitems_read(0), nitems_read(0)+ni);
9899
for(t = tags.begin(); t != tags.end(); t++) {
99-
tag_t new_tag = *t;
100-
new_tag.offset *= d_decim_rate;
101-
add_item_tag(0, new_tag);
100+
tag_t new_tag = *t;
101+
new_tag.offset *= d_decim_rate;
102+
add_item_tag(0, new_tag);
102103
}
103104

104105
consume_each (ni);

0 commit comments

Comments
 (0)