58 lines
1.1 KiB
Go
58 lines
1.1 KiB
Go
|
package graph
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/json"
|
||
|
)
|
||
|
|
||
|
// Cycle instances represent parts of the graph where circular dependencies are detected. During analysis, they
|
||
|
// signify that this branch of the graph is always invalid.
|
||
|
type Cycle struct {
|
||
|
parentNode Node
|
||
|
}
|
||
|
|
||
|
func (c *Cycle) String() string {
|
||
|
jsonbstr, err := json.Marshal(c)
|
||
|
if err != nil {
|
||
|
return ""
|
||
|
}
|
||
|
return string(jsonbstr)
|
||
|
}
|
||
|
|
||
|
// Implements json.Marshaler
|
||
|
func (c *Cycle) MarshalJSON() ([]byte, error) {
|
||
|
buf := new(bytes.Buffer)
|
||
|
buf.WriteString("{\"type\": \"cycle\"}")
|
||
|
return buf.Bytes(), nil
|
||
|
}
|
||
|
|
||
|
// Implements json.Unmarshaler
|
||
|
func (c *Cycle) UnmarchalJSON([]byte) error {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (c *Cycle) deepcopy() Node {
|
||
|
nc := new(Cycle)
|
||
|
nc.parentNode = c.parentNode
|
||
|
return nc
|
||
|
}
|
||
|
|
||
|
func (c *Cycle) setParent(g Node) {
|
||
|
c.parentNode = g
|
||
|
}
|
||
|
|
||
|
func (c *Cycle) parent() Node {
|
||
|
return c.parentNode
|
||
|
}
|
||
|
|
||
|
// similar returns true if the provided LeafNode is also a Cycle node
|
||
|
func (c *Cycle) similar(o LeafNode) bool {
|
||
|
_, ok := o.(*Cycle)
|
||
|
return ok
|
||
|
}
|
||
|
|
||
|
func (c *Cycle) hash() (ret [8]byte) {
|
||
|
copy(ret[:], []byte("Cycle")[:8])
|
||
|
return
|
||
|
}
|