一起来读源码234-Ipfs 第三方库:go-merkledag

摘要

merkeldag,用来存文件路径;做路径遍历操作;

详情

go-merkledag

定义类型

名称类型注释
Orderint序列类别
Funcfunc(current State) error遍历节点回调函数
GetLinksfunc(context.Context, cid.Cid) ([]*ipld.Link, error)获得cid的所有链接
WaltOptionfunc(*walkOptions)设置遍历选项
ErrFuncfunc(err error) error错误回调函数
dfsFuncfunc(state State, t *traversal) error定义
ChangeTypeint数据操作类型

定义全局变量

名称类型注释
v0CidPrefixcid.Prefixcid.Prefix{Codec: cid.DagProtobuf, MhLength: -1, MhType: mh.SHA2_256, Version: 0,}
v1CidPrefixcid.Prefixcid.Prefix{Codec: cid.DagProtobuf, MhLength: -1, MhType: mh.SHA2_256, Version: 1,}
DFSPreOrder0, 前序遍历
DFSPostOrder1, 后序遍历
BFSOrder2, 宽度优先遍历
AddChangeType0.添加
RemoveChangeType1.删除
ModChangeType2.修改

定义全局函数

函数注释
V0CidPrefix() cid.Prefix返回全局变量v0CidPrefix
V1CidPrefix() cid.Prefix返回全局变量v1CidPrefix
PrefixForCidVersion(version int) (cid.Prefix, error)返回cid前缀
NodeWithData(d []byte) *ProtoNode根据byte数组新建节点
NewDAGService(bs bserv.BlockService) *dagService新建一个DAG服务
GetLinksDirect(serv ipld.NodeGetter) GetLinks-
FetchGraph(ctx context.Context, root cid.Cid, serv ipld.DAGService) error拿到结点的子节点
FetchGraphWithDepthLimit(ctx context.Context, root cid.Cid, depthLim int, serv ipld.DAGService) error按照指定深度拿节点的子节点,深度为0返回root节点,深度为-1无限制
GetLinksWithDAG(ng ipld.NodeGetter) GetLinks返回一个获得所有链接的函数
SkipRoot() WalkOption设置跳过root节点
Concurrent() WalkOption设置默认协程数量
Concurrency(worker int) WalkOption设置指定协程数量
IgnoreErrors() WalkOption设置忽略错误
IgnoreMissing() WalkOption设置跳过ipld.ErrNotFound
OnMissing(callback func(c cid.Cid)) WalkOption设置ipld.ErrNotFound错误回调
OnError(handler func(c cid.Cid, err error) error) WalkOption设置错误回调
Walk(ctx context.Context, getLinks GetLinks, c cid.Cid, visit func(cid.Cid) bool, options …WalkOption) error深度优先遍历
WalkDepth(ctx context.Context, getLinks GetLinks, c cid.Cid, visit func(cid.Cid, int) bool, options …WalkOption) error深度遍历
NewRawNode(data []byte) *RawNode使用sha-256算法创建一个只包含数据的节点
DecodeRawBlock(block blocks.Block) (ipld.Node, error)解析只包含数据的节点
NewRawNodeWPrefix(data []byte, builder cid.Builder) (*RawNode, error)通过cid构建器创建一个只包含数据的节点
NewReadOnlyDagService(ng ipld.NodeGetter) ipld.DAGService新建一个只读DagService
NewSession(ctx context.Context, g ipld.NodeGetter) ipld.NodeGetter创建session
Traverse(root ipld.Node, o Options) error遍历节点
ApplyChange(ctx context.Context, ds ipld.DAGService, nd *dag.ProtoNode, cs []*Change) (*dag.ProtoNode, error)应用操作
Diff(ctx context.Context, ds ipld.DAGService, a, b ipld.Node) ([]*Change, error)比对变更
MergeDiffs(a, b []*Change) ([]*Change, []Conflict)合并变更
DiffEnumerate(ctx context.Context, dserv ipld.NodeGetter, from, to cid.Cid) error枚举比对变更
NewMemoryDagService() ipld.DAGService新建内存DagService
NewDagEditor(root *dag.ProtoNode, source ipld.DAGService) *Editor新建Dag编辑器
FetchGraph(ctx context.Context, root cid.Cid, serv ipld.DAGService) error按深度获得节点,无限制

