WriteStream.st
author claus
Fri, 05 Aug 1994 02:55:07 +0200
changeset 92 0c73b48551ac
parent 88 81dacba7a63a
child 95 d22739a0c6e9
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
PositionableStream subclass:#WriteStream
a27a279701f8 Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'writeLimit'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    15
       classVariableNames:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    17
       category:'Streams'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
WriteStream comment:'
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
    21
COPYRIGHT (c) 1989 by Claus Gittinger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    22
              All Rights Reserved
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    23
'!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    24
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    25
!WriteStream class methodsFor:'documentation'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    26
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    27
copyright
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    28
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    29
 COPYRIGHT (c) 1989 by Claus Gittinger
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    30
              All Rights Reserved
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    31
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    32
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    33
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    35
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    36
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    37
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    38
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    39
!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    40
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    41
version
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    42
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    43
$Header: /cvs/stx/stx/libbasic/WriteStream.st,v 1.9 1994-06-02 16:22:49 claus Exp $
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    44
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    45
!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    46
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    47
documentation
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    48
"
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    49
    Streams for writing into - this implementation currently DOES change the 
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    50
    identity if the streamed-upon collection IF it cannot grow. 
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    51
    Thus it is slightly incompatible to ST-80 since 'aStream contents' does 
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    52
    not always return the original collection. This may change.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    53
"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    54
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    55
a27a279701f8 Initial revision
claus
parents:
diff changeset
    56
!WriteStream class methodsFor:'instance creation'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    57
a27a279701f8 Initial revision
claus
parents:
diff changeset
    58
on:aCollection from:start to:last
a27a279701f8 Initial revision
claus
parents:
diff changeset
    59
    "create and return a new stream for writing onto aCollection, where
a27a279701f8 Initial revision
claus
parents:
diff changeset
    60
     writing is limited to the elements in the range start to last."
a27a279701f8 Initial revision
claus
parents:
diff changeset
    61
a27a279701f8 Initial revision
claus
parents:
diff changeset
    62
    |newStream|
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    63
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    64
    newStream := super on:aCollection from:start to:last.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    65
    newStream writeLimit:last.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    66
    ^ newStream
a27a279701f8 Initial revision
claus
parents:
diff changeset
    67
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    68
a27a279701f8 Initial revision
claus
parents:
diff changeset
    69
!WriteStream methodsFor:'private'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    70
a27a279701f8 Initial revision
claus
parents:
diff changeset
    71
on:aCollection
a27a279701f8 Initial revision
claus
parents:
diff changeset
    72
    "create and return a new stream for writing onto aCollection"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    73
a27a279701f8 Initial revision
claus
parents:
diff changeset
    74
    super on:aCollection.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    75
    writeLimit := readLimit
a27a279701f8 Initial revision
claus
parents:
diff changeset
    76
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    77
a27a279701f8 Initial revision
claus
parents:
diff changeset
    78
!WriteStream methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    79
a27a279701f8 Initial revision
claus
parents:
diff changeset
    80
contents
a27a279701f8 Initial revision
claus
parents:
diff changeset
    81
    "return the current contents (a collection) of the stream"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    82
a27a279701f8 Initial revision
claus
parents:
diff changeset
    83
    collection size == (position - 1) ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
    84
        collection isFixedSize ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
    85
            collection := collection copyFrom:1 to:(position - 1)
a27a279701f8 Initial revision
claus
parents:
diff changeset
    86
        ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
    87
            collection grow:(position - 1)
a27a279701f8 Initial revision
claus
parents:
diff changeset
    88
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
    89
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
    ^ collection
a27a279701f8 Initial revision
claus
parents:
diff changeset
    91
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    92
a27a279701f8 Initial revision
claus
parents:
diff changeset
    93
writeLimit:aNumber
a27a279701f8 Initial revision
claus
parents:
diff changeset
    94
    "set the writeLimit, thats the position after which writing is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    95
     prohibited."
a27a279701f8 Initial revision
claus
parents:
diff changeset
    96
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
    97
    writeLimit := aNumber
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    98
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    99
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   100
!WriteStream methodsFor:'reading'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   101
a27a279701f8 Initial revision
claus
parents:
diff changeset
   102
next
10
claus
parents: 5
diff changeset
   103
    "catch read access to write stream - report an error"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   104
10
claus
parents: 5
diff changeset
   105
    self shouldNotImplement
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   106
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   107
a27a279701f8 Initial revision
claus
parents:
diff changeset
   108
peek
10
claus
parents: 5
diff changeset
   109
    "catch read access to write stream - report an error"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   110
10
claus
parents: 5
diff changeset
   111
    self shouldNotImplement
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   112
! !
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   113
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   114
!WriteStream methodsFor:'writing'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   115
a27a279701f8 Initial revision
claus
parents:
diff changeset
   116
nextPut:anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   117
    "append the argument, anObject to the stream"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   118
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   119
%{  /* NOCONTEXT */
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   120
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   121
#ifdef NOTDEF
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   122
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   123
    REGISTER int pos;
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   124
    unsigned ch;
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   125
    OBJ coll;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   126
    OBJ t;
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   127
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   128
    coll = _INST(collection);
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   129
    if (_isNonNilObject(coll)
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   130
     && _isSmallInteger(t = _INST(position))) {
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   131
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   132
        pos = _intVal(t);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   133
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   134
        if (_isSmallInteger(t = _INST(writeLimit)) 
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   135
         && (pos <= _intVal(t)) && (pos > 0)) {
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   136
            OBJ cls;
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   137
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   138
            cls = _qClass(coll);
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   139
#ifdef NOTDEF
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   140
            if (cls == String) {
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   141
                if (__isCharacter(anObject) 
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   142
                 && (pos <= _stringSize(coll))) {
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   143
                    _StringInstPtr(coll)->s_element[pos-1] = _intVal(_characterVal(anObject));
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   144
                    _INST(position) = _MKSMALLINT(pos + 1);
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   145
                    if (_isSmallInteger(_INST(readLimit))
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   146
                     && (pos >= _intVal(_INST(readLimit)))) {
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   147
                        _INST(readLimit) = _MKSMALLINT(pos + 1);
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   148
                    }
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   149
                    RETURN ( anObject );
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   150
                }
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   151
            } else 
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   152
#endif
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   153
            if (cls == ByteArray) {
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   154
                if (_isSmallInteger(anObject) 
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   155
                 && ((ch = _intVal(anObject)) >= 0)
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   156
                 && (ch <= 255)
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   157
                 && (pos <= _byteArraySize(coll))) {
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   158
                    _ByteArrayInstPtr(coll)->ba_element[pos-1] = ch;
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   159
                    _INST(position) = _MKSMALLINT(pos + 1);
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   160
                    if (_isSmallInteger(_INST(readLimit))
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   161
                     && (pos >= _intVal(_INST(readLimit)))) {
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   162
                        _INST(readLimit) = _MKSMALLINT(pos + 1);
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   163
                    }
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   164
                    RETURN ( anObject );
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   165
                }
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   166
#ifdef NOTDEF
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   167
            } else 
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   168
            if (cls == Array) {
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   169
                if (pos <= _arraySize(coll)) {
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   170
                     _ArrayInstPtr(coll)->a_element[pos-1] = anObject;
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   171
                    __STORE(coll, anObject);
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   172
                    _INST(position) = _MKSMALLINT(pos + 1);
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   173
                    if (_isSmallInteger(_INST(readLimit))
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   174
                     && (pos >= _intVal(_INST(readLimit)))) {
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   175
                        _INST(readLimit) = _MKSMALLINT(pos + 1);
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   176
                    }
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   177
                    RETURN ( anObject );
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   178
                }
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   179
#endif
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   180
            }
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   181
        }
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   182
    }
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   183
#endif
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   184
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   185
%}
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   186
.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   187
    (position > collection size) ifTrue:[self growCollection].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   188
    collection at:position put:anObject.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   189
    (position > readLimit) ifTrue:[readLimit := position].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   190
    position := position + 1.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   191
    ^anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   192
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   193
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   194
next:count put:anObject
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   195
    "append anObject count times to the receiver.
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   196
     Redefined to avoid count grows of the underlying collection -
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   197
     instead a single grow on the final size is performed."
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   198
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   199
    |final|
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   200
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   201
    collection isNil ifTrue:[
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   202
        count timesRepeat:[
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   203
            self nextPut:anObject
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   204
        ].
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   205
        ^ self
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   206
    ].
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   207
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   208
    final := position + count - 1.
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   209
    (final > collection size) ifTrue:[
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   210
        self growCollection:final
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   211
    ].
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   212
    collection atAll:(position to:final) put:anObject.
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   213
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   214
    position := position + count.
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   215
    (position > readLimit) ifTrue:[readLimit := position - 1].
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   216
    ^ anObject
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   217
!
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   218
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   219
nextPutAll:aCollection
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   220
    "append all elements of the argument, aCollection to the stream.
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   221
     Redefined to avoid count grows of the underlying collection -
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   222
     instead a single grow on the final size is performed."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   223
