package ops2 import ( "gitlink.org.cn/cloudream/common/utils/math2" "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/ioswitch/dag" "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/ioswitch/exec" "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/ioswitch2" ) // TODO 想办法直接使用ops里的Node,而不是重新实现一遍 type FromDriverNode struct { dag.NodeBase From ioswitch2.From Handle *exec.DriverWriteStream } func (b *GraphNodeBuilder) NewFromDriver(fr ioswitch2.From, handle *exec.DriverWriteStream) *FromDriverNode { node := &FromDriverNode{ From: fr, Handle: handle, } b.AddNode(node) node.OutputStreams().Init(node, 1) return node } func (f *FromDriverNode) GetFrom() ioswitch2.From { return f.From } func (t *FromDriverNode) Output() dag.StreamOutputSlot { return dag.StreamOutputSlot{ Node: t, Index: 0, } } func (t *FromDriverNode) GenerateOp() (exec.Op, error) { t.Handle.ID = t.OutputStreams().Get(0).VarID return nil, nil } type ToDriverNode struct { dag.NodeBase To ioswitch2.To Handle *exec.DriverReadStream Range math2.Range } func (b *GraphNodeBuilder) NewToDriver(to ioswitch2.To, handle *exec.DriverReadStream) *ToDriverNode { node := &ToDriverNode{ To: to, Handle: handle, } b.AddNode(node) node.InputStreams().Init(1) return node } func (t *ToDriverNode) GetTo() ioswitch2.To { return t.To } func (t *ToDriverNode) SetInput(v *dag.StreamVar) { v.To(t, 0) } func (t *ToDriverNode) Input() dag.StreamInputSlot { return dag.StreamInputSlot{ Node: t, Index: 0, } } func (t *ToDriverNode) GenerateOp() (exec.Op, error) { t.Handle.ID = t.InputStreams().Get(0).VarID return nil, nil }