@@ -39,11 +39,11 @@ impl Instantiable for Gate {
3939 & self . name
4040 }
4141
42- fn get_input_ports ( & self ) -> & [ Net ] {
42+ fn get_input_ports ( & self ) -> impl IntoIterator < Item = & Net > {
4343 & self . inputs
4444 }
4545
46- fn get_output_ports ( & self ) -> & [ Net ] {
46+ fn get_output_ports ( & self ) -> impl IntoIterator < Item = & Net > {
4747 & self . outputs
4848 }
4949
@@ -597,7 +597,7 @@ where
597597 /// Returns the number of input ports for this circuit node.
598598 pub fn get_num_input_ports ( & self ) -> usize {
599599 if let Some ( inst_type) = self . get_instance_type ( ) {
600- inst_type. get_input_ports ( ) . len ( )
600+ inst_type. get_input_ports ( ) . into_iter ( ) . count ( )
601601 } else {
602602 0
603603 }
@@ -1084,13 +1084,14 @@ where
10841084 ) -> Result < NetRef < I > , String > {
10851085 let nets = inst_type
10861086 . get_output_ports ( )
1087- . iter ( )
1087+ . into_iter ( )
10881088 . map ( |pnet| pnet. with_name ( format ! ( "{}_{}" , inst_name, pnet. get_identifier( ) ) ) )
10891089 . collect :: < Vec < _ > > ( ) ;
1090- if operands. len ( ) != inst_type. get_input_ports ( ) . len ( ) {
1090+ let input_count = inst_type. get_input_ports ( ) . into_iter ( ) . count ( ) ;
1091+ if operands. len ( ) != input_count {
10911092 return Err ( format ! (
10921093 "Expected {} operands, got {}" ,
1093- inst_type . get_input_ports ( ) . len ( ) ,
1094+ input_count ,
10941095 operands. len( )
10951096 ) ) ;
10961097 }
@@ -1106,13 +1107,19 @@ where
11061107 ) -> Result < NetRef < I > , String > {
11071108 let nets = inst_type
11081109 . get_output_ports ( )
1109- . iter ( )
1110+ . into_iter ( )
11101111 . map ( |pnet| pnet. with_name ( format ! ( "{}_{}" , inst_name, pnet. get_identifier( ) ) ) )
11111112 . collect :: < Vec < _ > > ( ) ;
11121113 let object = Object :: Instance ( nets, inst_name, inst_type) ;
11131114 let index = self . objects . borrow ( ) . len ( ) ;
11141115 let weak = Rc :: downgrade ( self ) ;
1115- let operands = vec ! [ None ; object. get_instance_type( ) . unwrap( ) . get_input_ports( ) . len( ) ] ;
1116+ let input_count = object
1117+ . get_instance_type ( )
1118+ . unwrap ( )
1119+ . get_input_ports ( )
1120+ . into_iter ( )
1121+ . count ( ) ;
1122+ let operands = vec ! [ None ; input_count] ;
11161123 let owned_object = Rc :: new ( RefCell :: new ( OwnedObject {
11171124 object,
11181125 owner : weak,
@@ -1857,7 +1864,7 @@ where
18571864 writeln ! ( f, "{} (" , inst_name. emit_name( ) ) ?;
18581865 let level = 4 ;
18591866 let indent = " " . repeat ( level) ;
1860- for ( idx, port) in inst_type. get_input_ports ( ) . iter ( ) . enumerate ( ) {
1867+ for ( idx, port) in inst_type. get_input_ports ( ) . into_iter ( ) . enumerate ( ) {
18611868 let port_name = port. get_identifier ( ) . emit_name ( ) ;
18621869 if let Some ( operand) = owned. operands [ idx] . as_ref ( ) {
18631870 let operand = match operand {
0 commit comments