Renamed package
This commit is contained in:
parent
2113944ada
commit
58992f60d0
|
@ -1,9 +1,6 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import "fmt"
|
||||||
"fmt"
|
|
||||||
"lib/graph"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
n := &graph.Node{Value: "1"}
|
n := &graph.Node{Value: "1"}
|
||||||
|
|
|
@ -1,85 +0,0 @@
|
||||||
package graph
|
|
||||||
|
|
||||||
//Node a graph node which can contain Connections to other nodes
|
|
||||||
type Node struct {
|
|
||||||
Value string
|
|
||||||
Incoming []*Node
|
|
||||||
Outgoing []*Node
|
|
||||||
}
|
|
||||||
|
|
||||||
//SetPointTo sets this Node to point towards the given Node
|
|
||||||
func (n *Node) SetPointTo(otherNode *Node) {
|
|
||||||
if n.IsPointingTo(otherNode) == false {
|
|
||||||
n.Outgoing = append(n.Outgoing, otherNode)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//RemovePointerTo removes pointer to a node (a "child")
|
|
||||||
func (n *Node) RemovePointerTo(otherNode *Node) int {
|
|
||||||
i := n.GetIndexOfOut(otherNode)
|
|
||||||
if i != -1 {
|
|
||||||
n.Outgoing = append(n.Outgoing[:i], n.Outgoing[i+1:]...)
|
|
||||||
return i
|
|
||||||
}
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
|
|
||||||
//IsPointingTo returns true if this node is pointing to the given argument
|
|
||||||
func (n *Node) IsPointingTo(otherNode *Node) bool {
|
|
||||||
if n.GetIndexOfOut(otherNode) != -1 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
//Disconnect disconnects two nodes by removing pointers for BOTH
|
|
||||||
func (n *Node) Disconnect(otherNode *Node) int {
|
|
||||||
i := n.GetIndexOfOut(otherNode)
|
|
||||||
j := otherNode.GetIndexOfOut(n)
|
|
||||||
if i != -1 && j != -1 {
|
|
||||||
//if n is pointing to otherNode
|
|
||||||
//remove othernode from n.Outgoing, and remove n from otherNode.Outgoing
|
|
||||||
n.Outgoing = append(n.Outgoing[:i], n.Outgoing[i+1:]...)
|
|
||||||
otherNode.Outgoing = append(otherNode.Outgoing[:j], otherNode.Outgoing[j+1:]...)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
i = n.GetIndexOfIn(otherNode)
|
|
||||||
j = otherNode.GetIndexOfIn(n)
|
|
||||||
if i!= -1 && j != -1 {
|
|
||||||
//else if otherNode point to n
|
|
||||||
// remove otherNode from n.Incoming, and remove n from otherNode.Incoming
|
|
||||||
n.Incoming = append(n.Incoming[:i], n.Incoming[i+1:]...)
|
|
||||||
otherNode.Incoming = append(otherNode.Incoming[:j], otherNode.Incoming[j+1:]...)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
|
|
||||||
//DisconnectAll removes all pointer from and to this Node
|
|
||||||
func (n *Node) DisconnectAll() {
|
|
||||||
for _, v := range n.Outgoing {
|
|
||||||
n.Disconnect(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//GetIndexOfOut gets the index of the specified node that this node points to
|
|
||||||
//May alternatively be used to check if n is pointing to otherNode
|
|
||||||
func (n *Node) GetIndexOfOut(otherNode *Node) int {
|
|
||||||
for i, v := range n.Outgoing {
|
|
||||||
if v == otherNode { //addresses are compared
|
|
||||||
return i
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
|
|
||||||
//GetIndexOfIn gets the index of the specified node which points to this node
|
|
||||||
func (n *Node) GetIndexOfIn(otherNode *Node) int {
|
|
||||||
for i, v := range n.Incoming {
|
|
||||||
if v == otherNode { //addresses are compared
|
|
||||||
return i
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user