implement DeleteFromWay

master
Oliver Tonnhofer 2013-08-06 15:29:30 +02:00
parent 63794491f6
commit d89a9f2832
2 changed files with 52 additions and 60 deletions

41
cache/diff.go vendored
View File

@ -285,17 +285,26 @@ func newWaysRefIndex(dir string) (*WaysRefIndex, error) {
return &WaysRefIndex{*cache}, nil
}
// func (index *CoordsRefIndex) AddFromWay(way *element.Way) {
// for _, node := range way.Nodes {
// index.addc <- idRef{id: node.Id, ref: way.Id}
// }
// }
func (index *CoordsRefIndex) AddFromWay(way *element.Way) {
if index.linearImport {
for _, node := range way.Nodes {
index.addc <- idRef{id: node.Id, ref: way.Id}
}
} else {
for _, node := range way.Nodes {
index.add(node.Id, way.Id)
}
}
}
// func (index *CoordsRefIndex) DeleteFromWay(way *element.Way) {
// for _, node := range way.Nodes {
// index.addc <- idRef{id: node.Id, ref: way.Id, delete: true}
// }
// }
func (index *CoordsRefIndex) DeleteFromWay(way *element.Way) {
if index.linearImport {
panic("programming error: delete not supported in linearImport mode")
}
for _, node := range way.Nodes {
index.DeleteRef(node.Id, way.Id)
}
}
func (index *WaysRefIndex) AddFromMembers(relId int64, members []element.Member) {
for _, member := range members {
@ -350,18 +359,6 @@ func (index *bunchRefCache) dispatch() {
index.waitAdd.Done()
}
func (index *bunchRefCache) AddFromWay(way *element.Way) {
if index.linearImport {
for _, node := range way.Nodes {
index.addc <- idRef{id: node.Id, ref: way.Id}
}
} else {
for _, node := range way.Nodes {
index.add(node.Id, way.Id)
}
}
}
func (index *bunchRefCache) getBunchId(id int64) int64 {
return id / 64
}

71
cache/diff_test.go vendored
View File

@ -1,6 +1,7 @@
package cache
import (
"goposm/element"
"io/ioutil"
"os"
"testing"
@ -46,51 +47,45 @@ func TestInsertRefs(t *testing.T) {
}
// func TestDiffCache(t *testing.T) {
func TestDiffCache(t *testing.T) {
// cache_dir, _ := ioutil.TempDir("", "goposm_test")
// defer os.RemoveAll(cache_dir)
cache_dir, _ := ioutil.TempDir("", "goposm_test")
defer os.RemoveAll(cache_dir)
// cache, err := newRefIndex(cache_dir, &globalCacheOptions.CoordsIndex)
// if err != nil {
// t.Fatal()
// }
cache, err := newCoordsRefIndex(cache_dir)
if err != nil {
t.Fatal()
}
defer cache.Close()
// w1 := element.Way{}
// w1.Id = 100
// w1.Nodes = []element.Node{
// {OSMElem: element.OSMElem{Id: 1000}},
// {OSMElem: element.OSMElem{Id: 1001}},
// {OSMElem: element.OSMElem{Id: 1002}},
// }
// cache.AddFromWay(&w1)
w1 := element.Way{}
w1.Id = 100
w1.Nodes = []element.Node{
{OSMElem: element.OSMElem{Id: 1000}},
{OSMElem: element.OSMElem{Id: 1001}},
{OSMElem: element.OSMElem{Id: 1002}},
}
cache.AddFromWay(&w1)
// w2 := element.Way{}
// w2.Id = 200
// w2.Nodes = []element.Node{
// {OSMElem: element.OSMElem{Id: 1002}},
// {OSMElem: element.OSMElem{Id: 1003}},
// {OSMElem: element.OSMElem{Id: 1004}},
// }
// cache.AddFromWay(&w2)
w2 := element.Way{}
w2.Id = 200
w2.Nodes = []element.Node{
{OSMElem: element.OSMElem{Id: 1002}},
{OSMElem: element.OSMElem{Id: 1003}},
{OSMElem: element.OSMElem{Id: 1004}},
}
cache.AddFromWay(&w2)
// cache.DeleteFromWay(&w1)
cache.DeleteFromWay(&w1)
// cache.Close()
// cache, err = newRefIndex(cache_dir, &globalCacheOptions.CoordsIndex)
// if err != nil {
// t.Fatal()
// }
// defer cache.Close()
if ids := cache.Get(1000); len(ids) != 0 {
t.Fatal(ids)
}
if ids := cache.Get(1002); len(ids) != 1 {
t.Fatal(ids)
}
// if ids := cache.Get(1000); len(ids) != 0 {
// t.Fatal(ids)
// }
// if ids := cache.Get(1002); len(ids) != 1 {
// t.Fatal(ids)
// }
// }
}
func TestWriteDiff(t *testing.T) {
cache_dir, _ := ioutil.TempDir("", "goposm_test")