mirror of
https://github.com/embassy-rs/embassy.git
synced 2024-11-21 22:32:29 +00:00
embassy-sync: add clear, len, is_empty and is_full functions to zerocopy_channel
This commit is contained in:
parent
6e0b08291b
commit
383ad72b63
@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
## Unreleased
|
||||
|
||||
- Add LazyLock sync primitive.
|
||||
- Add `clear`, `len`, `is_empty` and `is_full` functions to `zerocopy_channel`.
|
||||
|
||||
## 0.6.0 - 2024-05-29
|
||||
|
||||
|
@ -70,6 +70,28 @@ impl<'a, M: RawMutex, T> Channel<'a, M, T> {
|
||||
pub fn split(&mut self) -> (Sender<'_, M, T>, Receiver<'_, M, T>) {
|
||||
(Sender { channel: self }, Receiver { channel: self })
|
||||
}
|
||||
|
||||
/// Clears all elements in the channel.
|
||||
pub fn clear(&mut self) {
|
||||
self.state.lock(|s| {
|
||||
s.borrow_mut().clear();
|
||||
});
|
||||
}
|
||||
|
||||
/// Returns the number of elements currently in the channel.
|
||||
pub fn len(&self) -> usize {
|
||||
self.state.lock(|s| s.borrow().len())
|
||||
}
|
||||
|
||||
/// Returns whether the channel is empty.
|
||||
pub fn is_empty(&self) -> bool {
|
||||
self.state.lock(|s| s.borrow().is_empty())
|
||||
}
|
||||
|
||||
/// Returns whether the channel is full.
|
||||
pub fn is_full(&self) -> bool {
|
||||
self.state.lock(|s| s.borrow().is_full())
|
||||
}
|
||||
}
|
||||
|
||||
/// Send-only access to a [`Channel`].
|
||||
@ -130,6 +152,28 @@ impl<'a, M: RawMutex, T> Sender<'a, M, T> {
|
||||
pub fn send_done(&mut self) {
|
||||
self.channel.state.lock(|s| s.borrow_mut().push_done())
|
||||
}
|
||||
|
||||
/// Clears all elements in the channel.
|
||||
pub fn clear(&mut self) {
|
||||
self.channel.state.lock(|s| {
|
||||
s.borrow_mut().clear();
|
||||
});
|
||||
}
|
||||
|
||||
/// Returns the number of elements currently in the channel.
|
||||
pub fn len(&self) -> usize {
|
||||
self.channel.state.lock(|s| s.borrow().len())
|
||||
}
|
||||
|
||||
/// Returns whether the channel is empty.
|
||||
pub fn is_empty(&self) -> bool {
|
||||
self.channel.state.lock(|s| s.borrow().is_empty())
|
||||
}
|
||||
|
||||
/// Returns whether the channel is full.
|
||||
pub fn is_full(&self) -> bool {
|
||||
self.channel.state.lock(|s| s.borrow().is_full())
|
||||
}
|
||||
}
|
||||
|
||||
/// Receive-only access to a [`Channel`].
|
||||
@ -190,6 +234,28 @@ impl<'a, M: RawMutex, T> Receiver<'a, M, T> {
|
||||
pub fn receive_done(&mut self) {
|
||||
self.channel.state.lock(|s| s.borrow_mut().pop_done())
|
||||
}
|
||||
|
||||
/// Clears all elements in the channel.
|
||||
pub fn clear(&mut self) {
|
||||
self.channel.state.lock(|s| {
|
||||
s.borrow_mut().clear();
|
||||
});
|
||||
}
|
||||
|
||||
/// Returns the number of elements currently in the channel.
|
||||
pub fn len(&self) -> usize {
|
||||
self.channel.state.lock(|s| s.borrow().len())
|
||||
}
|
||||
|
||||
/// Returns whether the channel is empty.
|
||||
pub fn is_empty(&self) -> bool {
|
||||
self.channel.state.lock(|s| s.borrow().is_empty())
|
||||
}
|
||||
|
||||
/// Returns whether the channel is full.
|
||||
pub fn is_full(&self) -> bool {
|
||||
self.channel.state.lock(|s| s.borrow().is_full())
|
||||
}
|
||||
}
|
||||
|
||||
struct State {
|
||||
@ -217,6 +283,16 @@ impl State {
|
||||
}
|
||||
}
|
||||
|
||||
fn clear(&mut self) {
|
||||
self.front = 0;
|
||||
self.back = 0;
|
||||
self.full = false;
|
||||
}
|
||||
|
||||
fn len(&self) -> usize {
|
||||
self.len
|
||||
}
|
||||
|
||||
fn is_full(&self) -> bool {
|
||||
self.full
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user