CharacterWriteStream.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 01 Apr 2015 10:20:10 +0100
branchjv
changeset 18120 e3a375d5f6a8
parent 18066 89d51443ba6f
parent 17622 553ee52df434
child 18274 042d13555f1f
permissions -rw-r--r--
Merged cb7a12afe736 and 86dd565344f0 (branch default - CVS HEAD)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17622
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
     1
"{ Encoding: utf8 }"
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
     2
10846
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
     3
"
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
     4
 COPYRIGHT (c) 2005 by eXept Software AG
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
     5
              All Rights Reserved
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
     6
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
     7
 This software is furnished under a license and may be used
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
     8
 only in accordance with the terms of that license and with the
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    10
 be provided or otherwise made available to, or used by, any
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    11
 other person.  No title to or ownership of the software is
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    12
 hereby transferred.
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    13
"
8299
7930ef8d5298 Add CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 8298
diff changeset
    14
"{ Package: 'stx:libbasic' }"
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
17622
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
    16
"{ NameSpace: Smalltalk }"
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
    17
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
WriteStream subclass:#CharacterWriteStream
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
	instanceVariableNames:'currentCharacterSize'
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
	classVariableNames:''
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
	poolDictionaries:''
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
	category:'Streams'
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
!
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    24
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    25
!CharacterWriteStream class methodsFor:'documentation'!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    26
10846
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    27
copyright
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    28
"
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    29
 COPYRIGHT (c) 2005 by eXept Software AG
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    30
              All Rights Reserved
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    31
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    32
 This software is furnished under a license and may be used
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    33
 only in accordance with the terms of that license and with the
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    35
 be provided or otherwise made available to, or used by, any
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    36
 other person.  No title to or ownership of the software is
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    37
 hereby transferred.
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    38
"
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    39
!
e82d25d9d165 copyright
Claus Gittinger <cg@exept.de>
parents: 10282
diff changeset
    40
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    41
documentation
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    42
"
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    43
    This is a WriteStream, which automagically changes the underlying collection,
10280
acca50cc0f17 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
    44
    if a character does fit into the current collection.
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    45
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    46
    String -> Unicode16String -> Unicode32Sting
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    47
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    48
    [author:]
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    49
        Stefan Vogel (stefan@zwerg)
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    50
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    51
    [instance variables:]
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    52
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    53
    [class variables:]
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    54
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    55
    [see also:]
10280
acca50cc0f17 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
    56
        String Unicode16String Unicode32Sting
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    57
"
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    58
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    59
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    60
examples
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    61
"
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    62
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    63
                                                                [exBegin]
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    64
    |stream|
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    65
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    66
    stream := CharacterWriteStream on:(String new:32).
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    67
    stream nextPutAll:'abc'.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    68
    stream nextPut:(Character value:16r2c00).
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    69
    stream contents inspect
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    70
                                                                [exEnd]
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    71
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    72
"
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    73
! !
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    74
14607
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    75
!CharacterWriteStream methodsFor:'accessing'!
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    76
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    77
reset
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    78
    "reset the stream; write anew.
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    79
     See the comment in WriteStream>>contents"
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    80
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    81
    collection := String new:collection size.
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    82
    currentCharacterSize := collection bitsPerCharacter.
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    83
    super resetPosition.
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    84
! !
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    85
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    86
!CharacterWriteStream methodsFor:'private'!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    87
17622
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
    88
