Skip to content

Commit 2cfca89

Browse files
committed
make it pretty
1 parent 174e209 commit 2cfca89

File tree

7 files changed

+29
-30
lines changed

7 files changed

+29
-30
lines changed

Diff for: bulk_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const (
2020
)
2121

2222
func BenchmarkResponseTimesRing(b *testing.B) {
23-
var ring = New{Size: 8192, MaxBatch: 127}.SPSC()
23+
var ring = New{Size: 8192, BatchSize: 127}.SPSC()
2424
var wg sync.WaitGroup
2525
wg.Add(2)
2626
var diffs = make([]int64, (b.N/sampleTimes)+1)

Diff for: defs.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
package onering
22

33
// default max batch size for batched consumers
4-
const DefaultMaxBatch = 1023
4+
const DefaultMaxBatch = (1 << 8) - 1

Diff for: mpmc.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ type MPMC struct {
1212
multi
1313
}
1414

15-
func (r *MPMC) init(size uint32) {
16-
r.multi.init(size)
15+
func (r *MPMC) init(n *New) {
16+
r.multi.init(n)
1717
for i := range r.seq {
1818
r.seq[i] = -int64(i)
1919
}

Diff for: mpsc.go

-5
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,6 @@ type MPSC struct {
88
multi
99
}
1010

11-
func (r *MPSC) init(size uint32) {
12-
r.multi.init(size)
13-
r.rc = 1
14-
}
15-
1611
func (r *MPSC) Get(i interface{}) bool {
1712
var (
1813
rc = r.rc

Diff for: queue.go

+5-16
Original file line numberDiff line numberDiff line change
@@ -43,30 +43,27 @@ type New struct {
4343
// Size (Capacity) of the queue
4444
Size uint32
4545
// Maximum number of batched messages
46-
MaxBatch int32
46+
BatchSize uint32
4747
}
4848

4949
// SPSC constructs a Single Producer/Single Consumer queue
5050
func (n New) SPSC() Queue {
5151
var spsc = new(SPSC)
52-
spsc.init(n.Size)
53-
spsc.maxbatch = n.BatchSize()
52+
spsc.init(&n)
5453
return spsc
5554
}
5655

5756
// MPSC constructs a Multi-Producer/Single Consumer queue
5857
func (n New) MPSC() Queue {
5958
var mpsc = new(MPSC)
60-
mpsc.init(n.Size)
61-
mpsc.maxbatch = n.BatchSize()
59+
mpsc.init(&n)
6260
return mpsc
6361
}
6462

6563
// SPMC constructs a Single Producer/Multi-Consumer queue
6664
func (n New) SPMC() Queue {
6765
var spmc = new(SPMC)
68-
spmc.init(n.Size)
69-
spmc.maxbatch = n.BatchSize()
66+
spmc.init(&n)
7067
return spmc
7168
}
7269

@@ -75,18 +72,10 @@ func (n New) SPMC() Queue {
7572
// However it will not implement many of the optimizations available to other queue types
7673
func (n New) MPMC() Queue {
7774
var mpmc = new(MPMC)
78-
mpmc.init(n.Size)
79-
mpmc.maxbatch = n.BatchSize()
75+
mpmc.init(&n)
8076
return mpmc
8177
}
8278

83-
func (n *New) BatchSize() int64 {
84-
if n.MaxBatch > 0 {
85-
return int64(n.MaxBatch)
86-
}
87-
return DefaultMaxBatch
88-
}
89-
9079
//type Waiter interface {
9180
// Wait()
9281
// Signal()

Diff for: ring.go

+10-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package onering
22

33
import (
4-
"math/bits"
54
"runtime"
65
"sync/atomic"
76
"unsafe"
@@ -24,9 +23,15 @@ type ring struct {
2423
done int32
2524
}
2625

27-
func (r *ring) init(size uint32) {
28-
r.data = make([]unsafe.Pointer, 1<<uint(32-bits.LeadingZeros32(size-1)))
26+
func (r *ring) init(n *New) {
27+
r.data = make([]unsafe.Pointer, roundUp2(n.Size))
2928
r.mask = int64(len(r.data) - 1)
29+
30+
var bs = n.BatchSize
31+
if bs == 0 {
32+
bs = DefaultMaxBatch
33+
}
34+
r.maxbatch = int64(roundUp2(bs) - 1)
3035
}
3136

3237
func (r *ring) Close() {
@@ -54,8 +59,8 @@ type multi struct {
5459
seq []int64
5560
}
5661

57-
func (c *multi) init(size uint32) {
58-
c.ring.init(size)
62+
func (c *multi) init(n *New) {
63+
c.ring.init(n)
5964
c.size = int64(len(c.data))
6065
c.seq = make([]int64, len(c.data))
6166
c.wp = 1 // just to avoid 0-awkwardness with seq

Diff for: util.go

+10
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,13 @@ func inject(i interface{}, ptr unsafe.Pointer) {
2828
var v = (*unsafe.Pointer)((*iface)(unsafe.Pointer(&i)).d)
2929
*v = ptr
3030
}
31+
32+
func roundUp2(v uint32) uint32 {
33+
v--
34+
v |= v >> 1
35+
v |= v >> 2
36+
v |= v >> 4
37+
v |= v >> 8
38+
v |= v >> 16
39+
return v + 1
40+
}

0 commit comments

Comments
 (0)