...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package s2
16
17
18
19
20 type EdgeIterator struct {
21 index *ShapeIndex
22 shapeID int32
23 numEdges int32
24 edgeID int32
25 }
26
27
28 func NewEdgeIterator(index *ShapeIndex) *EdgeIterator {
29 e := &EdgeIterator{
30 index: index,
31 shapeID: -1,
32 edgeID: -1,
33 }
34
35 e.Next()
36 return e
37 }
38
39
40 func (e *EdgeIterator) ShapeID() int32 { return e.shapeID }
41
42
43 func (e *EdgeIterator) EdgeID() int32 { return e.edgeID }
44
45
46 func (e *EdgeIterator) ShapeEdgeID() ShapeEdgeID { return ShapeEdgeID{e.shapeID, e.edgeID} }
47
48
49 func (e *EdgeIterator) Edge() Edge {
50 return e.index.Shape(e.shapeID).Edge(int(e.edgeID))
51 }
52
53
54 func (e *EdgeIterator) Done() bool { return e.shapeID >= int32(len(e.index.shapes)) }
55
56
57 func (e *EdgeIterator) Next() {
58 e.edgeID++
59 for ; e.edgeID >= e.numEdges; e.edgeID++ {
60 e.shapeID++
61 if e.shapeID >= int32(len(e.index.shapes)) {
62 break
63 }
64 shape := e.index.Shape(e.shapeID)
65 if shape == nil {
66 e.numEdges = 0
67 } else {
68 e.numEdges = int32(shape.NumEdges())
69 }
70 e.edgeID = -1
71 }
72 }
73
View as plain text