mixin.lisp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. #+sbcl
  63. (progn
  64. (defmethod sb-gray:stream-read-sequence
  65. ((s trivial-gray-stream-mixin) seq &optional start end)
  66. (stream-read-sequence s seq (or start 0) (or end (length seq))))
  67. (defmethod sb-gray:stream-write-sequence
  68. ((s trivial-gray-stream-mixin) seq &optional start end)
  69. (stream-write-sequence s seq (or start 0) (or end (length seq))))
  70. ;; SBCL extension:
  71. (defmethod sb-gray:stream-line-length ((stream trivial-gray-stream-mixin))
  72. 80)
  73. ;; SBCL should provide this default method, but doesn't?
  74. (defmethod stream-terpri ((stream trivial-gray-stream-mixin))
  75. (write-char #\newline stream)))