CharacterWriteStream.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 22 Sep 2015 16:28:42 +0100
branchjv
changeset 18759 c1217211909c
parent 18617 fbfd2d411738
child 18800 02724cc719b6
permissions -rw-r--r--
Changed identification strings to contain jv-branch ...to make explicit that this distribution is not the official one used by eXept and therefore that eXept is not to be blamed in case of any problem.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18282
bf9c9049c781 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18265
diff changeset
     1
"{ Encoding: utf8 }"
bf9c9049c781 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18265
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
18265
e2f8e48223af class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 17622
diff changeset
    75
!CharacterWriteStream class methodsFor:'instance creation'!
e2f8e48223af class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 17622
diff changeset
    76
e2f8e48223af class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 17622
diff changeset
    77
new
e2f8e48223af class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 17622
diff changeset
    78
    "I know, that I operate on strings"
e2f8e48223af class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 17622
diff changeset
    79
18282
bf9c9049c781 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18265
diff changeset
    80
    ^ self on:(String uninitializedNew:10)
18265
e2f8e48223af class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 17622
diff changeset
    81
!
e2f8e48223af class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 17622
diff changeset
    82
e2f8e48223af class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 17622
diff changeset
    83
new:count
e2f8e48223af class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 17622
diff changeset
    84
    "I know, that I operate on strings"
e2f8e48223af class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 17622
diff changeset
    85
18282
bf9c9049c781 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18265
diff changeset
    86
    ^ self on:(String uninitializedNew:count)
18265
e2f8e48223af class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 17622
diff changeset
    87
! !
e2f8e48223af class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 17622
diff changeset
    88
14607
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    89
!CharacterWriteStream methodsFor:'accessing'!
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    90
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    91
reset
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    92
    "reset the stream; write anew.
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    93
     See the comment in WriteStream>>contents"
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    94
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    95
    collection := String new:collection size.
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    96
    currentCharacterSize := collection bitsPerCharacter.
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    97
    super resetPosition.
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    98
! !
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
    99
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   100
!CharacterWriteStream methodsFor:'private'!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   101
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   102
characterSizeChangedTo:newCharacterSize size:additionalSize
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   103
    "change aCollection to fit the size of newCharacterSize"
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   104
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   105
    |sz newSz|
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   106
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   107
    currentCharacterSize < newCharacterSize ifTrue:[
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   108
        newSz := sz := collection size.
17622
553ee52df434 class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 15358
diff changeset
   109
        position + additionalSize >= sz ifTrue:[
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   110
            newSz := newSz + additionalSize + 100.          "add some more space, maybe more will be added"
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   111
        ].
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   112
        collection := ((CharacterArray speciesForCharacterSize:newCharacterSize) new:newSz) 
18613
cef8d2d9f29f class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18598
diff changeset
   113
                        replaceFrom:1 to:position with:collection startingAt:1.
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   114
        currentCharacterSize := collection bitsPerCharacter.
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   115
    ].
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
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   118
!CharacterWriteStream methodsFor:'private-accessing'!
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
on:aCollection
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   121
    currentCharacterSize := aCollection bitsPerCharacter.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   122
    ^ super on:aCollection.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   123
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   124
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   125
on:aCollection from:start to:stop
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   126
    currentCharacterSize := aCollection bitsPerCharacter.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   127
    ^ super on:aCollection from:start to:stop.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   128
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   129
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   130
with:aCollection
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   131
    currentCharacterSize := aCollection bitsPerCharacter.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   132
    ^ super with:aCollection.
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
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   135
!CharacterWriteStream methodsFor:'writing'!
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   136
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   137
next:count put:aCharacter
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   138
    "append anObject count times to the receiver.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   139
     Redefined to avoid count grows of the underlying collection -
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   140
     instead a single grow on the final size is performed."
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   141
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   142
    |needCharacterSize|
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   143
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   144
    needCharacterSize := aCharacter characterSize.
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   145
    needCharacterSize > currentCharacterSize ifTrue:[
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   146
        self characterSizeChangedTo:needCharacterSize size:count.
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   147
    ].
