Skip to content

Commit 65f457e

Browse files
committed
Minor refactoring
1 parent ff853e7 commit 65f457e

File tree

7 files changed

+82
-68
lines changed

7 files changed

+82
-68
lines changed

build/build.go

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,21 +78,19 @@ type CostFunc func(v, w int) int64
7878

7979
// Cost returns a CostFunc which always returns n.
8080
func Cost(n int64) CostFunc {
81-
return func(_, _ int) int64 { return n }
81+
return func(int, int) int64 { return n }
8282
}
8383

84-
func neverEdge(_, _ int) bool { return false }
84+
func neverEdge(int, int) bool { return false }
8585
func alwaysEdge(v, w int) bool { return v != w }
8686

87-
func zero(_, _ int) int64 { return 0 }
87+
func zero(int, int) int64 { return 0 }
8888

89-
func degreeZero(_ int) int { return 0 }
90-
func degreeOne(_ int) int { return 1 }
89+
func degreeZero(int) int { return 0 }
90+
func degreeOne(int) int { return 1 }
9191

92-
func noNeighbors(_ int, _ int, _ func(w int, c int64) bool) bool { return false }
92+
func noNeighbors(int, int, func(w int, c int64) bool) bool { return false }
9393

94-
const maxint = int(^uint(0) >> 1)
95-
const minint = -maxint - 1
9694
const bitsPerWord = 32 << uint(^uint(0)>>63)
9795

