Add conversion helpers for netlink addresses
[iolib.git] / src / new-cl / gray-streams.lisp
blob6bdff81bc36e933625dbe04debe060f81be543fb
1 ;;;; -*- Mode: Lisp; indent-tabs-mode: nil -*-
2 ;;;
3 ;;; --- GRAY stream mixin.
4 ;;;
6 (in-package :iolib.common-lisp)
8 (defclass trivial-gray-stream-mixin ()
9 ((%open :initform t)))
11 (defmethod close ((s trivial-gray-stream-mixin) &key abort)
12 (declare (ignore abort))
13 (prog1 (slot-value s '%open)
14 (setf (slot-value s '%open) nil)))
16 (defmethod open-stream-p ((s trivial-gray-stream-mixin))
17 (slot-value s '%open))
19 (defgeneric stream-read-sequence
20 (stream sequence start end &key &allow-other-keys))
22 (defgeneric stream-write-sequence
23 (stream sequence start end &key &allow-other-keys))
25 (defgeneric stream-file-position (stream))
27 (defgeneric (setf stream-file-position) (newval stream))
29 (defmethod stream-write-string
30 ((stream trivial-gray-stream-mixin) seq &optional start end)
31 (stream-write-sequence stream seq (or start 0) (or end (length seq))))
33 ;; Implementations should provide this default method, I believe, but
34 ;; at least sbcl and allegro don't.
35 (defmethod stream-terpri ((stream trivial-gray-stream-mixin))
36 (write-char #\newline stream))
38 (defmethod stream-file-position ((stream trivial-gray-stream-mixin))
39 nil)
41 (defmethod (setf stream-file-position)
42 (newval (stream trivial-gray-stream-mixin))
43 (declare (ignore newval))
44 nil)
46 #+allegro
47 (progn
48 (defmethod excl:stream-read-sequence
49 ((s trivial-gray-stream-mixin) seq &optional start end)
50 (stream-read-sequence s seq (or start 0) (or end (length seq))))
52 (defmethod excl:stream-write-sequence
53 ((s trivial-gray-stream-mixin) seq &optional start end)
54 (stream-write-sequence s seq (or start 0) (or end (length seq)))))
56 #+cmu
57 (progn
58 (defmethod ext:stream-read-sequence
59 ((s trivial-gray-stream-mixin) seq &optional start end)
60 (stream-read-sequence s seq (or start 0) (or end (length seq))))
62 (defmethod ext:stream-write-sequence
63 ((s trivial-gray-stream-mixin) seq &optional start end)
64 (stream-write-sequence s seq (or start 0) (or end (length seq)))))
66 #+lispworks
67 (progn
68 (defmethod stream:stream-read-sequence
69 ((s trivial-gray-stream-mixin) seq start end)
70 (stream-read-sequence s seq start end))
72 (defmethod stream:stream-write-sequence
73 ((s trivial-gray-stream-mixin) seq start end)
74 (stream-write-sequence s seq start end))
76 (defmethod stream:stream-file-position ((stream trivial-gray-stream-mixin))
77 (stream-file-position stream))
79 (defmethod (setf stream:stream-file-position)
80 (newval (stream trivial-gray-stream-mixin))
81 (setf (stream-file-position stream) newval)))
83 #+openmcl
84 (progn
85 (defmethod ccl:stream-read-vector
86 ((s trivial-gray-stream-mixin) seq start end)
87 (stream-read-sequence s seq start end))
89 (defmethod ccl:stream-write-vector
90 ((s trivial-gray-stream-mixin) seq start end)
91 (stream-write-sequence s seq start end)))
93 #+clisp
94 (eval-when (:compile-toplevel :load-toplevel :execute)
95 (let* ((pkg (find-package :gray))
96 (sym (and pkg (find-symbol (string '#:stream-read-sequence) pkg))))
97 (unless (and sym (fboundp sym))
98 (error "Your CLISP does not have ~A and is therefore unsupported"
99 "gray:stream-read-sequence"))))
101 #+clisp
102 (progn
103 (defmethod gray:stream-read-sequence
104 ((s trivial-gray-stream-mixin) seq &key start end)
105 (stream-read-sequence s seq (or start 0) (or end (length seq))))
107 (defmethod gray:stream-write-sequence
108 ((s trivial-gray-stream-mixin) seq &key start end)
109 (stream-write-sequence s seq (or start 0) (or end (length seq))))
111 (defmethod gray:stream-position ((stream trivial-gray-stream-mixin) position)
112 (if position
113 (setf (stream-file-position stream) position)
114 (stream-file-position stream))))
116 #+sbcl
117 (progn
118 (defmethod sb-gray:stream-read-sequence
119 ((s trivial-gray-stream-mixin) seq &optional start end)
120 (stream-read-sequence s seq (or start 0) (or end (length seq))))
122 (defmethod sb-gray:stream-write-sequence
123 ((s trivial-gray-stream-mixin) seq &optional start end)
124 (stream-write-sequence s seq (or start 0) (or end (length seq))))
126 ;; SBCL extension:
127 (defmethod sb-gray:stream-line-length ((stream trivial-gray-stream-mixin))
128 80))
130 #+ecl
131 (progn
132 (defmethod gray:stream-read-sequence
133 ((s trivial-gray-stream-mixin) seq &optional start end)
134 (stream-read-sequence s seq (or start 0) (or end (length seq))))
136 (defmethod gray:stream-write-sequence
137 ((s trivial-gray-stream-mixin) seq &optional start end)
138 (stream-write-sequence s seq (or start 0) (or end (length seq)))))