mixin.lisp 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. (in-package :trivial-gray-streams)
  2. (defclass trivial-gray-stream-mixin () ())
  3. (defgeneric stream-read-sequence
  4. (stream sequence start end &key &allow-other-keys))
  5. (defgeneric stream-write-sequence
  6. (stream sequence start end &key &allow-other-keys))
  7. (defmethod stream-write-string
  8. ((stream trivial-gray-stream-mixin) seq &optional start end)
  9. (stream-write-sequence stream seq (or start 0) (or end (length seq))))
  10. #+allegro
  11. (progn
  12. (defmethod excl:stream-read-sequence
  13. ((s trivial-gray-stream-mixin) seq &optional start end)
  14. (stream-read-sequence s seq (or start 0) (or end (length seq))))
  15. (defmethod stream:stream-write-sequence
  16. ((s trivial-gray-stream-mixin) seq &optional start end)
  17. (stream-write-sequence s seq (or start 0) (or end (length seq)))))
  18. #+cmu
  19. (progn
  20. (defmethod ext:stream-read-sequence
  21. ((s trivial-gray-stream-mixin) seq &optional start end)
  22. (stream-read-sequence s seq (or start 0) (or end (length seq))))
  23. (defmethod ext:stream-write-sequence
  24. ((s trivial-gray-stream-mixin) seq &optional start end)
  25. (stream-write-sequence s seq (or start 0) (or end (length seq)))))
  26. #+lispworks
  27. (progn
  28. (defmethod stream:stream-read-sequence
  29. ((s trivial-gray-stream-mixin) seq start end)
  30. (stream-read-sequence s seq start end))
  31. (defmethod stream:stream-write-sequence
  32. ((s trivial-gray-stream-mixin) seq start end)
  33. (stream-write-sequence s seq start end)))
  34. #+openmcl
  35. (progn
  36. (defmethod ccl:stream-read-vector
  37. ((s trivial-gray-stream-mixin) seq start end)
  38. (stream-read-sequence s seq start end))
  39. (defmethod ccl:stream-write-vector
  40. ((s trivial-gray-stream-mixin) seq start end)
  41. (stream-write-sequence s seq start end)))
  42. #+clisp
  43. (progn
  44. (defmethod gray:stream-read-byte-sequence
  45. ((s trivial-gray-stream-mixin)
  46. seq
  47. &optional start end no-hang interactive)
  48. (when no-hang
  49. (error "this stream does not support the NO-HANG argument"))
  50. (when interactive
  51. (error "this stream does not support the INTERACTIVE argument"))
  52. (stream-read-sequence s seq start end))
  53. (defmethod gray:stream-write-byte-sequence
  54. ((s trivial-gray-stream-mixin)
  55. seq
  56. &optional start end no-hang interactive)
  57. (when no-hang
  58. (error "this stream does not support the NO-HANG argument"))
  59. (when interactive
  60. (error "this stream does not support the INTERACTIVE argument"))
  61. (stream-write-sequence s seq start end))
  62. (defmethod gray:stream-read-char-sequence
  63. ((s trivial-gray-stream-mixin) seq &optional start end)
  64. (stream-read-sequence s seq start end))
  65. (defmethod gray:stream-write-char-sequence
  66. ((s trivial-gray-stream-mixin) seq &optional start end)
  67. (stream-write-sequence s seq start end)))
  68. #+sbcl
  69. (progn
  70. (defmethod sb-gray:stream-read-sequence
  71. ((s trivial-gray-stream-mixin) seq &optional start end)
  72. (stream-read-sequence s seq (or start 0) (or end (length seq))))
  73. (defmethod sb-gray:stream-write-sequence
  74. ((s trivial-gray-stream-mixin) seq &optional start end)
  75. (stream-write-sequence s seq (or start 0) (or end (length seq))))
  76. ;; SBCL extension:
  77. (defmethod sb-gray:stream-line-length ((stream trivial-gray-stream-mixin))
  78. 80)
  79. ;; SBCL should provide this default method, but doesn't?
  80. (defmethod stream-terpri ((stream trivial-gray-stream-mixin))
  81. (write-char #\newline stream)))