characterSizeChanged:aCharacterOrString size:additionalSize
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    89
    "change aCollection to fit the size of aCharacter"
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    90
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    91
    |sz newSz bitsPerCharacter|
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    92
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    93
    bitsPerCharacter := aCharacterOrString bitsPerCharacter. 
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    94
    currentCharacterSize < bitsPerCharacter ifTrue:[
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    95
        sz := collection size.
17622
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
    96
        position + additionalSize >= sz ifTrue:[
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
    97
            newSz := sz + additionalSize.
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    98
        ] ifFalse:[
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    99
            newSz := sz.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   100
        ].
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   101
        collection := (aCharacterOrString stringSpecies new:newSz) 
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   102
                        replaceFrom:1 to:sz with:collection startingAt:1.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   103
        currentCharacterSize := bitsPerCharacter.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   104
    ].
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   105
! !
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   106
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   107
!CharacterWriteStream methodsFor:'private-accessing'!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   108
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   109
on:aCollection
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   110
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   111
    currentCharacterSize := aCollection bitsPerCharacter.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   112
    ^ super on:aCollection.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   113
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   114
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   115
on:aCollection from:start to:stop
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   116
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   117
    currentCharacterSize := aCollection bitsPerCharacter.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   118
    ^ super on:aCollection from:start to:stop.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   119
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   120
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   121
with:aCollection
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   122
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   123
    currentCharacterSize := aCollection bitsPerCharacter.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   124
    ^ super with:aCollection.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   125
! !
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   126
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
!CharacterWriteStream methodsFor:'writing'!
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   129
next:count put:aCharacter
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   130
    "append anObject count times to the receiver.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   131
     Redefined to avoid count grows of the underlying collection -
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   132
     instead a single grow on the final size is performed."
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   133
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   134
    aCharacter bitsPerCharacter > currentCharacterSize ifTrue:[
17622
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
   135
        self characterSizeChanged:aCharacter size:count.
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   136
    ].
12133
d2d08ea77b8c changed:
Claus Gittinger <cg@exept.de>
parents: 11319
diff changeset
   137
    super next:count put:aCharacter
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   138
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   139
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   140
nextPut:aCharacter
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   141
    "append the argument, aCharacter to the stream.
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   142
     Specially tuned for appending to String, ByteArray and Array streams."
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   143
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   144
%{  /* NOCONTEXT */
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   145
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   146
#ifndef NO_PRIM_STREAM
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   147
    REGISTER int pos;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   148
    unsigned ch;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   149
    OBJ coll;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   150
    OBJ p, wL, rL;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   151
    int __readLimit = -1;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   152
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   153
    coll = __INST(collection);
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   154
    p = __INST(position);
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   155
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   156
    if (__isNonNilObject(coll) && __isSmallInteger(p) && __isCharacter(aCharacter)) {
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   157
        pos = __intVal(p);
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   158
        /* make 1-based */
15349
7c2c460c5feb class: CharacterWriteStream
Claus Gittinger <cg@exept.de>
parents: 14607
diff changeset
   159
        pos = pos + 1;
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   160
        wL = __INST(writeLimit);
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   161
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   162
        if ((wL == nil)
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   163
         || (__isSmallInteger(wL) && (pos <= __intVal(wL)))) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   164
            OBJ cls;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   165
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   166
            cls = __qClass(coll);
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   167
            ch = __intVal(__characterVal(aCharacter));
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   168
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   169
            rL = __INST(readLimit);
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   170
            if (__isSmallInteger(rL)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   171
                __readLimit = __intVal(rL);
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   172
            }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   173
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   174
            if (cls == @global(String)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   175
                if (ch > 0xFF) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   176
                    goto resize;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   177
                }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   178
                if (pos <= __stringSize(coll)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   179
                    __StringInstPtr(coll)->s_element[pos-1] = ch;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   180
                    if ((__readLimit >= 0) && (pos >= __readLimit)) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   181
                        __INST(readLimit) = __mkSmallInteger(pos);
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   182
                    }
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   183
                    __INST(position) = __mkSmallInteger(__intVal(__INST(position)) + 1);
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   184
                    RETURN ( aCharacter );
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   185
                }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   186
            } else if (cls == @global(Unicode16String)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   187
                if (ch > 0xFFFF) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   188
                    goto resize;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   189
                }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   190
                if (pos <= __unicode16StringSize(coll)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   191
                     __Unicode16StringInstPtr(coll)->s_element[pos-1] = ch;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   192
                    if ((__readLimit >= 0) && (pos >= __readLimit)) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   193
                        __INST(readLimit) = __mkSmallInteger(pos);
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   194
                    }
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   195
                    __INST(position) = __mkSmallInteger(__intVal(__INST(position)) + 1);
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   196
                    RETURN ( aCharacter );
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   197
                }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   198
            } else if (cls == @global(Unicode32String)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   199
                if ((pos <= __unicode32StringSize(coll))) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   200
                     __Unicode32StringInstPtr(coll)->s_element[pos-1] = ch;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   201
                    if ((__readLimit >= 0) && (pos >= __readLimit)) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   202
                        __INST(readLimit) = __mkSmallInteger(pos);
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   203
                    }
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   204
                    __INST(position) = __mkSmallInteger(__intVal(__INST(position)) + 1);
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   205
                    RETURN ( aCharacter );
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   206
                }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   207
            }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   208
        }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   209
    }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   210
    resize:;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   211
