Changeset 5409


Ignore:
Timestamp:
Oct 23, 2006, 7:27:06 AM (18 years ago)
Author:
Gary Byers
Message:

freelist string-output-stream-ioblocks.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/level-1/l1-streams.lisp

    r5406 r5409  
    40994099(defglobal *fill-pointer-string-output-stream-class* (make-built-in-class 'fill-pointer-string-output-stream 'string-output-stream))
    41004100
     4101(def-standard-initial-binding %string-output-stream-ioblocks% (%cons-pool nil))
     4102
     4103;;; Should only be used for a stream whose class is exactly
     4104;;; *string-output-stream-class*
     4105(defun %close-string-output-stream (stream ioblock)
     4106  (when (eq (basic-stream.class stream)
     4107            *string-output-stream-class*)
     4108    (without-interrupts
     4109     (setf (ioblock-stream ioblock) (pool.data %string-output-stream-ioblocks%)
     4110           (pool.data %string-output-stream-ioblocks%) ioblock))))
     4111
     4112(defun create-string-output-stream-ioblock (&rest keys &key stream &allow-other-keys)
     4113  (declare (dynamic-extent keys))
     4114  (let* ((recycled (and stream
     4115                        (eq (basic-stream.class stream)
     4116                            *string-output-stream-class*)
     4117                        (without-interrupts
     4118                         (let* ((data (pool.data %string-output-stream-ioblocks%)))
     4119                           (when data
     4120                             (setf (pool.data %string-output-stream-ioblocks%)
     4121                                   (ioblock-stream data)
     4122                                   (ioblock-stream data) stream
     4123                                   (string-output-stream-ioblock-index data) 0))
     4124                           data)))))
     4125    (or recycled (apply #'make-string-output-stream-ioblock keys))))
     4126                       
     4127
     4128
    41014129(defun %%make-string-output-stream (class string write-char-function write-string-function)
    41024130  (let* ((stream (allocate-basic-stream class)))
    41034131    (initialize-basic-stream stream :element-type 'character)
    4104     (let* ((ioblock (make-string-output-stream-ioblock
     4132    (let* ((ioblock (create-string-output-stream-ioblock
    41054133                     :stream stream
    41064134                     :device nil
     
    41114139                     :write-simple-string-function write-string-function
    41124140                     :force-output-function #'false
    4113                      :close-function #'false)))
     4141                     :close-function #'%close-string-output-stream)))
    41144142      (setf (basic-stream.state stream) ioblock)
    41154143      stream)))
     
    42314259(defun make-simple-string-output-stream ()
    42324260  (%%make-string-output-stream *string-output-stream-class*
    4233                                (make-string 10)
     4261                               (make-string 40)
    42344262                               'string-output-stream-ioblock-write-char
    42354263                               'string-output-stream-ioblock-write-simple-string))
Note: See TracChangeset for help on using the changeset viewer.