github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/storage/feed/query.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:44</date> 10 //</624450119260966912> 11 12 13 package feed 14 15 import ( 16 "fmt" 17 "strconv" 18 19 "github.com/ethereum/go-ethereum/common" 20 "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" 21 ) 22 23 //查询用于在执行更新查找时指定约束 24 //TimeLimit表示搜索的上限。设置为0表示“现在” 25 type Query struct { 26 Feed 27 Hint lookup.Epoch 28 TimeLimit uint64 29 } 30 31 //FromValues从字符串键值存储中反序列化此实例 32 //用于分析查询字符串 33 func (q *Query) FromValues(values Values) error { 34 time, _ := strconv.ParseUint(values.Get("time"), 10, 64) 35 q.TimeLimit = time 36 37 level, _ := strconv.ParseUint(values.Get("hint.level"), 10, 32) 38 q.Hint.Level = uint8(level) 39 q.Hint.Time, _ = strconv.ParseUint(values.Get("hint.time"), 10, 64) 40 if q.Feed.User == (common.Address{}) { 41 return q.Feed.FromValues(values) 42 } 43 return nil 44 } 45 46 //AppendValues将此结构序列化到提供的字符串键值存储区中 47 //用于生成查询字符串 48 func (q *Query) AppendValues(values Values) { 49 if q.TimeLimit != 0 { 50 values.Set("time", fmt.Sprintf("%d", q.TimeLimit)) 51 } 52 if q.Hint.Level != 0 { 53 values.Set("hint.level", fmt.Sprintf("%d", q.Hint.Level)) 54 } 55 if q.Hint.Time != 0 { 56 values.Set("hint.time", fmt.Sprintf("%d", q.Hint.Time)) 57 } 58 q.Feed.AppendValues(values) 59 } 60 61 //newquery构造一个查询结构以在“time”或之前查找更新 62 //如果time==0,将查找最新更新 63 func NewQuery(feed *Feed, time uint64, hint lookup.Epoch) *Query { 64 return &Query{ 65 TimeLimit: time, 66 Feed: *feed, 67 Hint: hint, 68 } 69 } 70 71 //newquerylatest生成查找参数,以查找源的最新更新 72 func NewQueryLatest(feed *Feed, hint lookup.Epoch) *Query { 73 return NewQuery(feed, 0, hint) 74 } 75