Changeset 5187
- Timestamp:
- 04/28/07 14:39:47
- Files:
-
- gnuradio/branches/developers/jcorgan/disc/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc (modified) (6 diffs)
- gnuradio/branches/developers/jcorgan/disc/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h (modified) (1 diff)
- gnuradio/branches/developers/jcorgan/disc/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
gnuradio/branches/developers/jcorgan/disc/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
r5177 r5187 56 56 throw std::invalid_argument("src and destination blocks cannot be the same"); 57 57 58 // Assignments to block inputs or outputs58 // Connectments to block inputs or outputs 59 59 int max_port; 60 60 if (src.get() == d_owner) { … … 62 62 if ((max_port != -1 && (src_port >= max_port)) || src_port < 0) 63 63 throw std::invalid_argument("source port out of range"); 64 return assign_input(src_port, dst_port, dst);64 return connect_input(src_port, dst_port, dst); 65 65 } 66 66 … … 69 69 if ((max_port != -1 && (dst_port >= max_port)) || dst_port < 0) 70 70 throw std::invalid_argument("source port out of range"); 71 return assign_output(dst_port, src_port, src);71 return connect_output(dst_port, src_port, src); 72 72 } 73 73 … … 82 82 gr_basic_block_sptr dst, int dst_port) 83 83 { 84 // Handle disconnecting inputs and outputs 85 84 if (GR_HIER_BLOCK2_DETAIL_DEBUG) 85 std::cout << "disconnecting: " << gr_endpoint(src, src_port) 86 << " -> " << gr_endpoint(dst, dst_port) << std::endl; 87 88 if (src.get() == dst.get()) 89 throw std::invalid_argument("src and destination blocks cannot be the same"); 90 91 if (src.get() == d_owner) 92 return disconnect_input(src_port, dst_port, dst); 93 94 if (dst.get() == d_owner) 95 return disconnect_output(dst_port, src_port, src); 96 97 // Internal connections 86 98 d_fg->disconnect(src, src_port, dst, dst_port); 87 99 } 88 100 89 101 void 90 gr_hier_block2_detail:: assign_input(int my_port, int port, gr_basic_block_sptr block)102 gr_hier_block2_detail::connect_input(int my_port, int port, gr_basic_block_sptr block) 91 103 { 92 104 if (my_port < 0 || my_port >= (signed)d_inputs.size()) … … 100 112 101 113 void 102 gr_hier_block2_detail:: assign_output(int my_port, int port, gr_basic_block_sptr block)114 gr_hier_block2_detail::connect_output(int my_port, int port, gr_basic_block_sptr block) 103 115 { 104 116 if (my_port < 0 || my_port >= (signed)d_outputs.size()) … … 109 121 110 122 d_outputs[my_port] = gr_endpoint(block, port); 123 } 124 125 void 126 gr_hier_block2_detail::disconnect_input(int my_port, int port, gr_basic_block_sptr block) 127 { 128 if (my_port < 0 || my_port >= (signed)d_inputs.size()) 129 throw std::invalid_argument("input port number out of range"); 130 131 if (d_inputs[my_port].block() != block) 132 throw std::invalid_argument("block not assigned to given input, can't disconnect"); 133 134 d_inputs[my_port] = gr_endpoint(); 135 } 136 137 void 138 gr_hier_block2_detail::disconnect_output(int my_port, int port, gr_basic_block_sptr block) 139 { 140 if (my_port < 0 || my_port >= (signed)d_outputs.size()) 141 throw std::invalid_argument("input port number out of range"); 142 143 if (d_outputs[my_port].block() != block) 144 throw std::invalid_argument("block not assigned to given output, can't disconnect"); 145 146 d_outputs[my_port] = gr_endpoint(); 111 147 } 112 148 gnuradio/branches/developers/jcorgan/disc/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
r5177 r5187 46 46 void disconnect(gr_basic_block_sptr, int src_port, 47 47 gr_basic_block_sptr, int dst_port); 48 void assign_input(int my_port, int port, gr_basic_block_sptr block); 49 void assign_output(int my_port, int port, gr_basic_block_sptr block); 48 void connect_input(int my_port, int port, gr_basic_block_sptr block); 49 void connect_output(int my_port, int port, gr_basic_block_sptr block); 50 void disconnect_input(int my_port, int port, gr_basic_block_sptr block); 51 void disconnect_output(int my_port, int port, gr_basic_block_sptr block); 50 52 void flatten(gr_simple_flowgraph_sptr sfg); 51 53 gr_endpoint resolve_port(int port, bool is_input); gnuradio/branches/developers/jcorgan/disc/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
r5177 r5187 159 159 self.assertEquals(expected, actual2) 160 160 161 def test_015_connect_disconnect(self): 162 expected = (1.0, 2.0, 3.0, 4.0) 163 hblock = gr.top_block("test_block") 164 src = gr.vector_source_f(expected, False) 165 sink1 = gr.vector_sink_f() 166 sink2 = gr.vector_sink_f() 167 hblock.connect(src, sink1) 168 hblock.connect(src, sink2) 169 hblock.disconnect(src, sink2) 170 runtime = gr.runtime(hblock) 171 runtime.run() 172 161 def test_015_disconnect_input(self): 162 hblock = gr.hier_block2("test_block", 163 gr.io_signature(1,1,gr.sizeof_int), 164 gr.io_signature(1,1,gr.sizeof_int)) 165 nop1 = gr.nop(gr.sizeof_int) 166 hblock.connect(hblock, nop1) 167 hblock.disconnect(hblock, nop1) 168 169 def test_016_disconnect_input_not_connected(self): 170 hblock = gr.hier_block2("test_block", 171 gr.io_signature(1,1,gr.sizeof_int), 172 gr.io_signature(1,1,gr.sizeof_int)) 173 nop1 = gr.nop(gr.sizeof_int) 174 nop2 = gr.nop(gr.sizeof_int) 175 hblock.connect(hblock, nop1) 176 self.assertRaises(ValueError, 177 lambda: hblock.disconnect(hblock, nop2)) 178 179 def test_017_disconnect_input_neg(self): 180 hblock = gr.hier_block2("test_block", 181 gr.io_signature(1,1,gr.sizeof_int), 182 gr.io_signature(1,1,gr.sizeof_int)) 183 nop1 = gr.nop(gr.sizeof_int) 184 hblock.connect(hblock, nop1) 185 self.assertRaises(ValueError, 186 lambda: hblock.disconnect((hblock, -1), nop1)) 187 188 def test_018_disconnect_input_exceeds(self): 189 hblock = gr.hier_block2("test_block", 190 gr.io_signature(1,1,gr.sizeof_int), 191 gr.io_signature(1,1,gr.sizeof_int)) 192 nop1 = gr.nop(gr.sizeof_int) 193 hblock.connect(hblock, nop1) 194 self.assertRaises(ValueError, 195 lambda: hblock.disconnect((hblock, 1), nop1)) 196 197 def test_019_disconnect_output(self): 198 hblock = gr.hier_block2("test_block", 199 gr.io_signature(1,1,gr.sizeof_int), 200 gr.io_signature(1,1,gr.sizeof_int)) 201 nop1 = gr.nop(gr.sizeof_int) 202 hblock.connect(nop1, hblock) 203 hblock.disconnect(nop1, hblock) 204 205 def test_020_disconnect_output_not_connected(self): 206 hblock = gr.hier_block2("test_block", 207 gr.io_signature(1,1,gr.sizeof_int), 208 gr.io_signature(1,1,gr.sizeof_int)) 209 nop1 = gr.nop(gr.sizeof_int) 210 nop2 = gr.nop(gr.sizeof_int) 211 hblock.connect(nop1, hblock) 212 self.assertRaises(ValueError, 213 lambda: hblock.disconnect(nop2, hblock)) 214 215 def test_021_disconnect_output_neg(self): 216 hblock = gr.hier_block2("test_block", 217 gr.io_signature(1,1,gr.sizeof_int), 218 gr.io_signature(1,1,gr.sizeof_int)) 219 nop1 = gr.nop(gr.sizeof_int) 220 hblock.connect(hblock, nop1) 221 self.assertRaises(ValueError, 222 lambda: hblock.disconnect(nop1, (hblock, -1))) 223 224 def test_022_disconnect_output_exceeds(self): 225 hblock = gr.hier_block2("test_block", 226 gr.io_signature(1,1,gr.sizeof_int), 227 gr.io_signature(1,1,gr.sizeof_int)) 228 nop1 = gr.nop(gr.sizeof_int) 229 hblock.connect(nop1, hblock) 230 self.assertRaises(ValueError, 231 lambda: hblock.disconnect(nop1, (hblock, 1))) 232 173 233 if __name__ == "__main__": 174 234 gr_unittest.main()
