package orthogonal
type DependencyType uint8
const (
RegularDependency DependencyType = iota
CriticalDependency
)
const criticalDependencyWeight = 1
type HyperEdgeSegmentDependency struct {
Type DependencyType
Source *HyperEdgeSegment
Target *HyperEdgeSegment
Weight int
}
func AddRegularDependency (source , target *HyperEdgeSegment , weight int ) *HyperEdgeSegmentDependency {
return addDependency (RegularDependency , source , target , weight )
}
func AddCriticalDependency (source , target *HyperEdgeSegment ) *HyperEdgeSegmentDependency {
return addDependency (CriticalDependency , source , target , criticalDependencyWeight )
}
func addDependency(kind DependencyType , source , target *HyperEdgeSegment , weight int ) *HyperEdgeSegmentDependency {
dependency := &HyperEdgeSegmentDependency {Type : kind , Weight : weight }
dependency .setSource (source )
dependency .setTarget (target )
return dependency
}
func (dependency *HyperEdgeSegmentDependency ) Remove () {
dependency .setSource (nil )
dependency .setTarget (nil )
}
func (dependency *HyperEdgeSegmentDependency ) Reverse () {
source , target := dependency .Source , dependency .Target
dependency .setSource (target )
dependency .setTarget (source )
}
func (dependency *HyperEdgeSegmentDependency ) setSource (source *HyperEdgeSegment ) {
if dependency .Source != nil {
dependency .Source .OutgoingDependencies = removeDependency (dependency .Source .OutgoingDependencies , dependency )
}
dependency .Source = source
if source != nil {
source .OutgoingDependencies = append (source .OutgoingDependencies , dependency )
}
}
func (dependency *HyperEdgeSegmentDependency ) setTarget (target *HyperEdgeSegment ) {
if dependency .Target != nil {
dependency .Target .IncomingDependencies = removeDependency (dependency .Target .IncomingDependencies , dependency )
}
dependency .Target = target
if target != nil {
target .IncomingDependencies = append (target .IncomingDependencies , dependency )
}
}
func removeDependency(values []*HyperEdgeSegmentDependency , target *HyperEdgeSegmentDependency ) []*HyperEdgeSegmentDependency {
for index , value := range values {
if value == target {
copy (values [index :], values [index +1 :])
return values [:len (values )-1 ]
}
}
return values
}
The pages are generated with Golds v0.8.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .