CharacterWriteStream.st
author Claus Gittinger <cg@exept.de>
Fri, 08 Jul 2005 19:15:03 +0200
changeset 8913 b9498d27a554
parent 8321 eb23a697cd98
child 10280 acca50cc0f17
permissions -rw-r--r--
64bit; mkSmallInteger
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8299
7930ef8d5298 Add CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 8298
diff changeset
     1
"{ Package: 'stx:libbasic' }"
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     2
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     3
WriteStream subclass:#CharacterWriteStream
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'currentCharacterSize'
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     7
	category:'Streams'
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     8
!
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     9
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    10
!CharacterWriteStream class methodsFor:'documentation'!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    11
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    12
documentation
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    13
"
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    14
    This is a WriteStream, which automagically changes the underlying collection,
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    15
    if a character does fit into the current collectuin
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    16
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    17
    String -> Unicode16String -> Unicode32Sting
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    18
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    19
    [author:]
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    20
        Stefan Vogel (stefan@zwerg)
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    21
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    22
    [instance variables:]
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    23
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    24
    [class variables:]
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    25
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    26
    [see also:]
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    27
     String Unicode16String Unicode32Sting
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    28
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    29
"
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    30
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    31
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    32
examples
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    33
"
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    34
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    35
                                                                [exBegin]
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    36
    |stream|
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    37
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    38
    stream := CharacterWriteStream on:(String new:32).
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    39
    stream nextPutAll:'abc'.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    40
    stream nextPut:(Character value:16r2c00).
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    41
    stream contents inspect
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    42
                                                                [exEnd]
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    43
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    44
"
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
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    47
!CharacterWriteStream methodsFor:'private'!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    48
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    49
characterSizeChanged:aCharacterOrString
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    50
    "change aCollection to fit the size of aCharacter"
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    51
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    52
    |sz newSz bitsPerCharacter|
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    53
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    54
    bitsPerCharacter := aCharacterOrString bitsPerCharacter. 
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    55
    currentCharacterSize < bitsPerCharacter ifTrue:[
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    56
        sz := collection size.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    57
        (position + 1 - ZeroPosition) > sz ifTrue:[
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    58
            newSz := sz + 1.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    59
        ] ifFalse:[
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    60
            newSz := sz.
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
        collection := (aCharacterOrString stringSpecies new:newSz) 
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    63
                        replaceFrom:1 to:sz with:collection startingAt:1.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    64
        currentCharacterSize := bitsPerCharacter.
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
! !
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    67
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    68
!CharacterWriteStream methodsFor:'private-accessing'!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    69
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    70
on:aCollection
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
    currentCharacterSize := aCollection bitsPerCharacter.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    73
    ^ super on:aCollection.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    74
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    75
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    76
on:aCollection from:start to:stop
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    77
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    78
    currentCharacterSize := aCollection bitsPerCharacter.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    79
    ^ super on:aCollection from:start to:stop.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    80
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    81
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    82
with:aCollection
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    83
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    84
    currentCharacterSize := aCollection bitsPerCharacter.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    85
    ^ super with:aCollection.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    86
! !
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    87
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
!CharacterWriteStream methodsFor:'writing'!
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    89
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    90
next:count put:aCharacter
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    91
    "append anObject count times to the receiver.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    92
     Redefined to avoid count grows of the underlying collection -
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    93
     instead a single grow on the final size is performed."
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    94
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    95
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    96
    aCharacter bitsPerCharacter > currentCharacterSize ifTrue:[
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    97
        self characterSizeChanged:aCharacter.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    98
    ].
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
    99
    ^ super next:count put:aCharacter
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
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   102
nextPut:aCharacter
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   103
    "append the argument, aCharacter to the stream.
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
     Specially tuned for appending to String, ByteArray and Array streams."
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
%{  /* NOCONTEXT */
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   107
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   108
#ifndef NO_PRIM_STREAM
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   109
    REGISTER int pos;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   110
    unsigned ch;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   111
    OBJ coll;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   112
    OBJ p, wL, rL;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   113
    int __readLimit = -1;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   114
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   115
    coll = __INST(collection);
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   116
    p = __INST(position);
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   117
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   118
    if (__isNonNilObject(coll) && __isSmallInteger(p) && __isCharacter(aCharacter)) {
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   119
        pos = __intVal(p);
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   120
        /* make 1-based */
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   121
        pos = pos + 1 - __intVal( @global(PositionableStream:ZeroPosition));
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   122
        wL = __INST(writeLimit);
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   123
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   124
        if ((wL == nil)
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   125
         || (__isSmallInteger(wL) && (pos <= __intVal(wL)))) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
            OBJ cls;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
            cls = __qClass(coll);
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   129
            ch = __intVal(__characterVal(aCharacter));
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   130
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
            rL = __INST(readLimit);
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   132
            if (__isSmallInteger(rL)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   133
                __readLimit = __intVal(rL);
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   134
            }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   135
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   136
            if (cls == @global(String)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   137
                if (ch > 0xFF) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   138
                    goto resize;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   139
                }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   140
                if (pos <= __stringSize(coll)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   141
                    __StringInstPtr(coll)->s_element[pos-1] = ch;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   142
                    if ((__readLimit >= 0) && (pos >= __readLimit)) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   143
                        __INST(readLimit) = __mkSmallInteger(pos);
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   144
                    }
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   145
                    __INST(position) = __mkSmallInteger(__intVal(__INST(position)) + 1);
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   146
                    RETURN ( aCharacter );
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   147
                }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   148
            } else if (cls == @global(Unicode16String)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   149
                if (ch > 0xFFFF) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   150
                    goto resize;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   151
                }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   152
                if (pos <= __unicode16StringSize(coll)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   153
                     __Unicode16StringInstPtr(coll)->s_element[pos-1] = ch;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   154
                    if ((__readLimit >= 0) && (pos >= __readLimit)) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   155
                        __INST(readLimit) = __mkSmallInteger(pos);
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   156
                    }
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   157
                    __INST(position) = __mkSmallInteger(__intVal(__INST(position)) + 1);
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   158
                    RETURN ( aCharacter );
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   159
                }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   160
            } else if (cls == @global(Unicode32String)) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   161
                if ((pos <= __unicode32StringSize(coll))) {
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   162
                     __Unicode32StringInstPtr(coll)->s_element[pos-1] = ch;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   163
                    if ((__readLimit >= 0) && (pos >= __readLimit)) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   164
                        __INST(readLimit) = __mkSmallInteger(pos);
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   165
                    }
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   166
                    __INST(position) = __mkSmallInteger(__intVal(__INST(position)) + 1);
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   167
                    RETURN ( 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
            }
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   170
        }
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
    resize:;
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   173
#endif
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
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   176
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   177
    (writeLimit isNil
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   178
     or:[(position + 1 - ZeroPosition) <= writeLimit]) ifTrue:[
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   179
        currentCharacterSize < aCharacter bitsPerCharacter ifTrue:[
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   180
            self characterSizeChanged:aCharacter
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   181
        ].
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   182
        ((position + 1 - ZeroPosition) > collection size) ifTrue:[self growCollection].
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   183
        collection at:(position + 1 - ZeroPosition) put:aCharacter.
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   184
        ((position + 1 - ZeroPosition) > readLimit) ifTrue:[readLimit := (position + 1 - ZeroPosition)].
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   185
        position := position + 1.
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   186
    ] ifFalse:[
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   187
        WriteError raiseErrorString:'write beyond writeLimit'
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   188
    ].
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   189
    ^ aCharacter
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   190
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   191
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   192
nextPutAll:aCollection
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   193
    "append anObject count times to the receiver.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   194
     Redefined to avoid count grows of the underlying collection -
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   195
     instead a single grow on the final size is performed."
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   196
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   197
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   198
    aCollection bitsPerCharacter > currentCharacterSize ifTrue:[
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   199
        self characterSizeChanged:aCollection.
8298
89c57baf93c5 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   200
    ].
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   201
    ^ super nextPutAll:aCollection
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   202
!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   203
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   204
nextPutAll:aCollection startingAt:start to:stop
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   205
    "append anObject count times to the receiver.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   206
     Redefined to avoid count grows of the underlying collection -
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   207
     instead a single grow on the final size is performed."
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   208
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   209
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   210
    aCollection bitsPerCharacter > currentCharacterSize ifTrue:[
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   211
        self characterSizeChanged:aCollection.
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   212
    ].
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   213
    ^ super nextPutAll:aCollection startingAt:start to:stop
8298
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
!CharacterWriteStream class methodsFor:'documentation'!
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   217
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   218
version
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8321
diff changeset
   219
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterWriteStream.st,v 1.4 2005-07-08 17:15:01 cg Exp $'
8321
eb23a697cd98 Working version
Stefan Vogel <sv@exept.de>
parents: 8299
diff changeset
   220
! !