定义接口

接口注释
Session(context.Context) ipld.NodeGetter-

定义类

ProtoNode 节点类
名字类型注释
links[]*ipld.Link
data[]byte
encoded[]byte
cachedcid.Cid
buildercid.Builder
CidBuilder() cid.Builderfunc返回cid构建器
SetCidBuilder(builder cid.Builder)func设置cid构建器
AddNodeLink(name string, that ipld.Node) errorfunc给节点添加链接
AddRawLink(name string, l *ipld.Link) errorfunc给节点添加一个链接复制
RemoveNodeLink(name string) errorfunc删除一个节点的链接
GetNodeLink(name string) (*ipld.Link, error)func根据链接返回节点
GetLinkedProtoNode(ctx context.Context, ds ipld.DAGService, name string) (*ProtoNode, error)func根据链接返回ProtoNode
GetLinkedNode(ctx context.Context, ds ipld.DAGService, name string) (ipld.Node, error)func根据链接返回IPLD节点
Copy() ipld.Nodefunc复制节点
RawData() []bytefunc返回protobuf编码的节点
Data() []bytefunc返回节点数据
SetData(d []byte)func设置节点数据
UpdateNodeLink(name string, that *ProtoNode) (*ProtoNode, error)func更新节点的链接
Size() (uint64, error)func返回节点总大小,包括链接的大小
Stat() (*ipld.NodeStat, error)func返回节点的数据统计
Loggable() map[string]interface{}funcipfs/go-log.Loggable的实现
UnmarshalJSON(b []byte) errorfunc从json解析ProtoNode
MarshalJSON() ([]byte, error)funcProtoNode转json
Cid() cid.Cidfunc返回节点的Cid
String() stringfunc返回节点的Cid的string
Multihash() mh.Multihashfunc返回节点hash
Links() []*ipld.Linkfunc返回节点的link集合
SetLinks(links []*ipld.Link)func设置节点的link集合
Resolve(path []string) (interface{}, []string, error)func解析link的别名
ResolveLink(path []string) (*ipld.Link, []string, error)func解析并返回链接
Tree(p string, depth int) []stringfunc返回链接的名字集合
Marshal() ([]byte, error)func格式化protoNode
GetPBNode() *pb.PBNodefunc返回pb类型的节点
EncodeProtobuf(force bool) ([]byte, error)func序列化为protobuf
DecodeProtobuf(encoded []byte) (*ProtoNode, error)func反序列化为protobuf
DecodeProtobufBlock(b blocks.Block) (ipld.Node, error)func解析protobuf块
LinkSlice link集合
名字类型注释
Len() intfunc返回link集合长度
Swap(a, b int)func交换2个link
Less(a, b int) boolfunca的名字是否比b的名字短
ErrorService 实现自ipld.DAGService
名字类型注释
Errerror错误
Add(ctx context.Context, nd ipld.Node) errorfunc返回错误
AddMany(ctx context.Context, nds []ipld.Node) errorfunc返回错误
Get(ctx context.Context, c cid.Cid) (ipld.Node, error)func返回错误
GetMany(ctx context.Context, cids []cid.Cid) <-chan *ipld.NodeOptionfunc返回错误
Remove(ctx context.Context, c cid.Cid) errorfunc返回错误
RemoveMany(ctx context.Context, cids []cid.Cid) errorfunc返回错误
dagService IPFS Merkle DAG service
名字类型注释
Blocksbserv.BlockService块集合
Add(ctx context.Context, nd ipld.Node) errorfunc添加块节点
AddMany(ctx context.Context, nds []ipld.Node) errorfunc一次性添加多个块节点
Get(ctx context.Context, c cid.Cid) (ipld.Node, error)func根据cid获得块节点
GetLinks(ctx context.Context, c cid.Cid) ([]*ipld.Link, error)func根据cid获得链接集合
Remove(ctx context.Context, c cid.Cid) errorfunc删除cid指向的块节点
RemoveMany(ctx context.Context, cids []cid.Cid) errorfunc删除多个cid志向的快捷键
GetMany(ctx context.Context, keys []cid.Cid) <-chan *ipld.NodeOptionfunc返回多个cid的节点块
sesGetter
名字类型注释
bs*bserv.Sessionsession
Get(ctx context.Context, c cid.Cid) (ipld.Node, error)func从DAG拿一个块节点
GetMany(ctx context.Context, keys []cid.Cid) <-chan *ipld.NodeOptionfunc返回多个cid指向的节点
Session(ctx context.Context) ipld.NodeGetterfunc返回sesGetter
walkOptions 路径遍历选项
名字类型注释
SkipRootbool是否跳过root节点
Concurrencyint协程数量
ErrorHandlerfunc(c cid.Cid, err error) error错误回调
addHandler(handler func(c cid.Cid, err error) error)func添加错误回调
ProgressTracker 路径追踪器
名字类型注释
Totalint深度
lksync.Mutex互斥锁
DeriveContext(ctx context.Context) context.Contextfunc产生上下文
Increment()func自增
Value()int返回Total
RawNode 只包含数据的节点
名字类型注释
-blocks.Block继承自blocks.Block
Links() []*ipld.Linkfunc返回空
ResolveLink(path []string) (*ipld.Link, []string, error)func返回空
Resolve(path []string) (interface{}, []string, error)func返回空
Tree(p string, depth int) []stringfunc返回空
Copy() ipld.Nodefunc复制一个节点
Size() (uint64, error)func返回节点数据大小
Stat() (*ipld.NodeStat, error)func返回节点统计信息
MarshalJSON() ([]byte, error)func序列化节点
ComboService 混合服务
名字类型注释
Readipld.NodeGetter
Writeipld.DAGService
Add(ctx context.Context, nd ipld.Node) errorfunc添加节点
AddMany(ctx context.Context, nds []ipld.Node) errorfunc添加多个节点
Get(ctx context.Context, c cid.Cid) (ipld.Node, error)func获得节点
GetMany(ctx context.Context, cids []cid.Cid) <-chan *ipld.NodeOptionfunc获得多个节点
Remove(ctx context.Context, c cid.Cid) errorfunc删除节点
RemoveMany(ctx context.Context, cids []cid.Cid) errorfunc删除多个节点
Options 选项
名字类型注释
DAGipld.NodeGetter搜索路径
OrderOrder遍历方式
FuncFunc每步回调函数
ErrFuncErrFunc错误回调函数
SkipDuplicatesbool是否跳过重复节点
State 节点状态
名字类型注释
Nodeipld.Node当前节点
Depthint深度
traversal 遍历
名字类型注释
optsOptions选项
seenmap[string]struct{}存放遍历节点的内容
shouldSkip(n ipld.Node) (bool, error)func跳过
callFunc(next State) errorfunc回调遍历,设置节点状态
getNode(link *ipld.Link) (ipld.Node, error)func返回链接对应的节点
queue 节点信息队列
名字类型注释
s[]State信息队列
enq(n State)func入队
deq() Statefunc出队
len() intfunc返回队列长度
Change 操作
名字类型注释
TypeChangeType操作类型
Pathstring路径
Beforecid.Cid前一个节点
Aftercid.Cid后一个节点
String() stringfunc本次操作的string描述
Conflict 冲突
名字类型注释
A*Changea操作
B*Changeb操作
diffpair 比对pair
名字类型注释
befcid.Cidbef:前一个版本
aftcid.Cidaft:后一个版本
Editor 编辑器
名字类型注释
root*dag.ProtoNoderoot节点
tmpipld.DAGService临时路径
srcipld.DAGService源路径
GetNode() *dag.ProtoNodefunc获得root节点的复制
GetDagService() ipld.DAGServicefunc获得编辑器的临时DagService
InsertNodeAtPath(ctx context.Context, pth string, toinsert ipld.Node, create func() *dag.ProtoNode) errorfunc根据路径插入节点
RmLink(ctx context.Context, pth string) errorfunc删除链接
Finalize(ctx context.Context, ds ipld.DAGService) (*dag.ProtoNode, error)func固定路径和数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值