Skip to content

Commit dee76b6

Browse files
Make the docs for QueueView::split_const actually use QueueView
1 parent 7663768 commit dee76b6

File tree

1 file changed

+19
-68
lines changed

1 file changed

+19
-68
lines changed

src/spsc.rs

Lines changed: 19 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -367,27 +367,15 @@ impl<T, S: Storage> QueueInner<T, S> {
367367
///
368368
/// # Examples
369369
///
370+
/// Create a queue and split it at runtime
371+
///
370372
/// ```
371373
/// # use heapless::spsc::Queue;
372374
/// let mut queue: Queue<(), 4> = Queue::new();
373375
/// let (mut producer, mut consumer) = queue.split();
374376
/// producer.enqueue(()).unwrap();
375377
/// assert_eq!(consumer.dequeue(), Some(()));
376378
/// ```
377-
pub fn split(&mut self) -> (Producer<'_, T>, Consumer<'_, T>) {
378-
(
379-
Producer { rb: self.as_view() },
380-
Consumer { rb: self.as_view() },
381-
)
382-
}
383-
}
384-
385-
impl<T, const N: usize> Queue<T, N> {
386-
/// Splits a queue into producer and consumer endpoints.
387-
///
388-
/// Unlike [`Queue::split`](), this method can be used in a `const` context
389-
///
390-
/// # Examples
391379
///
392380
/// Create a queue at compile time, split it at runtime,
393381
/// and pass it to an interrupt handler via a mutex.
@@ -439,6 +427,20 @@ impl<T, const N: usize> Queue<T, N> {
439427
/// consumer.dequeue().unwrap();
440428
/// }
441429
/// ```
430+
pub fn split(&mut self) -> (Producer<'_, T>, Consumer<'_, T>) {
431+
(
432+
Producer { rb: self.as_view() },
433+
Consumer { rb: self.as_view() },
434+
)
435+
}
436+
}
437+
438+
impl<T, const N: usize> Queue<T, N> {
439+
/// Splits a queue into producer and consumer endpoints.
440+
///
441+
/// Unlike [`Queue::split`](), this method can be used in a `const` context
442+
///
443+
/// # Example
442444
///
443445
/// Create and split a queue at compile time, and pass it to the main
444446
/// function and an interrupt handler via a mutex at runtime.
@@ -497,58 +499,7 @@ impl<T> QueueView<T> {
497499
///
498500
/// Unlike [`Queue::split`](), this method can be used in a `const` context
499501
///
500-
/// # Examples
501-
///
502-
/// Create a queue at compile time, split it at runtime,
503-
/// and pass it to an interrupt handler via a mutex.
504-
///
505-
/// ```
506-
/// use core::cell::RefCell;
507-
/// use critical_section::Mutex;
508-
/// use heapless::spsc::{Producer, Queue};
509-
///
510-
/// static PRODUCER: Mutex<RefCell<Option<Producer<'static, ()>>>> = Mutex::new(RefCell::new(None));
511-
///
512-
/// fn interrupt() {
513-
/// let mut producer = {
514-
/// static mut P: Option<Producer<'static, ()>> = None;
515-
/// // SAFETY: Mutable access to `P` is allowed exclusively in this scope
516-
/// // and `interrupt` cannot be called directly or preempt itself.
517-
/// unsafe { &mut P }
518-
/// }
519-
/// .get_or_insert_with(|| {
520-
/// critical_section::with(|cs| PRODUCER.borrow_ref_mut(cs).take().unwrap())
521-
/// });
522-
///
523-
/// producer.enqueue(()).unwrap();
524-
/// }
525-
///
526-
/// fn main() {
527-
/// let mut consumer = {
528-
/// let (p, c) = {
529-
/// static mut Q: Queue<(), 4> = Queue::new();
530-
/// // SAFETY: `Q` is only accessible in this scope
531-
/// // and `main` is only called once.
532-
/// #[allow(static_mut_refs)]
533-
/// unsafe {
534-
/// Q.split()
535-
/// }
536-
/// };
537-
///
538-
/// critical_section::with(move |cs| {
539-
/// let mut producer = PRODUCER.borrow_ref_mut(cs);
540-
/// *producer = Some(p);
541-
/// });
542-
///
543-
/// c
544-
/// };
545-
///
546-
/// // Interrupt occurs.
547-
/// # interrupt();
548-
///
549-
/// consumer.dequeue().unwrap();
550-
/// }
551-
/// ```
502+
/// # Example
552503
///
553504
/// Create and split a queue at compile time, and pass it to the main
554505
/// function and an interrupt handler via a mutex at runtime.
@@ -557,13 +508,13 @@ impl<T> QueueView<T> {
557508
/// use core::cell::RefCell;
558509
///
559510
/// use critical_section::Mutex;
560-
/// use heapless::spsc::{Consumer, Producer, Queue};
511+
/// use heapless::spsc::{Consumer, Producer, Queue, QueueView};
561512
///
562513
/// static PC: (
563514
/// Mutex<RefCell<Option<Producer<'_, ()>>>>,
564515
/// Mutex<RefCell<Option<Consumer<'_, ()>>>>,
565516
/// ) = {
566-
/// static mut Q: Queue<(), 4> = Queue::new();
517+
/// static mut Q: &mut QueueView<()> = &mut Queue::<(), 4>::new();
567518
/// // SAFETY: `Q` is only accessible in this scope.
568519
/// #[allow(static_mut_refs)]
569520
/// let (p, c) = unsafe { Q.split_const() };

0 commit comments

Comments
 (0)