;; stream.ol

(require 'objective-lisp)

(defClass Stream ()
  (stream)
  )

(defMethod Stream :isnew (s)
  (setf stream s)
  self
  )

(defClass IStream Stream
  ()
  (common-lisp-read-table)
  ;; *readtable* is a class variable of IStream
  )

(defMethod IStream :isnew (s)
  (send-super :isnew s)
  (unless common-lisp-read-table
	  (setq common-lisp-read-table *readtable*)) ;;HACK
  self
  )

(defClassMethod IStream :open (fn)
  [self :new (open fn)]
  )

(defMethod IStream :set-readtable (&optional tbl)
  (setq *readtable* (or tbl common-lisp-read-table))
  )

(defMethod IStream :read (&optional eof)
  (read stream eof)
  )

(defClass OStream Stream
  ()
  )

(defMethod OStream :format (form &rest args)
  (apply #'format (append (list stream form) args))
  )

(provide 'stream)
