From 20383472c7f933d49f0617e0fd3bc0ae6190083b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristoffer=20Str=C3=B6m?= Date: Sun, 5 Apr 2015 04:05:40 +0200 Subject: [PATCH] Add additional link manipulation functions // AddRawLink adds a link to this node AddRawLink(name string, lnk *Link) error // Return a copy of the link with given name GetNodeLink(name string) (*Link, error) --- merkledag/node.go | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/merkledag/node.go b/merkledag/node.go index 4aab2420b..34eaf2c18 100644 --- a/merkledag/node.go +++ b/merkledag/node.go @@ -88,18 +88,21 @@ func (l *Link) GetNode(serv DAGService) (*Node, error) { // AddNodeLink adds a link to another node. func (n *Node) AddNodeLink(name string, that *Node) error { n.encoded = nil + lnk, err := MakeLink(that) + + lnk.Name = name + lnk.Node = that if err != nil { return err } - lnk.Name = name - lnk.Node = that - n.Links = append(n.Links, lnk) + n.AddRawLink(name, lnk) + return nil } -// AddNodeLink adds a link to another node. without keeping a reference to +// AddNodeLinkClean adds a link to another node. without keeping a reference to // the child node func (n *Node) AddNodeLinkClean(name string, that *Node) error { n.encoded = nil @@ -107,9 +110,21 @@ func (n *Node) AddNodeLinkClean(name string, that *Node) error { if err != nil { return err } - lnk.Name = name + n.AddRawLink(name, lnk) + + return nil +} + +// AddRawLink adds a copy of a link to this node +func (n *Node) AddRawLink(name string, l *Link) error { + n.encoded = nil + n.Links = append(n.Links, &Link{ + Name: name, + Size: l.Size, + Hash: l.Hash, + Node: l.Node, + }) - n.Links = append(n.Links, lnk) return nil } @@ -125,6 +140,21 @@ func (n *Node) RemoveNodeLink(name string) error { return ErrNotFound } +// Return a copy of the link with given name +func (n *Node) GetNodeLink(name string) (*Link, error) { + for _, l := range n.Links { + if l.Name == name { + return &Link{ + Name: l.Name, + Size: l.Size, + Hash: l.Hash, + Node: l.Node, + }, nil + } + } + return nil, ErrNotFound +} + // Copy returns a copy of the node. // NOTE: does not make copies of Node objects in the links. func (n *Node) Copy() *Node {