Status: Accepted
Owner: [email protected]
Labels: Milestone-1.3

New issue 3663 by [email protected]: XMLWriter and MultiByteFileStream
http://code.google.com/p/pharo/issues/detail?id=3663

Name: Collections-ul.422
Author: ul
Time: 31 January 2011, 2:02:00.387 am
UUID: 89c6854c-b6d1-1646-a22b-bbc47ce7522f
Ancestors: Collections-ul.421

Introduced Stream >> #basicNext:putAll:startingAt: which will be used by MultiByteFileStream to fix http://bugs.squeak.org/view.php?id=7603 .

=============== Diff against Collections-ul.421 ===============

Item was added:
+ ----- Method: Stream>>basicNext:putAll:startingAt: (in category 'accessing') -----
+ basicNext: anInteger putAll: aCollection startingAt: startIndex
+
+       ^self next: anInteger putAll: aCollection startingAt: startIndex
+ !


A fix for http://bugs.squeak.org/view.php?id=7603 . Requires Collections-ul.422.

Added TextConverter >> #next:putAll:startingAt:toStream: which is used by MultiByteFileStream and MultiByteBinaryOrTextStream to properly implement #next:putAll:startingAt:.

=============== Diff against Multilingual-ul.133 ===============

Item was added:
+ ----- Method: MultiByteBinaryOrTextStream>>basicNext:putAll:startingAt: (in category 'private basic') -----
+ basicNext: anInteger putAll: aCollection startingAt: startIndex
+
+       ^super next: anInteger putAll: aCollection startingAt: startIndex!

Item was added:
+ ----- Method: MultiByteBinaryOrTextStream>>next:putAll:startingAt: (in category 'public') -----
+ next: anInteger putAll: aCollection startingAt: startIndex
+
+       (self isBinary or: [ aCollection class == ByteArray ]) ifTrue: [
+ ^super next: anInteger putAll: aCollection startingAt: startIndex ]. + ^self converter next: anInteger putAll: aCollection startingAt: startIndex toStream: self
+ !

Item was added:
+ ----- Method: MultiByteFileStream>>basicNext:putAll:startingAt: (in category 'private basic') -----
+ basicNext: anInteger putAll: aCollection startingAt: startIndex
+
+       ^super next: anInteger putAll: aCollection startingAt: startIndex!

Item was added:
+ ----- Method: MultiByteFileStream>>next:putAll:startingAt: (in category 'public') -----
+ next: anInteger putAll: aCollection startingAt: startIndex
+
+       (self isBinary or: [ aCollection class == ByteArray ]) ifTrue: [
+ ^super next: anInteger putAll: aCollection startingAt: startIndex ]. + ^converter next: anInteger putAll: aCollection startingAt: startIndex toStream: self!

Item was changed:
 ----- Method: MultiByteFileStream>>nextPutAll: (in category 'public') -----
 nextPutAll: aCollection

       (self isBinary or: [aCollection class == ByteArray]) ifTrue: [
               ^ super nextPutAll: aCollection.
       ].
+       ^converter nextPutAll: aCollection toStream: self!
-       converter nextPutAll: aCollection toStream: self.
-       ^aCollection!

Item was added:
+ ----- Method: TextConverter>>next:putAll:startingAt:toStream: (in category 'conversion') -----
+ next: anInteger putAll: aString startingAt: startIndex toStream: aStream
+       "Handle fast conversion if ByteString"
+
+       | lastIndex nextIndex |
+       aString class == ByteString ifFalse: [
+               startIndex to: startIndex + anInteger - 1 do: [ :index |
+ self nextPut: (aString at: index) toStream: aStream ].
+               ^aString ].
+       aStream isBinary ifTrue: [
+ aStream basicNext: anInteger putAll: aString startingAt: startIndex.
+               ^aString ].
+       lastIndex := startIndex.
+       [ (nextIndex := ByteString
+               findFirstInString: aString
+               inSet: latin1Map
+ startingAt: lastIndex) = 0 or: [ nextIndex > anInteger ] ] whileFalse: [
+                       aStream
+ basicNext: nextIndex - lastIndex putAll: aString startingAt: lastIndex; + basicNextPutAll: (latin1Encodings at: (aString byteAt: nextIndex) + 1).
+                       lastIndex := nextIndex + 1 ].
+ aStream basicNext: anInteger - lastIndex + 1 putAll: aString startingAt: lastIndex.
+       ^aString!

Item was changed:
----- Method: TextConverter>>nextPutAll:toStream: (in category 'conversion') -----
 nextPutAll: aString toStream: aStream
       "Handle fast conversion if ByteString"

+ ^self next: aString size putAll: aString startingAt: 1 toStream: aStream!
-       | lastIndex nextIndex |
-       aString class == ByteString ifFalse: [
-               aString do: [:char | self nextPut: char toStream: aStream].
-               ^self].
-
-       aStream isBinary ifTrue: [
-               aStream basicNextPutAll: aString.
-               ^self].
-       lastIndex := 1.
- [nextIndex := ByteString findFirstInString: aString inSet: latin1Map startingAt: lastIndex.
-       nextIndex = 0] whileFalse:
- [aStream next: nextIndex-lastIndex putAll: aString startingAt: lastIndex. - aStream basicNextPutAll: (latin1Encodings at: (aString byteAt: nextIndex)+1).
-               lastIndex := nextIndex + 1].
- aStream next: aString size-lastIndex+1 putAll: aString startingAt: lastIndex.
-       ^self
- !


Reply via email to