about summary refs log tree commit diff
path: root/src/liballoc
diff options
context:
space:
mode:
authorJulien Cretin <cretin@google.com>2017-11-12 00:30:46 +0100
committeria0 <git@ia0.eu>2017-11-13 22:50:22 +0100
commit428c875ac33c1a8375d4e583ea708e230a324310 (patch)
tree2b66b0a90b237129e9ee4ddcfd8e146ff5418447 /src/liballoc
parent24bb4d1e758423dd10b517628401c1b2c2437715 (diff)
downloadrust-428c875ac33c1a8375d4e583ea708e230a324310.tar.gz
rust-428c875ac33c1a8375d4e583ea708e230a324310.zip
Add std::sync::mpsc::Receiver::recv_deadline()
Essentially renames recv_max_until to recv_deadline (mostly copying recv_timeout
documentation). This function is useful to avoid the often unnecessary call to
Instant::now in recv_timeout (e.g. when the user already has a deadline). A
concrete example would be something along those lines:

```rust
use std::sync::mpsc::Receiver;
use std::time::{Duration, Instant};

/// Reads a batch of elements
///
/// Returns as soon as `max_size` elements have been received or `timeout` expires.
fn recv_batch_timeout<T>(receiver: &Receiver<T>, timeout: Duration, max_size: usize) -> Vec<T> {
    recv_batch_deadline(receiver, Instant::now() + timeout, max_size)
}

/// Reads a batch of elements
///
/// Returns as soon as `max_size` elements have been received or `deadline` is reached.
fn recv_batch_deadline<T>(receiver: &Receiver<T>, deadline: Instant, max_size: usize) -> Vec<T> {
    let mut result = Vec::new();
    while let Ok(x) = receiver.recv_deadline(deadline) {
        result.push(x);
        if result.len() == max_size {
            break;
        }
    }
    result
}
```
Diffstat (limited to 'src/liballoc')
0 files changed, 0 insertions, 0 deletions