func OutputNodeNew(name string, stypeName string, context bh.SignalGraphTypeIf) (ret *node, err error) { st, ok := freesp.GetSignalTypeByName(stypeName) if !ok { err = fmt.Errorf("InputNodeNew error: signaltype %s not defined", stypeName) return } ntName := createOutputNodeTypeName(stypeName) nt, ok := freesp.GetNodeTypeByName(ntName) if !ok { nt = NodeTypeNew(ntName, "") nt.(*nodeType).addInPort("", st) freesp.RegisterNodeType(nt) } return NodeNew(name, nt, context) }
func createNodeTypeFromXmlNode(n backend.XmlNode, ntName string) *nodeType { nt := NodeTypeNew(ntName, "") for _, p := range n.InPort { pType, ok := freesp.GetSignalTypeByName(p.PType) if !ok { log.Fatalf("createNodeTypeFromXmlNode error: FIXME signal type '%s' not found\n", p.PType) } nt.addInPort(p.PName, pType) } for _, p := range n.OutPort { pType, ok := freesp.GetSignalTypeByName(p.PType) if !ok { log.Fatalf("createNodeTypeFromXmlNode error: FIXME signal type '%s' not found\n", p.PType) } nt.addOutPort(p.PName, pType) } freesp.RegisterNodeType(nt) return nt }
func (l *library) AddNodeType(t bh.NodeTypeIf) error { nType, ok := freesp.GetNodeTypeByName(t.TypeName()) if ok { log.Printf(`library.AddNodeType: warning: adding existing node type definition %s (taking the existing one)`, t.TypeName()) } else { nType = t.(*nodeType) freesp.RegisterNodeType(nType) log.Println("library.AddNodeType: registered ", t.TypeName()) } for _, nt := range l.nodeTypes.NodeTypes() { if nt.TypeName() == t.TypeName() { return fmt.Errorf(`adding duplicate node type definition %s (ignored)`, t.TypeName()) } } l.nodeTypes.Append(nType) return nil }
func (g *signalGraphType) addOutputNodeFromPortType(p bh.PortTypeIf) { st := p.SignalType() ntName := createOutputNodeTypeName(st.TypeName()) nt, ok := freesp.GetNodeTypeByName(ntName) if !ok { nt = NodeTypeNew(ntName, "") nt.(*nodeType).addInPort("", st) freesp.RegisterNodeType(nt) } if len(nt.(*nodeType).inPorts.PortTypes()) == 0 { log.Fatal("signalGraphType.addOutputNodeFromNamedPortType: invalid output node type") } n, err := NodeNew(fmt.Sprintf("out-%s", p.Name()), nt, g) if err != nil { log.Fatal("signalGraphType.addOutputNodeFromPortType: TODO: error handling") } n.portlink = p err = g.addNode(n) if err != nil { log.Fatal("signalGraphType.addOutputNodeFromNamedPortType: AddNode failed:", err) } }