diff --git a/cache/diff.go b/cache/diff.go index 8d8ae1c..323b22b 100644 --- a/cache/diff.go +++ b/cache/diff.go @@ -262,44 +262,8 @@ func newWaysRefIndex(dir string) (*WaysRefIndex, error) { return &WaysRefIndex{*cache}, nil } -func (index *CoordsRefIndex) AddFromWay(way *element.Way) { - for _, node := range way.Nodes { - if index.linearImport { - index.addc <- idRef{id: node.Id, ref: way.Id} - } else { - index.add(node.Id, way.Id) - } - } -} - -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 { - if member.Type == element.WAY { - if index.linearImport { - index.addc <- idRef{id: member.Id, ref: relId} - } else { - index.add(member.Id, relId) - } - } - } -} - -func (index *bunchRefCache) writer() { - for buffer := range index.write { - if err := index.writeRefs(buffer); err != nil { - log.Println("error while writing ref index", err) - } - } - index.waitWrite.Done() +func (index *bunchRefCache) getBunchId(id int64) int64 { + return id / 64 } func (index *bunchRefCache) Close() { @@ -311,6 +275,15 @@ func (index *bunchRefCache) Close() { index.cache.Close() } +func (index *bunchRefCache) writer() { + for buffer := range index.write { + if err := index.writeRefs(buffer); err != nil { + log.Println("error while writing ref index", err) + } + } + index.waitWrite.Done() +} + func (index *bunchRefCache) dispatch() { for idRef := range index.addc { index.buffer.add(index.getBunchId(idRef.id), idRef.id, idRef.ref) @@ -330,10 +303,6 @@ func (index *bunchRefCache) dispatch() { index.waitAdd.Done() } -func (index *bunchRefCache) getBunchId(id int64) int64 { - return id / 64 -} - type loadBunchItem struct { bunchId int64 bunch idRefBunch @@ -454,6 +423,9 @@ func (index *bunchRefCache) loadMergeMarshal(keyBuf []byte, newBunch []idRefs) [ } func (index *bunchRefCache) Get(id int64) []int64 { + if index.linearImport { + panic("programming error: get not supported in linearImport mode") + } keyBuf := idToKeyBuf(index.getBunchId(id)) data, err := index.db.Get(index.ro, keyBuf) @@ -471,7 +443,7 @@ func (index *bunchRefCache) Get(id int64) []int64 { return nil } -func (index *bunchRefCache) add(id, ref int64) error { +func (index *bunchRefCache) Add(id, ref int64) error { keyBuf := idToKeyBuf(index.getBunchId(id)) data, err := index.db.Get(index.ro, keyBuf) @@ -543,6 +515,37 @@ func (index *bunchRefCache) Delete(id int64) error { return nil } +func (index *CoordsRefIndex) AddFromWay(way *element.Way) { + for _, node := range way.Nodes { + if index.linearImport { + index.addc <- idRef{id: node.Id, ref: way.Id} + } else { + index.Add(node.Id, way.Id) + } + } +} + +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 { + if member.Type == element.WAY { + if index.linearImport { + index.addc <- idRef{id: member.Id, ref: relId} + } else { + index.Add(member.Id, relId) + } + } + } +} + func marshalBunch(idRefs []idRefs) []byte { buf := make([]byte, len(idRefs)*(4+1+6)+binary.MaxVarintLen64) diff --git a/cache/diff_test.go b/cache/diff_test.go index 84392a3..9da40fe 100644 --- a/cache/diff_test.go +++ b/cache/diff_test.go @@ -100,7 +100,7 @@ func TestWriteDiff(t *testing.T) { for w := 0; w < 5; w++ { for n := 0; n < 200; n++ { - cache.add(int64(n), int64(w)) + cache.Add(int64(n), int64(w)) } }