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