Coverage Report

Created: 2021-01-22 16:54

crossbeam-channel/src/flavors/never.rs
Line
Count
Source
1
//! Channel that never delivers messages.
2
//!
3
//! Messages cannot be sent into this kind of channel.
4
5
use std::marker::PhantomData;
6
use std::time::Instant;
7
8
use crate::context::Context;
9
use crate::err::{RecvTimeoutError, TryRecvError};
10
use crate::select::{Operation, SelectHandle, Token};
11
use crate::utils;
12
13
/// This flavor doesn't need a token.
14
pub(crate) type NeverToken = ();
15
16
/// Channel that never delivers messages.
17
pub(crate) struct Channel<T> {
18
    _marker: PhantomData<T>,
19
}
20
21
impl<T> Channel<T> {
22
    /// Creates a channel that never delivers messages.
23
    #[inline]
24
4.09M
    pub(crate) fn new() -> Self {
25
4.09M
        Channel {
26
4.09M
            _marker: PhantomData,
27
4.09M
        }
28
4.09M
    }
<crossbeam_channel::flavors::never::Channel<()>>::new
Line
Count
Source
24
39.8k
    pub(crate) fn new() -> Self {
25
39.8k
        Channel {
26
39.8k
            _marker: PhantomData,
27
39.8k
        }
28
39.8k
    }
<crossbeam_channel::flavors::never::Channel<()>>::new
Line
Count
Source
24
10.0k
    pub(crate) fn new() -> Self {
25
10.0k
        Channel {
26
10.0k
            _marker: PhantomData,
27
10.0k
        }
28
10.0k
    }
<crossbeam_channel::flavors::never::Channel<()>>::new
Line
Count
Source
24
3.99k
    pub(crate) fn new() -> Self {
25
3.99k
        Channel {
26
3.99k
            _marker: PhantomData,
27
3.99k
        }
28
3.99k
    }
<crossbeam_channel::flavors::never::Channel<()>>::new
Line
Count
Source
24
19.9k
    pub(crate) fn new() -> Self {
25
19.9k
        Channel {
26
19.9k
            _marker: PhantomData,
27
19.9k
        }
28
19.9k
    }
<crossbeam_channel::flavors::never::Channel<i32>>::new
Line
Count
Source
24
4
    pub(crate) fn new() -> Self {
25
4
        Channel {
26
4
            _marker: PhantomData,
27
4
        }
28
4
    }
<crossbeam_channel::flavors::never::Channel<std::time::Instant>>::new
Line
Count
Source
24
1
    pub(crate) fn new() -> Self {
25
1
        Channel {
26
1
            _marker: PhantomData,
27
1
        }
28
1
    }
<crossbeam_channel::flavors::never::Channel<()>>::new
Line
Count
Source
24
3.58k
    pub(crate) fn new() -> Self {
25
3.58k
        Channel {
26
3.58k
            _marker: PhantomData,
27
3.58k
        }
28
3.58k
    }
<crossbeam_channel::flavors::never::Channel<usize>>::new
Line
Count
Source
24
3
    pub(crate) fn new() -> Self {
25
3
        Channel {
26
3
            _marker: PhantomData,
27
3
        }
28
3
    }
<crossbeam_channel::flavors::never::Channel<()>>::new
Line
Count
Source
24
1
    pub(crate) fn new() -> Self {
25
1
        Channel {
26
1
            _marker: PhantomData,
27
1
        }
28
1
    }
<crossbeam_channel::flavors::never::Channel<()>>::new
Line
Count
Source
24
19.9k
    pub(crate) fn new() -> Self {
25
19.9k
        Channel {
26
19.9k
            _marker: PhantomData,
27
19.9k
        }
28
19.9k
    }
<crossbeam_channel::flavors::never::Channel<()>>::new
Line
Count
Source
24
245k
    pub(crate) fn new() -> Self {
25
245k
        Channel {
26
245k
            _marker: PhantomData,
27
245k
        }
28
245k
    }
<crossbeam_channel::flavors::never::Channel<i32>>::new
Line
Count
Source
24
2
    pub(crate) fn new() -> Self {
25
2
        Channel {
26
2
            _marker: PhantomData,
27
2
        }
28
2
    }
<crossbeam_channel::flavors::never::Channel<()>>::new
Line
Count
Source
24
3.74M
    pub(crate) fn new() -> Self {
25
3.74M
        Channel {
26
3.74M
            _marker: PhantomData,
27
3.74M
        }
28
3.74M
    }
29
30
    /// Attempts to receive a message without blocking.
31
    #[inline]
32
4
    pub(crate) fn try_recv(&self) -> Result<T, TryRecvError> {
33
4
        Err(TryRecvError::Empty)
34
4
    }
35
36
    /// Receives a message from the channel.
37
    #[inline]
38
3
    pub(crate) fn recv(&self, deadline: Option<Instant>) -> Result<T, RecvTimeoutError> {
39
3
        utils::sleep_until(deadline);
40
3
        Err(RecvTimeoutError::Timeout)
41
3
    }
<crossbeam_channel::flavors::never::Channel<std::time::Instant>>::recv
Line
Count
Source
38
1
    pub(crate) fn recv(&self, deadline: Option<Instant>) -> Result<T, RecvTimeoutError> {
39
1
        utils::sleep_until(deadline);
40
1
        Err(RecvTimeoutError::Timeout)
41
1
    }
<crossbeam_channel::flavors::never::Channel<i32>>::recv
Line
Count
Source
38
2
    pub(crate) fn recv(&self, deadline: Option<Instant>) -> Result<T, RecvTimeoutError> {
39
2
        utils::sleep_until(deadline);
40
2
        Err(RecvTimeoutError::Timeout)
41
2
    }
42
43
    /// Reads a message from the channel.
44
    #[inline]
45
    pub(crate) unsafe fn read(&self, _token: &mut Token) -> Result<T, ()> {
46
        Err(())
47
    }
48
49
    /// Returns `true` if the channel is empty.
50
    #[inline]
51
1
    pub(crate) fn is_empty(&self) -> bool {
52
1
        true
53
1
    }
54
55
    /// Returns `true` if the channel is full.
56
    #[inline]
57
1
    pub(crate) fn is_full(&self) -> bool {
58
1
        true
59
1
    }
60
61
    /// Returns the number of messages in the channel.
62
    #[inline]
63
1
    pub(crate) fn len(&self) -> usize {
64
1
        0
65
1
    }
66
67
    /// Returns the capacity of the channel.
68
    #[inline]
69
1
    pub(crate) fn capacity(&self) -> Option<usize> {
70
1
        Some(0)
71
1
    }
72
}
73
74
impl<T> SelectHandle for Channel<T> {
75
    #[inline]
76
    fn try_select(&self, _token: &mut Token) -> bool {
77
        false
78
    }
79
80
    #[inline]
81
    fn deadline(&self) -> Option<Instant> {
82
        None
83
    }
84
85
    #[inline]
86
    fn register(&self, _oper: Operation, _cx: &Context) -> bool {
87
        self.is_ready()
88
    }
89
90
    #[inline]
91
    fn unregister(&self, _oper: Operation) {}
92
93
    #[inline]
94
    fn accept(&self, token: &mut Token, _cx: &Context) -> bool {
95
        self.try_select(token)
96
    }
97
98
    #[inline]
99
    fn is_ready(&self) -> bool {
100
        false
101
    }
102
103
    #[inline]
104
    fn watch(&self, _oper: Operation, _cx: &Context) -> bool {
105
        self.is_ready()
106
    }
107
108
    #[inline]
109
    fn unwatch(&self, _oper: Operation) {}
110
}