@@ -37,9 +37,9 @@ namespace gr {
37
37
38
38
keep_one_in_n_impl::keep_one_in_n_impl (size_t itemsize, int n)
39
39
: 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)
43
43
{
44
44
// To avoid bad behavior with using set_relative_rate in this block with
45
45
// VERY large values of n, we will keep track of things ourselves. Using
@@ -53,8 +53,9 @@ namespace gr {
53
53
void
54
54
keep_one_in_n_impl::set_n (int n)
55
55
{
56
- if (n < 1 )
57
- n = 1 ;
56
+ if (n < 1 ) {
57
+ throw std::invalid_argument (" N must be at least 1." );
58
+ }
58
59
59
60
d_n = n;
60
61
d_count = n;
@@ -67,27 +68,27 @@ namespace gr {
67
68
68
69
int
69
70
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)
73
74
{
74
75
const char *in = (const char *) input_items[0 ];
75
76
char *out = (char *) output_items[0 ];
76
77
77
78
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 ;
80
81
81
82
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++;
91
92
}
92
93
93
94
// Because we have set TPP_DONT, we have to propagate the tags here manually.
@@ -96,9 +97,9 @@ namespace gr {
96
97
std::vector<tag_t >::iterator t;
97
98
get_tags_in_range (tags, 0 , nitems_read (0 ), nitems_read (0 )+ni);
98
99
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);
102
103
}
103
104
104
105
consume_each (ni);
0 commit comments