[−][src]Struct multiqueue2::MPMCReceiver
This is the receiving end of a standard mpmc view of the queue
It functions similarly to the BroadcastReceiver
execpt there
is only ever one stream. As a result, the type doesn't need to be clone
Implementations
impl<T> MPMCReceiver<T>
[src]
pub fn try_recv(&self) -> Result<T, TryRecvError>
[src]
Tries to receive a value from the queue without blocking.
Examples:
use multiqueue2::mpmc_queue; let (w, r) = mpmc_queue(10); w.try_send(1).unwrap(); assert_eq!(1, r.try_recv().unwrap());
use multiqueue2::mpmc_queue; use std::thread; let (send, recv) = mpmc_queue(10); let handle = thread::spawn(move || { for _ in 0..10 { loop { match recv.try_recv() { Ok(val) => { println!("Got {}", val); break; }, Err(_) => (), } } } assert!(recv.try_recv().is_err()); // recv would block here }); for i in 0..10 { send.try_send(i).unwrap(); } // Drop the sender to close the queue drop(send); handle.join();
pub fn recv(&self) -> Result<T, RecvError>
[src]
Receives a value from the queue, blocks until there is data.
Examples:
use multiqueue2::mpmc_queue; let (w, r) = mpmc_queue(10); w.try_send(1).unwrap(); assert_eq!(1, r.recv().unwrap());
use multiqueue2::mpmc_queue; use std::thread; let (send, recv) = mpmc_queue(10); let handle = thread::spawn(move || { // note the lack of dealing with failed reads. // unwrap 'ignores' the error where sender disconnects for _ in 0..10 { println!("Got {}", recv.recv().unwrap()); } assert!(recv.try_recv().is_err()); }); for i in 0..10 { send.try_send(i).unwrap(); } // Drop the sender to close the queue drop(send); handle.join();
pub fn unsubscribe(self) -> bool
[src]
Removes the given reader from the queue subscription lib Returns true if this is the last reader in a given broadcast unit
Examples
use multiqueue2::mpmc_queue; let (writer, reader) = mpmc_queue(2); writer.try_send(1).expect("This will succeed since queue is empty"); reader.try_recv().expect("This reader can read"); reader.unsubscribe(); // Fails since there's no readers left assert!(writer.try_send(1).is_err());
pub fn into_single(self) -> Result<MPMCUniReceiver<T>, MPMCReceiver<T>>
[src]
If there is only one MPMCReceiver
on the stream, converts the
Receiver into a MPMCUniReceiver
otherwise returns the MPMCReceiver
.
Example:
use multiqueue2::mpmc_queue; let (w, r) = mpmc_queue(10); w.try_send(1).unwrap(); let r2 = r.clone(); // Fails since there's two receivers on the stream assert!(r2.into_single().is_err()); let single_r = r.into_single().unwrap(); let val = match single_r.try_recv_view(|x| 2 * *x) { Ok(val) => val, Err(_) => panic!("Queue should have an element"), }; assert_eq!(2, val);
pub fn try_iter(&self) -> MPMCRefIter<'_, T>
[src]
Returns a non-owning iterator that iterates over the queue until it fails to receive an item, either through being empty or begin disconnected. This iterator will never block.
Examples:
use multiqueue2::mpmc_queue; let (w, r) = mpmc_queue(2); for _ in 0 .. 3 { w.try_send(1).unwrap(); w.try_send(2).unwrap(); for val in r.try_iter().zip(1..2) { assert_eq!(val.0, val.1); } }
Trait Implementations
impl<T> Clone for MPMCReceiver<T>
[src]
pub fn clone(&self) -> Self
[src]
pub fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl<T: Debug> Debug for MPMCReceiver<T>
[src]
impl<T> IntoIterator for MPMCReceiver<T>
[src]
type Item = T
The type of the elements being iterated over.
type IntoIter = MPMCIter<T>
Which kind of iterator are we turning this into?
pub fn into_iter(self) -> MPMCIter<T>
[src]
impl<'a, T: 'a> IntoIterator for &'a MPMCReceiver<T>
[src]
type Item = T
The type of the elements being iterated over.
type IntoIter = MPMCRefIter<'a, T>
Which kind of iterator are we turning this into?
pub fn into_iter(self) -> MPMCRefIter<'a, T>
[src]
impl<T: Send> Send for MPMCReceiver<T>
[src]
Auto Trait Implementations
impl<T> !RefUnwindSafe for MPMCReceiver<T>
[src]
impl<T> !Sync for MPMCReceiver<T>
[src]
impl<T> Unpin for MPMCReceiver<T>
[src]
impl<T> !UnwindSafe for MPMCReceiver<T>
[src]
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Pointable for T
pub const ALIGN: usize
type Init = T
The type for initializers.
pub unsafe fn init(init: <T as Pointable>::Init) -> usize
pub unsafe fn deref<'a>(ptr: usize) -> &'a T
pub unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T
pub unsafe fn drop(ptr: usize)
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,