Replace manual binary search with stdlib (#1466)

This commit is contained in:
Dominik Maier 2023-08-27 23:12:36 +02:00 committed by GitHub
parent 6a2d6fa66d
commit 0a0c4639a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1922,35 +1922,6 @@ where
shmem_provider: SP,
}
#[inline]
fn binary_search<SP: ShMemProvider>(
llmp_clients: &Vec<LlmpReceiver<SP>>,
client_id: ClientId,
) -> Option<usize> {
if llmp_clients.is_empty() {
return None;
}
let mut left = 0;
let mut right = llmp_clients.len().checked_sub(1)?;
loop {
if left > right {
break;
}
let mid = left + (right - left) / 2;
match client_id {
id if id == llmp_clients[mid].id => return Some(llmp_clients[mid].id.0 as _),
id if id > llmp_clients[mid].id => left = mid + 1,
_ => right = mid.checked_sub(1).expect("invalid right edge"),
}
}
None
}
/// A signal handler for the [`LlmpBroker`].
#[cfg(unix)]
#[derive(Debug, Clone)]
@ -2715,8 +2686,9 @@ where
// Fast path when no client was removed
client_id.0 as usize
} else {
binary_search(&self.llmp_clients, client_id)
.expect("Fatal error, client ID not found")
self.llmp_clients
.binary_search_by_key(&client_id, |x| x.id)
.expect("Fatal error, client ID {client_id} not found in llmp_clients.")
};
let client = &mut self.llmp_clients[pos];
match client.recv()? {
@ -2799,8 +2771,9 @@ where
// Fast path when no client was removed
client_id.0 as usize
} else {
binary_search(&self.llmp_clients, client_id)
.expect("Fatal error, client ID not found")
self.llmp_clients
.binary_search_by_key(&client_id, |x| x.id)
.expect("Fatal error, client ID {client_id} not found in llmp_clients.")
};
let map = &mut self.llmp_clients[pos].current_recv_shmem;