func (p *WaysCache) GetWay(id int64) (*element.Way, error) { keyBuf := idToKeyBuf(id) data, err := p.db.Get(p.ro, keyBuf) if err != nil { return nil, err } if data == nil { return nil, NotFound } way, err := binary.UnmarshalWay(data) if err != nil { return nil, err } way.Id = id return way, nil }
func (p *WaysCache) Iter() chan *element.Way { ways := make(chan *element.Way, 1024) go func() { ro := levigo.NewReadOptions() ro.SetFillCache(false) it := p.db.NewIterator(ro) defer it.Close() it.SeekToFirst() for ; it.Valid(); it.Next() { way, err := binary.UnmarshalWay(it.Value()) if err != nil { panic(err) } way.Id = idFromKeyBuf(it.Key()) ways <- way } close(ways) }() return ways }
func (p *WaysCache) Iter() chan *element.Way { ways := make(chan *element.Way, 1024) go func() { ro := levigo.NewReadOptions() ro.SetFillCache(false) it := p.db.NewIterator(ro) // we need to Close the iter before closing the // chan (and thus signaling that we are done) // to avoid race where db is closed before the iterator defer close(ways) defer it.Close() it.SeekToFirst() for ; it.Valid(); it.Next() { way, err := binary.UnmarshalWay(it.Value()) if err != nil { panic(err) } way.Id = idFromKeyBuf(it.Key()) ways <- way } }() return ways }