package layoutgraph
import "maps"
func (graph *Graph ) LookupEdgeLengthCost (state uint64 ) (float64 , bool ) {
graph .costMu .RLock ()
defer graph .costMu .RUnlock ()
cost , ok := graph .edgeLengthCache [state ]
return cost , ok
}
func (graph *Graph ) StoreEdgeLengthCost (state uint64 , cost float64 ) {
graph .costMu .Lock ()
defer graph .costMu .Unlock ()
if graph .edgeLengthCache != nil {
graph .edgeLengthCache [state ] = cost
}
}
func (graph *Graph ) EdgeLengthCacheEntries () int {
graph .costMu .RLock ()
defer graph .costMu .RUnlock ()
return len (graph .edgeLengthCache )
}
func (graph *Graph ) ResetPlacementCosts () {
graph .costMu .Lock ()
defer graph .costMu .Unlock ()
clear (graph .edgeLengthCache )
graph .crossingCost = 0
graph .turnCost = 0
graph .nonCenterPortCost = 0
}
type PlacementCostSnapshot struct {
graph *Graph
cacheRef map [uint64 ]float64
cache map [uint64 ]float64
crossingCost float64
turnCost float64
nonCenterPortCost float64
}
func (graph *Graph ) SnapshotPlacementCosts () *PlacementCostSnapshot {
graph .costMu .RLock ()
defer graph .costMu .RUnlock ()
snapshot := &PlacementCostSnapshot {
graph : graph ,
cacheRef : graph .edgeLengthCache ,
crossingCost : graph .crossingCost ,
turnCost : graph .turnCost ,
nonCenterPortCost : graph .nonCenterPortCost ,
}
if graph .edgeLengthCache != nil {
snapshot .cache = maps .Clone (graph .edgeLengthCache )
}
return snapshot
}
func (snapshot *PlacementCostSnapshot ) Restore () {
if snapshot == nil || snapshot .graph == nil {
return
}
snapshot .graph .costMu .Lock ()
defer snapshot .graph .costMu .Unlock ()
if snapshot .cacheRef == nil {
snapshot .graph .edgeLengthCache = nil
} else {
clear (snapshot .cacheRef )
maps .Copy (snapshot .cacheRef , snapshot .cache )
snapshot .graph .edgeLengthCache = snapshot .cacheRef
}
snapshot .graph .crossingCost = snapshot .crossingCost
snapshot .graph .turnCost = snapshot .turnCost
snapshot .graph .nonCenterPortCost = snapshot .nonCenterPortCost
}
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 .