#endif
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   212
%}.
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   213
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   214
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   215
    (writeLimit isNil
15349
7c2c460c5feb class: CharacterWriteStream
Claus Gittinger <cg@exept.de>
parents: 14607
diff changeset
   216
     or:[(position + 1) <= writeLimit]) ifTrue:[
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   217
        currentCharacterSize < aCharacter bitsPerCharacter ifTrue:[
17622
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
   218
            self characterSizeChanged:aCharacter size:1.
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   219
        ].
15358
6b69ebd9785c class: CharacterWriteStream
Claus Gittinger <cg@exept.de>
parents: 15349
diff changeset
   220
        (position >= collection size) ifTrue:[self growCollection].
15349
7c2c460c5feb class: CharacterWriteStream
Claus Gittinger <cg@exept.de>
parents: 14607
diff changeset
   221
        collection at:(position + 1) put:aCharacter.
15358
6b69ebd9785c class: CharacterWriteStream
Claus Gittinger <cg@exept.de>
parents: 15349
diff changeset
   222
        (position >= readLimit) ifTrue:[readLimit := (position + 1)].
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   223
        position := position + 1.
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   224
    ] ifFalse:[
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   225
        WriteError raiseErrorString:'write beyond writeLimit'
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   226
    ].
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   227
    ^ aCharacter
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   228
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   229
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   230
nextPutAll:aCollection
11319
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   231
    "append aCollection to the receiver.
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   232
     Redefined to convert to a string of the needed charcter size."
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   233
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   234
    aCollection bitsPerCharacter > currentCharacterSize ifTrue:[
17622
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
   235
        self characterSizeChanged:aCollection size:aCollection size.
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   236
    ].
12133
d2d08ea77b8c changed:
Claus Gittinger <cg@exept.de>
parents: 11319
diff changeset
   237
    super nextPutAll:aCollection
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   238
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   239
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   240
nextPutAll:aCollection startingAt:start to:stop
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   241
    aCollection bitsPerCharacter > currentCharacterSize ifTrue:[
17622
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
   242
        self characterSizeChanged:aCollection size:stop-start+1.
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   243
    ].
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   244
    ^ super nextPutAll:aCollection startingAt:start to:stop
11319
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   245
!
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   246
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   247
nextPutAllUnicode:aCollection
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   248
    ^ self nextPutAll:aCollection
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   249
!
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   250
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   251
nextPutUnicode:aCharacter
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   252
    ^ self nextPut:aCharacter
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   253
! !
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   254
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   255
!CharacterWriteStream class methodsFor:'documentation'!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   256
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   257
version
17622
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
   258
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterWriteStream.st,v 1.13 2015-03-14 21:31:57 stefan Exp $'
12133
d2d08ea77b8c changed:
Claus Gittinger <cg@exept.de>
parents: 11319
diff changeset
   259
!
d2d08ea77b8c changed:
Claus Gittinger <cg@exept.de>
parents: 11319
diff changeset
   260
d2d08ea77b8c changed:
Claus Gittinger <cg@exept.de>
parents: 11319
diff changeset
   261
version_CVS
17622
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
   262
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterWriteStream.st,v 1.13 2015-03-14 21:31:57 stefan Exp $'
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   263
! !
14607
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
   264