You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

driver.go 1.6 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package ops
  2. import (
  3. "gitlink.org.cn/cloudream/common/pkgs/ioswitch/dag"
  4. "gitlink.org.cn/cloudream/common/pkgs/ioswitch/exec"
  5. )
  6. type FromDriverNode struct {
  7. dag.NodeBase
  8. Handle *exec.DriverWriteStream
  9. }
  10. func (b *GraphNodeBuilder) NewFromDriver(handle *exec.DriverWriteStream) *FromDriverNode {
  11. node := &FromDriverNode{
  12. Handle: handle,
  13. }
  14. b.AddNode(node)
  15. node.OutputStreams().SetupNew(node, b.NewVar())
  16. return node
  17. }
  18. func (t *FromDriverNode) Output() dag.Slot {
  19. return dag.Slot{
  20. Var: t.OutputStreams().Get(0),
  21. Index: 0,
  22. }
  23. }
  24. func (t *FromDriverNode) GenerateOp() (exec.Op, error) {
  25. t.Handle.ID = t.OutputStreams().Get(0).VarID
  26. return nil, nil
  27. }
  28. // func (t *FromDriverType) String() string {
  29. // return fmt.Sprintf("FromDriver[]%v%v", formatStreamIO(node), formatValueIO(node))
  30. // }
  31. type ToDriverNode struct {
  32. dag.NodeBase
  33. Handle *exec.DriverReadStream
  34. Range exec.Range
  35. }
  36. func (b *GraphNodeBuilder) NewToDriver(handle *exec.DriverReadStream) *ToDriverNode {
  37. node := &ToDriverNode{
  38. Handle: handle,
  39. }
  40. b.AddNode(node)
  41. return node
  42. }
  43. func (t *ToDriverNode) SetInput(v *dag.Var) {
  44. t.InputStreams().EnsureSize(1)
  45. v.Connect(t, 0)
  46. }
  47. func (t *ToDriverNode) Input() dag.Slot {
  48. return dag.Slot{
  49. Var: t.InputStreams().Get(0),
  50. Index: 0,
  51. }
  52. }
  53. func (t *ToDriverNode) GenerateOp() (exec.Op, error) {
  54. t.Handle.ID = t.InputStreams().Get(0).VarID
  55. return nil, nil
  56. }
  57. // func (t *ToDriverType) String() string {
  58. // return fmt.Sprintf("ToDriver[%v+%v]%v%v", t.Range.Offset, t.Range.Length, formatStreamIO(node), formatValueIO(node))
  59. // }