9896
func min(m, n int) int {
@@ -196,7 +194,7 @@ func generic(n int, cost CostFunc, edge func(v, w int) bool) *Virtual {
196194
cost: cost,
197195
}
198196
g.degree = func(v int) (deg int) {
199-
g.visit(v, 0, func(_ int, _ int64) (skip bool) {
197+
g.visit(v, 0, func(int, int64) (skip bool) {
200198
deg++
201199
return
202200
})
@@ -229,7 +227,7 @@ func generic0(n int, edge func(v, w int) bool) *Virtual {
229227
cost: zero,
230228
}
231229
g.degree = func(v int) (deg int) {
232-
g.visit(v, 0, func(_ int, _ int64) (skip bool) {
230+
g.visit(v, 0, func(int, int64) (skip bool) {
233231
deg++
234232
return
235233
})

build/connect.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ func (g1 *Virtual) Connect(v1 int, g2 *Virtual) *Virtual {
2525
return g2.cost(0, w-t)
2626
case w == v1:
2727
return g2.cost(v-t, 0)
28+
default:
29+
return 0
2830
}
29-
return 0
3031
}
3132

3233
res := generic(n, newCost, func(v, w int) bool {
@@ -39,8 +40,9 @@ func (g1 *Virtual) Connect(v1 int, g2 *Virtual) *Virtual {
3940
return g2.edge(0, w-t)
4041
case w == v1:
4142
return g2.edge(v-t, 0)
43+
default:
44+
return false
4245
}
43-
return false
4446
})
4547

4648
res.degree = func(v int) (deg int) {
@@ -55,23 +57,23 @@ func (g1 *Virtual) Connect(v1 int, g2 *Virtual) *Virtual {
5557
}
5658

5759
res.visit = func(v int, a int, do func(w int, c int64) bool) (aborted bool) {
58-
if v > t {
60+
switch {
61+
case v > t:
5962
return g2.visit(v-t, max(0, a-t), func(w int, c int64) (skip bool) {
6063
if w == 0 {
6164
return v1 >= a && do(v1, c)
6265
}
6366
return do(w+t, c)
6467
})
65-
}
66-
if g1.visit(v, a, do) {
68+
case g1.visit(v, a, do):
6769
return true
68-
}
69-
if v == v1 {
70+
case v == v1:
7071
return g2.visit(0, max(0, a-t), func(w int, c int64) (skip bool) {
7172
return do(w+t, c)
7273
})
74+
default:
75+
return
7376
}
74-
return
7577
}
7678
return res
7779
}

build/edgeset.go

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ func newEdges(n int, e EdgeSet) *Virtual {
7373
case n == 1:
7474
return singleton()
7575
}
76+
7677
var noCost bool
7778
if e.Cost == nil {
7879
noCost = true
@@ -83,12 +84,12 @@ func newEdges(n int, e EdgeSet) *Virtual {
8384
noFilter = true
8485
e.Keep = alwaysEdge
8586
}
87+
8688
from := e.From.And(Range(0, n))
8789
to := e.To.And(Range(0, n))
8890
if from.size() == 0 || to.size() == 0 {
8991
return Empty(n)
9092
}
91-
9293
res := generic(n, e.Cost, func(v, w int) (edge bool) {
9394
return e.Contains(v, w)
9495
})
@@ -104,13 +105,15 @@ func newEdges(n int, e EdgeSet) *Virtual {
104105
return to.size()
105106
case to.Contains(v):
106107
return from.size()
108+
default:
109+
return
107110
}
108-
return
109111
}
110112
}
111113

112114
visit := func(v int, a int, do func(w int, c int64) bool) (aborted bool) {
113-
if intersect.Contains(v) {
115+
switch {
116+
case intersect.Contains(v):
114117
for _, in := range union.And(Range(a, n)).set {
115118
for w := in.a; w < in.b; w++ {
116119
if v != w && e.Keep(v, w) && do(w, e.Cost(v, w)) {
@@ -119,8 +122,7 @@ func newEdges(n int, e EdgeSet) *Virtual {
119122
}
120123
}
121124
return
122-
}
123-
if from.Contains(v) {
125+
case from.Contains(v):
124126
for _, in := range to.And(Range(a, n)).set {
125127
for w := in.a; w < in.b; w++ {
126128
if e.Keep(v, w) && do(w, e.Cost(v, w)) {
@@ -129,8 +131,7 @@ func newEdges(n int, e EdgeSet) *Virtual {
129131
}
130132
}
131133
return
132-
}
133-
if to.Contains(v) {
134+
case to.Contains(v):
134135
for _, in := range from.And(Range(a, n)).set {
135136
for w := in.a; w < in.b; w++ {
136137
if e.Keep(v, w) && do(w, e.Cost(v, w)) {
@@ -139,12 +140,14 @@ func newEdges(n int, e EdgeSet) *Virtual {
139140
}
140141
}
141142
return
143+
default:
144+
return
142145
}
143-
return
144146
}
145147

146148
visit0 := func(v int, a int, do func(w int, c int64) bool) (aborted bool) {
147-
if intersect.Contains(v) {
149+
switch {
150+
case intersect.Contains(v):
148151
for _, in := range union.And(Range(a, n)).set {
149152
for w := in.a; w < in.b; w++ {
150153
if v != w && e.Keep(v, w) && do(w, 0) {
@@ -153,8 +156,7 @@ func newEdges(n int, e EdgeSet) *Virtual {
153156
}
154157
}
155158
return
156-
}
157-
if from.Contains(v) {
159+
case from.Contains(v):
158160
for _, in := range to.And(Range(a, n)).set {
159161
for w := in.a; w < in.b; w++ {
160162
if e.Keep(v, w) && do(w, 0) {
@@ -163,8 +165,7 @@ func newEdges(n int, e EdgeSet) *Virtual {
163165
}
164166
}
165167
return
166-
}
167-
if to.Contains(v) {
168+
case to.Contains(v):
168169
for _, in := range from.And(Range(a, n)).set {
169170
for w := in.a; w < in.b; w++ {
170171
if e.Keep(v, w) && do(w, 0) {
@@ -173,8 +174,9 @@ func newEdges(n int, e EdgeSet) *Virtual {
173174
}
174175
}
175176
return
177+
default:
178+
return
176179
}
177-
return
178180
}
179181

180182
if noCost {

build/join.go

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@ func (g1 *Virtual) Join(g2 *Virtual, bridge EdgeSet) *Virtual {
2020
bridge.Cost = zero
2121
}
2222
joinCost := func(v, w int) int64 {
23-
if v < t && w < t {
23+
switch {
24+
case v < t && w < t:
2425
return g1.cost(v, w)
25-
}
26-
if v >= t && w >= t {
26+
case v >= t && w >= t:
2727
return g2.cost(v-t, w-t)
28+
default:
29+
return bridge.Cost(v, w)
2830
}
2931
return bridge.Cost(v, w)
3032
}
@@ -38,32 +40,35 @@ func (g1 *Virtual) Join(g2 *Virtual, bridge EdgeSet) *Virtual {
3840
s2 := bridge.To.And(Range(t, g2.order+t))
3941

4042
res := generic(n, joinCost, func(v, w int) (edge bool) {
41-
if v < t && w < t {
43+
switch {
44+
case v < t && w < t:
4245
return g1.edge(v, w)
43-
}
44-
if v >= t && w >= t {
46+
case v >= t && w >= t:
4547
return g2.edge(v-t, w-t)
46-
}
47-
if !bridge.Keep(v, w) {
48+
case !bridge.Keep(v, w):
4849
return false
50+
default:
51+
return s1.Contains(v) && s2.Contains(w) ||
52+
s1.Contains(w) && s2.Contains(v)
4953
}
50-
return s1.Contains(v) && s2.Contains(w) || s1.Contains(w) && s2.Contains(v)
5154
})
5255

5356
if noFilter {
5457
res.degree = func(v int) (deg int) {
55-
if v < t {
58+
switch {
59+
case v < t:
5660
deg = g1.degree(v)
5761
if s1.Contains(v) {
5862
deg += s2.size()
5963
}
6064
return
65+
default:
66+
deg = g2.degree(v - t)
67+
if s2.Contains(v) {
68+
deg += s1.size()
69+
}
70+
return
6171
}
62-
deg = g2.degree(v - t)
63-
if s2.Contains(v) {
64-
deg += s1.size()
65-
}
66-
return
6772
}
6873
}
6974

build/match.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@ func (g1 *Virtual) Match(g2 *Virtual, bridge EdgeSet) *Virtual {
2121
bridge.Cost = zero
2222
}
2323
matchCost := func(v, w int) int64 {
24-
if v < t && w < t {
24+
switch {
25+
case v < t && w < t:
2526
return g1.cost(v, w)
26-
}
27-
if v >= t && w >= t {
27+
case v >= t && w >= t:
2828
return g2.cost(v-t, w-t)
29+
default:
30+
return bridge.Cost(v, w)
2931
}
30-
return bridge.Cost(v, w)
3132
}
3233

3334
if bridge.Keep == nil {
@@ -37,20 +38,20 @@ func (g1 *Virtual) Match(g2 *Virtual, bridge EdgeSet) *Virtual {
3738
s2 := bridge.To.And(Range(t, g2.order+t))
3839

3940
res := generic(n, matchCost, func(v, w int) (edge bool) {
40-
if v < t && w < t {
41+
switch {
42+
case v < t && w < t:
4143
return g1.edge(v, w)
42-
}
43-
if v >= t && w >= t {
44+
case v >= t && w >= t:
4445
return g2.edge(v-t, w-t)
45-
}
46-
if !bridge.Keep(v, w) {
46+
case !bridge.Keep(v, w):
4747
return false
48+
default:
49+
s1v := s1.rank(v)
50+
s1w := s1.rank(w)
51+
s2v := s2.rank(v)
52+
s2w := s2.rank(w)
53+
return s1v != -1 && s1v == s2w || s1w != -1 && s1w == s2v
4854
}
49-
s1v := s1.rank(v)
50-
s1w := s1.rank(w)
51-
s2v := s2.rank(v)
52-
s2w := s2.rank(w)
53-
return s1v != -1 && s1v == s2w || s1w != -1 && s1w == s2v
5455
})
5556

5657
res.visit = func(v int, a int, do func(w int, c int64) bool) (aborted bool) {

build/subgraph.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,15 @@ func (g *Virtual) Subgraph(s VertexSet) *Virtual {
2929
s0 := s.And(Range(s.get(a), n))
3030
for _, in := range s0.set {
3131
if more := false; g.visit(v0, in.a, func(w0 int, c int64) (skip bool) {
32-
if w0 >= in.b {
32+
switch {
33+
case w0 >= in.b:
3334
more, skip = true, true
3435
return
35-
}
36-
if do(s.rank(w0), c) {
36+
case do(s.rank(w0), c):
3737
return true
38+
default:
39+
return
3840
}
39-
return
4041
}) && !more {
4142
return true
4243
}

build/vertexset.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ type VertexSet struct {
1111
set []interval
1212
}
1313

14+
const (
15+
maxInt = int(^uint(0) >> 1)
16+
minInt = -maxInt - 1
17+
)
18+
1419
// An interval represents the numbers [a, b).
1520
type interval struct {
1621
a, b int
@@ -117,15 +122,15 @@ func (s VertexSet) complement() VertexSet {
117122
return VertexSet{}
118123
}
119124
t := empty()
120-
prev := minint
125+
prev := minInt
121126
for _, in := range s.set {
122127
if prev != in.a {
123128
t.set = append(t.set, interval{prev, in.a, 0})
124129
}
125130
prev = in.b
126131
}
127-
if prev < maxint {
128-
t.set = append(t.set, interval{prev, maxint, 0})
132+
if prev < maxInt {
133+
t.set = append(t.set, interval{prev, maxInt, 0})
129134
}
130135
t.update()
131136
return t

0 commit comments

Comments
 (0)