mixin.lisp 3.4 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. ;; Implementations should provide this default method, I believe, but
  11. ;; at least sbcl and allegro don't.
  12. (defmethod stream-terpri ((stream trivial-gray-stream-mixin))
  13. (write-char #\newline stream))
  14. #+allegro
  15. (progn
  16. (defmethod excl:stream-read-sequence
  17. ((s trivial-gray-stream-mixin) seq &optional start end)
  18. (stream-read-sequence s seq (or start 0) (or end (length seq))))
  19. (defmethod stream:stream-write-sequence
  20. ((s trivial-gray-stream-mixin) seq &optional start end)
  21. (stream-write-sequence s seq (or start 0) (or end (length seq)))))
  22. #+cmu
  23. (progn
  24. (defmethod ext:stream-read-sequence
  25. ((s trivial-gray-stream-mixin) seq &optional start end)
  26. (stream-read-sequence s seq (or start 0) (or end (length seq))))
  27. (defmethod ext:stream-write-sequence
  28. ((s trivial-gray-stream-mixin) seq &optional start end)
  29. (stream-write-sequence s seq (or start 0) (or end (length seq)))))
  30. #+lispworks
  31. (progn
  32. (defmethod stream:stream-read-sequence
  33. ((s trivial-gray-stream-mixin) seq start end)
  34. (stream-read-sequence s seq start end))
  35. (defmethod stream:stream-write-sequence
  36. ((s trivial-gray-stream-mixin) seq start end)
  37. (stream-write-sequence s seq start end)))
  38. #+openmcl
  39. (progn
  40. (defmethod ccl:stream-read-vector
  41. ((s trivial-gray-stream-mixin) seq start end)
  42. (stream-read-sequence s seq start end))
  43. (defmethod ccl:stream-write-vector
  44. ((s trivial-gray-stream-mixin) seq start end)
  45. (stream-write-sequence s seq start end)))
  46. #+clisp
  47. (progn
  48. (defmethod gray:stream-read-byte-sequence
  49. ((s trivial-gray-stream-mixin)
  50. seq
  51. &optional start end no-hang interactive)
  52. (when no-hang
  53. (error "this stream does not support the NO-HANG argument"))
  54. (when interactive
  55. (error "this stream does not support the INTERACTIVE argument"))
  56. (stream-read-sequence s seq start end))
  57. (defmethod gray:stream-write-byte-sequence
  58. ((s trivial-gray-stream-mixin)
  59. seq
  60. &optional start end no-hang interactive)
  61. (when no-hang
  62. (error "this stream does not support the NO-HANG argument"))
  63. (when interactive
  64. (error "this stream does not support the INTERACTIVE argument"))
  65. (stream-write-sequence s seq start end))
  66. (defmethod gray:stream-read-char-sequence
  67. ((s trivial-gray-stream-mixin) seq &optional start end)
  68. (stream-read-sequence s seq start end))
  69. (defmethod gray:stream-write-char-sequence
  70. ((s trivial-gray-stream-mixin) seq &optional start end)
  71. (stream-write-sequence s seq start end)))
  72. #+sbcl
  73. (progn
  74. (defmethod sb-gray:stream-read-sequence
  75. ((s trivial-gray-stream-mixin) seq &optional start end)
  76. (stream-read-sequence s seq (or start 0) (or end (length seq))))
  77. (defmethod sb-gray:stream-write-sequence
  78. ((s trivial-gray-stream-mixin) seq &optional start end)
  79. (stream-write-sequence s seq (or start 0) (or end (length seq))))
  80. ;; SBCL extension:
  81. (defmethod sb-gray:stream-line-length ((stream trivial-gray-stream-mixin))
  82. 80))