Skip to content

Commit abd5665

Browse files
committed
Rename buffer methods
1 parent 47ffc17 commit abd5665

File tree

5 files changed

+44
-49
lines changed

5 files changed

+44
-49
lines changed

crossbeam-circbuf/src/buffer.rs

+17-26
Original file line numberDiff line numberDiff line change
@@ -88,24 +88,24 @@ impl<T> Buffer<T> {
8888
}
8989

9090
/// Returns the capacity of the buffer.
91-
pub fn cap(&self) -> usize {
91+
pub fn len(&self) -> usize {
9292
self.inner.len()
9393
}
9494

9595
/// Returns a pointer to the slot at the specified `index`.
96-
pub unsafe fn at(&self, index: usize) -> *mut Slot<T> {
96+
pub fn get(&self, index: usize) -> *const Slot<T> {
9797
// `array.size()` is always a power of two.
98-
self.inner.get_unchecked(index & (self.cap() - 1)) as *const _ as *mut _
98+
unsafe { self.inner.get_unchecked(index & (self.len() - 1)).as_ptr() }
9999
}
100100

101101
/// Reads a value from the specified `index`.
102102
///
103103
/// Returns `Some(v)` if `v` is at `index`; or `None` if there's no valid value for `index`.
104104
pub unsafe fn read(&self, index: usize) -> Option<mem::ManuallyDrop<T>> {
105-
let slot = self.at(index);
105+
let slot = &*self.get(index);
106106

107107
// Reads the index with `Acquire`.
108-
let i = (*slot).index.load(Ordering::Acquire);
108+
let i = slot.index.load(Ordering::Acquire);
109109

110110
// If the index in the buffer mismatches with the queried index, there's no valid value.
111111
if index != i {
@@ -120,41 +120,32 @@ impl<T> Buffer<T> {
120120
///
121121
/// Returns the value at `index` regardless or whether it's valid or not.
122122
pub unsafe fn read_unchecked(&self, index: usize) -> mem::ManuallyDrop<T> {
123-
let slot = self.at(index);
123+
let slot = &*self.get(index);
124+
slot.data.get().read_volatile()
125+
}
124126

125-
// Returns the value.
126-
(*slot).data.get().read_volatile()
127+
/// Reads the index from the specified slot.
128+
pub unsafe fn read_index(&self, index: usize, ord: Ordering) -> usize {
129+
let slot = &*self.get(index);
130+
slot.index.load(ord)
127131
}
128132

129133
/// Writes `value` into the specified `index`.
130134
pub unsafe fn write(&self, index: usize, value: T) {
131-
let slot = self.at(index);
135+
let slot = &*self.get(index);
132136

133137
// Writes the value.
134-
(*slot)
135-
.data
138+
slot.data
136139
.get()
137140
.write_volatile(mem::ManuallyDrop::new(value));
138141

139142
// Writes the index with `Release`.
140-
(*slot).index.store(index, Ordering::Release);
141-
}
142-
143-
/// Reads the index from the specified slot.
144-
pub unsafe fn read_index(&self, offset: usize, ord: Ordering) -> usize {
145-
let slot = self.at(offset);
146-
(*slot).index.load(ord)
143+
slot.index.store(index, Ordering::Release);
147144
}
148145

149146
/// Writes the specified `index` in the slot.
150147
pub unsafe fn write_index(&self, index: usize, ord: Ordering) {
151-
let slot = self.at(index);
152-
(*slot).index.store(index, ord);
153-
}
154-
155-
/// Reads the value from the specified slot.
156-
pub unsafe fn read_value(&self, offset: usize) -> mem::ManuallyDrop<T> {
157-
let slot = self.at(offset);
158-
(*slot).data.get().read_volatile()
148+
let slot = &*self.get(index);
149+
slot.index.store(index, ord);
159150
}
160151
}

crossbeam-circbuf/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//!
55
//! - bounded/unbounded SPSC (single-producer single-consumer)
66
//! - bounded/unbounded SPMC (single-producer multiple-consumer)
7+
//! - bounded MPMC (multiple-producer multiple-consumer)
78
89
#![warn(missing_docs, missing_debug_implementations, rust_2018_idioms)]
910

crossbeam-circbuf/src/mpmc.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ pub mod bounded {
190190
.is_ok()
191191
{
192192
// Reads the value from the slot and update the stamp.
193-
let value = unsafe { buffer_ref.deref().read_value(index) };
193+
let value = unsafe { buffer_ref.deref().read_unchecked(index) };
194194
unsafe {
195195
buffer_ref
196196
.deref()

crossbeam-circbuf/src/sp_inner.rs

+7-11
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
//! Internal data structures used in single-producer queues.
2-
//!
3-
//! TODO: move
4-
//!
51
//! Concurrent single-producer queues based on circular buffer.
62
//!
73
//! [`CircBuf`] is a circular buffer, which is basically a fixed-sized array that has two ends: tx
@@ -545,7 +541,7 @@ impl<T> DynamicCircBuf<T> {
545541
// Copies data from the old buffer to the new one.
546542
let mut i = rx;
547543
while i != tx {
548-
ptr::copy_nonoverlapping(buffer.deref().at(i), new.at(i), 1);
544+
ptr::copy_nonoverlapping(buffer.deref().get(i), new.get(i) as *mut _, 1);
549545
i = i.wrapping_add(1);
550546
}
551547

@@ -632,8 +628,8 @@ impl<T> Receiver<T> {
632628

633629
// Loads the value at the rx end of the buffer.
634630
let value = {
635-
let guard = &epoch::pin();
636-
let buffer = self.inner.buffer.load_consume(guard);
631+
let guard = epoch::pin();
632+
let buffer = self.inner.buffer.load_consume(&guard);
637633
match unsafe { buffer.deref().read(rx) } {
638634
None => return TryRecv::Empty,
639635
Some(value) => value,
@@ -698,8 +694,8 @@ impl<T> Receiver<T> {
698694

699695
// Loads the values at [rx, rx + num).
700696
let values = {
701-
let guard = &epoch::pin();
702-
let buffer = unsafe { self.inner.buffer.load_consume(guard).deref() };
697+
let guard = epoch::pin();
698+
let buffer = unsafe { self.inner.buffer.load_consume(&guard).deref() };
703699
(0..num)
704700
.map(|i| unsafe { buffer.read(rx.wrapping_add(i)) })
705701
.collect::<Option<Vec<ManuallyDrop<T>>>>()
@@ -778,8 +774,8 @@ impl<T> Receiver<T> {
778774

779775
// Loads the value at the rx end of the buffer.
780776
let value = {
781-
let guard = &epoch::pin();
782-
let buffer = self.inner.buffer.load_consume(guard);
777+
let guard = epoch::pin();
778+
let buffer = self.inner.buffer.load_consume(&guard);
783779
match buffer.deref().read(rx) {
784780
None => return None,
785781
Some(value) => value,

crossbeam-circbuf/src/spmc.rs

+18-11
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
/// # Examples
66
///
77
/// ```
8-
/// use crossbeam_circbuf::spmc::bounded::{Queue, Receiver, TryRecv};
8+
/// use crossbeam_circbuf::TryRecv;
9+
/// use crossbeam_circbuf::spmc::bounded::{Queue, Receiver};
910
/// use std::thread;
1011
///
1112
/// let c = Queue::<char>::new(16);
@@ -24,8 +25,7 @@
2425
/// }).join().unwrap();
2526
/// ```
2627
pub mod bounded {
27-
use crate::sp_inner;
28-
pub use TryRecv;
28+
use crate::{sp_inner, TryRecv};
2929

3030
/// A bounded SPMC queue.
3131
#[derive(Debug)]
@@ -80,7 +80,8 @@ pub mod bounded {
8080
/// # Examples
8181
///
8282
/// ```
83-
/// use crossbeam_circbuf::spmc::bounded::{Queue, Receiver, TryRecv};
83+
/// use crossbeam_circbuf::TryRecv;
84+
/// use crossbeam_circbuf::spmc::bounded::{Queue, Receiver};
8485
///
8586
/// let c = Queue::<u32>::new(16);
8687
/// c.send(1).unwrap();
@@ -124,7 +125,8 @@ pub mod bounded {
124125
/// # Examples
125126
///
126127
/// ```
127-
/// use crossbeam_circbuf::spmc::bounded::{Queue, Receiver, TryRecv};
128+
/// use crossbeam_circbuf::TryRecv;
129+
/// use crossbeam_circbuf::spmc::bounded::{Queue, Receiver};
128130
///
129131
/// let c = Queue::<u32>::new(16);
130132
/// c.send(1).unwrap();
@@ -151,7 +153,8 @@ pub mod bounded {
151153
/// # Examples
152154
///
153155
/// ```
154-
/// use crossbeam_circbuf::spmc::bounded::{Queue, Receiver, TryRecv};
156+
/// use crossbeam_circbuf::TryRecv;
157+
/// use crossbeam_circbuf::spmc::bounded::{Queue, Receiver};
155158
///
156159
/// let c = Queue::<u32>::new(16);
157160
/// c.send(1).unwrap();
@@ -183,7 +186,8 @@ pub mod bounded {
183186
/// # Examples
184187
///
185188
/// ```
186-
/// use crossbeam_circbuf::spmc::unbounded::{Queue, Receiver, TryRecv};
189+
/// use crossbeam_circbuf::TryRecv;
190+
/// use crossbeam_circbuf::spmc::unbounded::{Queue, Receiver};
187191
/// use std::thread;
188192
///
189193
/// let c = Queue::<char>::new();
@@ -203,7 +207,7 @@ pub mod bounded {
203207
/// ```
204208
pub mod unbounded {
205209
use crate::sp_inner;
206-
pub use TryRecv;
210+
use TryRecv;
207211

208212
/// an unbounded SPMC queue.
209213
#[derive(Debug)]
@@ -271,7 +275,8 @@ pub mod unbounded {
271275
/// # Examples
272276
///
273277
/// ```
274-
/// use crossbeam_circbuf::spmc::unbounded::{Queue, Receiver, TryRecv};
278+
/// use crossbeam_circbuf::TryRecv;
279+
/// use crossbeam_circbuf::spmc::unbounded::{Queue, Receiver};
275280
///
276281
/// let c = Queue::<u32>::new();
277282
/// c.send(1);
@@ -321,7 +326,8 @@ pub mod unbounded {
321326
/// # Examples
322327
///
323328
/// ```
324-
/// use crossbeam_circbuf::spmc::unbounded::{Queue, Receiver, TryRecv};
329+
/// use crossbeam_circbuf::TryRecv;
330+
/// use crossbeam_circbuf::spmc::unbounded::{Queue, Receiver};
325331
///
326332
/// let c = Queue::<u32>::new();
327333
/// c.send(1);
@@ -348,7 +354,8 @@ pub mod unbounded {
348354
/// # Examples
349355
///
350356
/// ```
351-
/// use crossbeam_circbuf::spmc::unbounded::{Queue, Receiver, TryRecv};
357+
/// use crossbeam_circbuf::TryRecv;
358+
/// use crossbeam_circbuf::spmc::unbounded::{Queue, Receiver};
352359
///
353360
/// let c = Queue::<u32>::new();
354361
/// c.send(1);

0 commit comments

Comments
 (0)