12133
d2d08ea77b8c changed:
Claus Gittinger <cg@exept.de>
parents: 11319
diff changeset
   148
    super next:count put:aCharacter
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   149
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   150
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   151
nextPut:aCharacter
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   152
    "append the argument, aCharacter to the stream.
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   153
     Specially tuned for appending to String, Unicode16String and Unicode32String streams."
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   154
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   155
%{  /* NOCONTEXT */
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   156
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   157
#ifndef NO_PRIM_STREAM
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   158
    OBJ coll = __INST(collection);
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   159
    OBJ p = __INST(position);
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   160
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   161
    if (__isNonNilObject(coll) && __isSmallInteger(p) && __isCharacter(aCharacter)) {
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   162
        REGISTER int pos = __intVal(p) + 1;      /* make 1-based */
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   163
        OBJ wL = __INST(writeLimit);
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   164
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   165
        if ((wL == nil)
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   166
         || (__isSmallInteger(wL) && (pos <= __intVal(wL)))) {
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   167
            OBJ cls = __qClass(coll);
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   168
            unsigned ch = __intVal(__characterVal(aCharacter));
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   169
            OBJ rL = __INST(readLimit);
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   170
            int __readLimit = -1;
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   171
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   172
            if (__isSmallInteger(rL)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   173
                __readLimit = __intVal(rL);
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   174
            }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   175
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   176
            if (cls == @global(String)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   177
                if (ch > 0xFF) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   178
                    goto resize;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   179
                }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   180
                if (pos <= __stringSize(coll)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   181
                    __StringInstPtr(coll)->s_element[pos-1] = ch;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   182
                    if ((__readLimit >= 0) && (pos >= __readLimit)) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   183
                        __INST(readLimit) = __mkSmallInteger(pos);
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   184
                    }
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   185
                    __INST(position) = __mkSmallInteger(__intVal(__INST(position)) + 1);
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   186
                    RETURN ( aCharacter );
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   187
                }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   188
            } else if (cls == @global(Unicode16String)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   189
                if (ch > 0xFFFF) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   190
                    goto resize;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   191
                }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   192
                if (pos <= __unicode16StringSize(coll)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   193
                     __Unicode16StringInstPtr(coll)->s_element[pos-1] = ch;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   194
                    if ((__readLimit >= 0) && (pos >= __readLimit)) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   195
                        __INST(readLimit) = __mkSmallInteger(pos);
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   196
                    }
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   197
                    __INST(position) = __mkSmallInteger(__intVal(__INST(position)) + 1);
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   198
                    RETURN ( aCharacter );
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   199
                }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   200
            } else if (cls == @global(Unicode32String)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   201
                if ((pos <= __unicode32StringSize(coll))) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   202
                     __Unicode32StringInstPtr(coll)->s_element[pos-1] = ch;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   203
                    if ((__readLimit >= 0) && (pos >= __readLimit)) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   204
                        __INST(readLimit) = __mkSmallInteger(pos);
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   205
                    }
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   206
                    __INST(position) = __mkSmallInteger(__intVal(__INST(position)) + 1);
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   207
                    RETURN ( aCharacter );
8298
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
        }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   211
    }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   212
    resize:;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   213
#endif
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   214
%}.
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   215
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   216
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   217
    (writeLimit isNil
15349
7c2c460c5feb class: CharacterWriteStream
Claus Gittinger <cg@exept.de>
parents: 14607
diff changeset
   218
     or:[(position + 1) <= writeLimit]) ifTrue:[
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   219
        |needCharacterSize|
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   220
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   221
        needCharacterSize := aCharacter characterSize.
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   222
        needCharacterSize > currentCharacterSize ifTrue:[
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   223
            self characterSizeChangedTo:needCharacterSize size:1.
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   224
        ] ifFalse:[
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   225
            (position >= collection size) ifTrue:[self growCollection].
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   226
        ].
15349
7c2c460c5feb class: CharacterWriteStream
Claus Gittinger <cg@exept.de>
parents: 14607
diff changeset
   227
        collection at:(position + 1) put:aCharacter.
15358
6b69ebd9785c class: CharacterWriteStream
Claus Gittinger <cg@exept.de>
parents: 15349
diff changeset
   228
        (position >= readLimit) ifTrue:[readLimit := (position + 1)].
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   229
        position := position + 1.
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   230
    ] ifFalse:[
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   231
        WriteError raiseErrorString:'write beyond writeLimit'
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   232
    ].
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   233
    ^ aCharacter
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   234
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   235
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   236
nextPutAll:aCollection
11319
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   237
    "append aCollection to the receiver.
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   238
     Redefined to convert to a string of the needed charcter size."
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   239
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   240
    |needCharacterSize|
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   241
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   242
    needCharacterSize := aCollection characterSize.
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   243
    needCharacterSize > currentCharacterSize ifTrue:[
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   244
        self characterSizeChangedTo:needCharacterSize size:aCollection size.
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   245
    ].
12133
d2d08ea77b8c changed:
Claus Gittinger <cg@exept.de>
parents: 11319
diff changeset
   246
    super nextPutAll:aCollection
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   247
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   248
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   249
nextPutAll:aCollection startingAt:start to:stop
18598
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   250
    |needCharacterSize|
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   251
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   252
    needCharacterSize := aCollection characterSize.
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   253
    needCharacterSize > currentCharacterSize ifTrue:[
913ebad954df class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18590
diff changeset
   254
        self characterSizeChangedTo:needCharacterSize size:stop-start+1.
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   255
    ].
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   256
    ^ super nextPutAll:aCollection startingAt:start to:stop
11319
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   257
!
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   258
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   259
nextPutAllUnicode:aCollection
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   260
    ^ self nextPutAll:aCollection
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   261
!
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   262
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   263
nextPutUnicode:aCharacter
18aa6ff91d1e Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 10846
diff changeset
   264
    ^ self nextPut:aCharacter
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   265
! !
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   266
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   267
!CharacterWriteStream class methodsFor:'documentation'!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   268
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   269
version
18590
7528bf27e91c class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18282
diff changeset
   270
    ^ '$Header$'
12133
d2d08ea77b8c changed:
Claus Gittinger <cg@exept.de>
parents: 11319
diff changeset
   271
!
d2d08ea77b8c changed:
Claus Gittinger <cg@exept.de>
parents: 11319
diff changeset
   272
d2d08ea77b8c changed:
Claus Gittinger <cg@exept.de>
parents: 11319
diff changeset
   273
version_CVS
18590
7528bf27e91c class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 18282
diff changeset
   274
    ^ '$Header$'
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   275
! !
14607
139c669b52ba class: CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 12133
diff changeset
   276