Base64Coder.st
changeset 1111 2a64f0fe418a
parent 1084 9d51967037ad
child 1122 9f6405dc3319
equal deleted inserted replaced
1110:0876a3d30fd2 1111:2a64f0fe418a
     1 "{ Package: 'stx:libbasic2' }"
     1 "{ Package: 'stx:libbasic2' }"
     2 
     2 
     3 ObjectCoder subclass:#Base64Coder
     3 ObjectCoder subclass:#Base64Coder
     4 	instanceVariableNames:'buffer bits charCount atEnd'
     4 	instanceVariableNames:'buffer bits charCount peekByte atEnd'
     5 	classVariableNames:'Base64Mapping Base64ReverseMapping'
     5 	classVariableNames:'Base64Mapping Base64ReverseMapping'
     6 	poolDictionaries:''
     6 	poolDictionaries:''
     7 	category:'System-Storage'
     7 	category:'System-Storage'
     8 !
     8 !
     9 
     9 
    85 new
    85 new
    86    ^ self basicNew initialize
    86    ^ self basicNew initialize
    87 ! !
    87 ! !
    88 
    88 
    89 !Base64Coder methodsFor:'decoding'!
    89 !Base64Coder methodsFor:'decoding'!
       
    90 
       
    91 basicNext
       
    92     "answer the next decoded byte"
       
    93 
       
    94     |b|
       
    95 
       
    96     bits == 0 ifTrue:[
       
    97         self fillBuffer.
       
    98         bits == 0 ifTrue:[
       
    99             ^ stream class endOfStreamSignal raiseRequest.
       
   100         ]
       
   101     ].
       
   102 
       
   103     b := (buffer bitShift:(8 - bits)) bitAnd:16rFF.
       
   104     bits := bits - 8.
       
   105 
       
   106     ^ b.
       
   107 !
    90 
   108 
    91 fillBuffer
   109 fillBuffer
    92     "fill buffer with next 4 characters each representing 6 bits"
   110     "fill buffer with next 4 characters each representing 6 bits"
    93 
   111 
    94     |b shift|
   112     |b shift|
   129 next
   147 next
   130     "answer the next decoded byte"
   148     "answer the next decoded byte"
   131 
   149 
   132     |b|
   150     |b|
   133 
   151 
   134     bits == 0 ifTrue:[
   152     peekByte notNil ifTrue:[
   135         self fillBuffer.
   153         b := peekByte.
   136         bits == 0 ifTrue:[
   154         peekByte := nil.
   137             ^ stream class endOfStreamSignal raiseRequest.
   155         ^ b
   138         ]
   156     ].
   139     ].
   157     ^ self basicNext.
   140 
   158 !
   141     b := (buffer bitShift:(8 - bits)) bitAnd:16rFF.
   159 
   142     bits := bits - 8.
   160 peek
   143 
   161     "answer the next decoded byte"
   144     ^ b.
   162 
       
   163     peekByte isNil ifTrue:[
       
   164         peekByte := self basicNext.
       
   165     ].
       
   166     ^ peekByte
   145 ! !
   167 ! !
   146 
   168 
   147 !Base64Coder methodsFor:'encoding'!
   169 !Base64Coder methodsFor:'encoding'!
   148 
   170 
   149 encodeByteArray:aByteArray with:aParameter
   171 encodeByteArray:aByteArray with:aParameter
   165 encodeString:aString with:aParameter
   187 encodeString:aString with:aParameter
   166 
   188 
   167     ^ self nextPutAll:aString asByteArray; flush.
   189     ^ self nextPutAll:aString asByteArray; flush.
   168 
   190 
   169     "
   191     "
   170       self encodingOf:'hello world'
   192       |encoded decoded decoder|
       
   193 
       
   194       encoded := self encodingOf:'hello world'.  
       
   195       decoded := #[] writeStream.
       
   196       decoder := Base64Coder on:encoded readStream.
       
   197       [decoder atEnd] whileFalse:[
       
   198           decoded nextPut:(decoder next).
       
   199       ].
       
   200       decoded := decoded contents.
       
   201       decoded asString.    
   171     "
   202     "
   172 !
   203 !
   173 
   204 
   174 nextPut:aByte
   205 nextPut:aByte
   175     "encode aByte on the output stream"
   206     "encode aByte on the output stream"
   264         atEnd ifTrue:[^ true].
   295         atEnd ifTrue:[^ true].
   265         self fillBuffer.
   296         self fillBuffer.
   266         bits == 0 ifTrue:[^ true].
   297         bits == 0 ifTrue:[^ true].
   267     ].
   298     ].
   268     ^ false.
   299     ^ false.
       
   300 !
       
   301 
       
   302 binary
       
   303     ^ self
       
   304 !
       
   305 
       
   306 isStream
       
   307     ^ true
   269 ! !
   308 ! !
   270 
   309 
   271 !Base64Coder methodsFor:'stream compatibility'!
   310 !Base64Coder methodsFor:'stream compatibility'!
   272 
   311 
   273 upToEnd
   312 upToEnd
   285 ! !
   324 ! !
   286 
   325 
   287 !Base64Coder class methodsFor:'documentation'!
   326 !Base64Coder class methodsFor:'documentation'!
   288 
   327 
   289 version
   328 version
   290     ^ '$Header: /cvs/stx/stx/libbasic2/Base64Coder.st,v 1.4 2002-09-05 13:23:53 stefan Exp $'
   329     ^ '$Header: /cvs/stx/stx/libbasic2/Base64Coder.st,v 1.5 2002-11-04 14:38:30 cg Exp $'
   291 ! !
   330 ! !
       
   331 
   292 Base64Coder initialize!
   332 Base64Coder initialize!