package d2ir
func OverlayMap (base , overlay *Map ) {
for _ , of := range overlay .Fields {
bf := base .GetField (of .Name )
if bf == nil {
base .Fields = append (base .Fields , of .Copy (base ).(*Field ))
continue
}
OverlayField (bf , of )
}
for _ , oe := range overlay .Edges {
bea := base .GetEdges (oe .ID , nil , nil )
if len (bea ) == 0 {
base .Edges = append (base .Edges , oe .Copy (base ).(*Edge ))
continue
}
be := bea [0 ]
OverlayEdge (be , oe )
}
}
func ExpandSubstitution (m , resolved *Map , placeholder *Field ) {
fi := -1
for i := 0 ; i < len (m .Fields ); i ++ {
if m .Fields [i ] == placeholder {
fi = i
break
}
}
for _ , of := range resolved .Fields {
bf := m .GetField (of .Name )
if bf == nil {
m .Fields = append (m .Fields [:fi ], append ([]*Field {of .Copy (m ).(*Field )}, m .Fields [fi :]...)...)
fi ++
continue
}
OverlayField (bf , of )
}
for _ , oe := range resolved .Edges {
bea := m .GetEdges (oe .ID , nil , nil )
if len (bea ) == 0 {
m .Edges = append (m .Edges , oe .Copy (m ).(*Edge ))
continue
}
be := bea [0 ]
OverlayEdge (be , oe )
}
}
func OverlayField (bf , of *Field ) {
if of .Primary_ != nil {
bf .Primary_ = of .Primary_ .Copy (bf ).(*Scalar )
}
if of .Composite != nil {
if bf .Map () != nil && of .Map () != nil {
OverlayMap (bf .Map (), of .Map ())
} else {
bf .Composite = of .Composite .Copy (bf ).(Composite )
}
}
bf .References = append (bf .References , of .References ...)
}
func OverlayEdge (be , oe *Edge ) {
if oe .Primary_ != nil {
be .Primary_ = oe .Primary_ .Copy (be ).(*Scalar )
}
if oe .Map_ != nil {
if be .Map_ != nil {
OverlayMap (be .Map (), oe .Map_ )
} else {
be .Map_ = oe .Map_ .Copy (be ).(*Map )
}
}
be .References = append (be .References , oe .References ...)
}
The pages are generated with Golds v0.8.2 . (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 .