@@ -148,40 +148,19 @@ impl BoostrapController {
148
148
}
149
149
150
150
/// Merges `other` nodes list to already known. Returns new nodes count
151
- fn merge_nodes_list ( & self , other : & Vec < ( u64 , Vec < SocketAddr > ) > ) -> Vec < ( u64 , Vec < SocketAddr > ) > {
152
- let mut new_nodes = Vec :: < ( u64 , Vec < SocketAddr > ) > :: with_capacity ( other. len ( ) ) ;
151
+ fn merge_nodes_list (
152
+ & self ,
153
+ nodes_from : & Vec < ( u64 , Vec < SocketAddr > ) > ,
154
+ ) -> Vec < ( u64 , Vec < SocketAddr > ) > {
155
+ let mut new_nodes = Vec :: < ( u64 , Vec < SocketAddr > ) > :: with_capacity ( nodes_from. len ( ) ) ;
153
156
{
154
- let self_nodes = self . peers . borrow ( ) ;
155
- // a - already known nodes
156
- // b - received from peer nodes list
157
- let mut a_iter = self_nodes. iter ( ) ;
158
- let mut b_iter = other. into_iter ( ) ;
159
- let mut a = a_iter. next ( ) ;
160
- let mut b = b_iter. next ( ) ;
161
-
162
- while let ( Some ( ( a_id, _) ) , Some ( ( b_id, b_addr) ) ) = ( a, b) {
163
- let a_id = * a_id;
164
- let b_id = * b_id;
165
- if b_id < a_id {
166
- new_nodes. push ( ( b_id, b_addr. clone ( ) ) ) ;
167
- b = b_iter. next ( ) ;
168
- } else if b_id > a_id {
169
- a = a_iter. next ( ) ;
170
- } else {
171
- a = a_iter. next ( ) ;
172
- b = b_iter. next ( ) ;
157
+ let mut nodes_into = self . peers . borrow_mut ( ) ;
158
+ for ( id, addrs) in nodes_from. into_iter ( ) {
159
+ if !nodes_into. contains_key ( id) {
160
+ nodes_into. insert ( * id, addrs. clone ( ) ) ;
161
+ new_nodes. push ( ( * id, addrs. clone ( ) ) ) ;
173
162
}
174
163
}
175
-
176
- while let Some ( ( id, addr) ) = b {
177
- new_nodes. push ( ( * id, addr. clone ( ) ) ) ;
178
- b = b_iter. next ( ) ;
179
- }
180
- }
181
-
182
- let mut known_nodes = self . peers . borrow_mut ( ) ;
183
- for ( id, addr) in new_nodes. iter ( ) {
184
- known_nodes. insert ( * id, addr. clone ( ) ) ;
185
164
}
186
165
new_nodes
187
166
}
0 commit comments