a27a279701f8 Initial revision
claus
parents:
diff changeset
   224
    |nMore final|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   225
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   226
    collection isNil ifTrue:[
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   227
        aCollection do:[:element |
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   228
            self nextPut:element
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   229
        ].
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   230
        ^ self
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   231
    ].
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   232
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   233
    nMore := aCollection size.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   234
    final := position + nMore - 1.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   235
    (final > collection size) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   236
        self growCollection:final
a27a279701f8 Initial revision
claus
parents:
diff changeset
   237
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   238
    collection replaceFrom:position
a27a279701f8 Initial revision
claus
parents:
diff changeset
   239
                        to:final
a27a279701f8 Initial revision
claus
parents:
diff changeset
   240
                      with:aCollection 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   241
                startingAt:1.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   242
a27a279701f8 Initial revision
claus
parents:
diff changeset
   243
    position := position + nMore.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   244
    (position > readLimit) ifTrue:[readLimit := position - 1].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   245
    ^ aCollection
a27a279701f8 Initial revision
claus
parents:
diff changeset
   246
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   247
10
claus
parents: 5
diff changeset
   248
!WriteStream methodsFor:'ignored'!
claus
parents: 5
diff changeset
   249
claus
parents: 5
diff changeset
   250
bold
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   251
    "change font to bold - ignored here.
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   252
     - this allows WriteStreams to be compatible to PrinterStreams"
10
claus
parents: 5
diff changeset
   253
!
claus
parents: 5
diff changeset
   254
claus
parents: 5
diff changeset
   255
italic
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   256
    "change font to italic - ignored here.
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   257
     - this allows WriteStreams to be compatible to PrinterStreams"
10
claus
parents: 5
diff changeset
   258
!
claus
parents: 5
diff changeset
   259
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   260
boldItalic
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   261
    "change font to italic - ignored here.
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   262
     - this allows WriteStreams to be compatible to PrinterStreams"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   263
!
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   264
10
claus
parents: 5
diff changeset
   265
normal
63
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   266
    "change font to normal - ignored here.
1f0cdefb013f *** empty log message ***
claus
parents: 10
diff changeset
   267
     - this allows WriteStreams to be compatible to PrinterStreams"
10
claus
parents: 5
diff changeset
   268
! !
claus
parents: 5
diff changeset
   269
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   270
!WriteStream methodsFor:'private'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   271
a27a279701f8 Initial revision
claus
parents:
diff changeset
   272
growCollection
a27a279701f8 Initial revision
claus
parents:
diff changeset
   273
    |oldSize newSize newColl|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   274
a27a279701f8 Initial revision
claus
parents:
diff changeset
   275
    oldSize := collection size.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   276
    (oldSize == 0) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   277
        newSize := 10
a27a279701f8 Initial revision
claus
parents:
diff changeset
   278
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   279
        newSize := oldSize * 2
a27a279701f8 Initial revision
claus
parents:
diff changeset
   280
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   281
    collection isFixedSize ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   282
        newColl := collection species new:newSize.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   283
        newColl replaceFrom:1 to:oldSize with:collection startingAt:1.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   284
        collection := newColl
a27a279701f8 Initial revision
claus
parents:
diff changeset
   285
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   286
        collection grow:newSize.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   287
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   288
    writeLimit := newSize
a27a279701f8 Initial revision
claus
parents:
diff changeset
   289
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   290
a27a279701f8 Initial revision
claus
parents:
diff changeset
   291
growCollection:minNewSize
a27a279701f8 Initial revision
claus
parents:
diff changeset
   292
    |oldSize newSize newColl|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   293
a27a279701f8 Initial revision
claus
parents:
diff changeset
   294
    oldSize := collection size.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   295
    (oldSize == 0) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   296
        newSize := minNewSize
a27a279701f8 Initial revision
claus
parents:
diff changeset
   297
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   298
        newSize := oldSize * 2.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   299
        [newSize < minNewSize] whileTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   300
            newSize := newSize * 2
a27a279701f8 Initial revision
claus
parents:
diff changeset
   301
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   302
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   303
    collection isFixedSize ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   304
        newColl := collection species new:newSize.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   305
        newColl replaceFrom:1 to:oldSize with:collection startingAt:1.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   306
        collection := newColl
a27a279701f8 Initial revision
claus
parents:
diff changeset
   307
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   308
        collection grow:newSize
a27a279701f8 Initial revision
claus
parents:
diff changeset
   309
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   310
    writeLimit := newSize
a27a279701f8 Initial revision
claus
parents:
diff changeset
   311
! !