do not cache skipped nodes
parent
6ad5a535a1
commit
e8f3e50dcf
|
@ -203,6 +203,19 @@ func (self *DeltaCoordsCache) FillWay(way *element.Way) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func removeSkippedNodes(nodes []element.Node) []element.Node {
|
||||||
|
insertPoint := 0
|
||||||
|
for i := 0; i < len(nodes); i++ {
|
||||||
|
if i != insertPoint {
|
||||||
|
nodes[insertPoint] = nodes[i]
|
||||||
|
}
|
||||||
|
if nodes[i].Id != SKIP {
|
||||||
|
insertPoint += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nodes[:insertPoint]
|
||||||
|
}
|
||||||
|
|
||||||
// PutCoords puts nodes into cache.
|
// PutCoords puts nodes into cache.
|
||||||
// nodes need to be sorted by Id.
|
// nodes need to be sorted by Id.
|
||||||
func (self *DeltaCoordsCache) PutCoords(nodes []element.Node) error {
|
func (self *DeltaCoordsCache) PutCoords(nodes []element.Node) error {
|
||||||
|
@ -210,10 +223,8 @@ func (self *DeltaCoordsCache) PutCoords(nodes []element.Node) error {
|
||||||
currentBunchId = self.getBunchId(nodes[0].Id)
|
currentBunchId = self.getBunchId(nodes[0].Id)
|
||||||
start = 0
|
start = 0
|
||||||
totalNodes := len(nodes)
|
totalNodes := len(nodes)
|
||||||
|
nodes = removeSkippedNodes(nodes)
|
||||||
for i, node := range nodes {
|
for i, node := range nodes {
|
||||||
if node.Id == SKIP {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
bunchId := self.getBunchId(node.Id)
|
bunchId := self.getBunchId(node.Id)
|
||||||
if bunchId != currentBunchId {
|
if bunchId != currentBunchId {
|
||||||
if self.linearImport && int64(i) > self.bunchSize && int64(i) < int64(totalNodes)-self.bunchSize {
|
if self.linearImport && int64(i) > self.bunchSize && int64(i) < int64(totalNodes)-self.bunchSize {
|
||||||
|
|
|
@ -19,6 +19,48 @@ func mknode(id int64) element.Node {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRemoveSkippedNodes(t *testing.T) {
|
||||||
|
nodes := []element.Node{
|
||||||
|
mknode(0),
|
||||||
|
mknode(1),
|
||||||
|
mknode(-1),
|
||||||
|
mknode(2),
|
||||||
|
mknode(-1),
|
||||||
|
}
|
||||||
|
nodes = removeSkippedNodes(nodes)
|
||||||
|
if l := len(nodes); l != 3 {
|
||||||
|
t.Fatal(nodes)
|
||||||
|
}
|
||||||
|
if nodes[0].Id != 0 || nodes[1].Id != 1 || nodes[2].Id != 2 {
|
||||||
|
t.Fatal(nodes)
|
||||||
|
}
|
||||||
|
|
||||||
|
nodes = []element.Node{
|
||||||
|
mknode(-1),
|
||||||
|
mknode(-1),
|
||||||
|
}
|
||||||
|
nodes = removeSkippedNodes(nodes)
|
||||||
|
if l := len(nodes); l != 0 {
|
||||||
|
t.Fatal(nodes)
|
||||||
|
}
|
||||||
|
|
||||||
|
nodes = []element.Node{
|
||||||
|
mknode(-1),
|
||||||
|
mknode(1),
|
||||||
|
mknode(-1),
|
||||||
|
mknode(-1),
|
||||||
|
mknode(-1),
|
||||||
|
mknode(2),
|
||||||
|
}
|
||||||
|
nodes = removeSkippedNodes(nodes)
|
||||||
|
if l := len(nodes); l != 2 {
|
||||||
|
t.Fatal(nodes)
|
||||||
|
}
|
||||||
|
if nodes[0].Id != 1 || nodes[1].Id != 2 {
|
||||||
|
t.Fatal(nodes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestReadWriteDeltaCoords(t *testing.T) {
|
func TestReadWriteDeltaCoords(t *testing.T) {
|
||||||
checkReadWriteDeltaCoords(t, false)
|
checkReadWriteDeltaCoords(t, false)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue