package intermediate
import (
"fmt"
basegraph "github.com/d2lang/elk-go/internal/graph"
"github.com/d2lang/elk-go/internal/layered"
"github.com/d2lang/elk-go/internal/layered/intermediate/loops"
"github.com/d2lang/elk-go/internal/layered/intermediate/loops/ordering"
)
func RestoreSelfLoopPorts (arena *layered .LGraphArena , graphID layered .LGraphID ) error {
for _ , layerID := range arena .Graph (graphID ).Layers {
for _ , nodeID := range arena .Layer (layerID ).Nodes {
node := arena .Node (nodeID )
if node .Type != layered .NormalNode {
continue
}
holder , found := basegraph .TryGet (&node .Properties , loops .HolderProperty )
if !found {
continue
}
if err := restoreNodeSelfLoopPorts (arena , holder ); err != nil {
return err
}
}
}
return nil
}
func restoreNodeSelfLoopPorts(arena *layered .LGraphArena , holder *loops .Holder ) error {
if holder .PortsHidden {
switch basegraph .Get (&arena .Node (holder .LNode ).Properties , layered .OriginalPortConstraints ) {
case layered .PortConstraintsUndefined , layered .PortConstraintsFree :
if err := ordering .AssignPortSides (arena , holder ); err != nil {
return err
}
case layered .PortConstraintsFixedSide :
default :
return fmt .Errorf ("hidden self-loop ports require non-fixed port order" )
}
}
for _ , loop := range holder .HyperLoops {
if err := loop .ComputePortsPerSide (arena ); err != nil {
return err
}
}
if holder .PortsHidden {
return ordering .RestorePorts (arena , holder )
}
return nil
}
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 .