[squeak-dev] The Trunk: Collections-ul.932.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Mar 31 00:18:41 UTC 2021


Levente Uzonyi uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-ul.932.mcz

==================== Summary ====================

Name: Collections-ul.932
Author: ul
Time: 31 March 2021, 2:12:26.200489 am
UUID: a61726a6-a12e-4074-a25f-8220699d3c06
Ancestors: Collections-dtl.931

- use #grownBy: in WriteStream >> #growTo: to grow the collection because that works for OrderedCollections too.
- do not add 10 to the argument passed to WriteStream >> #growTo:. It will already increase its argument by at least 20.

=============== Diff against Collections-dtl.931 ===============

Item was changed:
  ----- Method: LimitedWriteStream>>nextPutAll: (in category 'writing') -----
  nextPutAll: aCollection
  
  	| newEnd |
  	collection class == aCollection class ifFalse:
  		[^ super nextPutAll: aCollection ].
  
  	newEnd := position + aCollection size.
  	newEnd > limit ifTrue: [
  		super nextPutAll: (aCollection copyFrom: 1 to: (limit - position max: 0)).
  		limitBlock value.
  		^aCollection
  	].
  	newEnd > writeLimit ifTrue: [
+ 		self growTo: newEnd
- 		self growTo: newEnd + 10
  	].
  
  	collection replaceFrom: position+1 to: newEnd  with: aCollection startingAt: 1.
  	position := newEnd.
  	^aCollection!

Item was changed:
  ----- Method: TextStream>>nextPutAll: (in category 'writing') -----
  nextPutAll: aCollection 
  	"Optimized access to get around Text at:Put: overhead"
  	| n |
  	n := aCollection size.
  	position + n > writeLimit
  		ifTrue:
+ 			[self growTo: position + n].
- 			[self growTo: position + n + 10].
  	collection 
  		replaceFrom: position+1
  		to: position + n
  		with: aCollection
  		startingAt: 1.
  	position := position + n.
  	^aCollection!

Item was changed:
  ----- Method: WriteStream>><< (in category 'printing') -----
  << aCollection
  	"we want a readable version of nextPutAll however it may be difficult to fully recreate nextPutAll:
  	for all the different types of stream. Rather then simply send to nextPutAll:
  	we handle the String (or ByteArray) argument
  	as fast as possible - the rest we delegate to putOn: This means that we handle single characters and bytes 
  	whereas nextPutAll: is only for sequencable collections.
  	.
  	Note this may not work in every case that nextPutAll: does subject to extensive testing, 
  	but it should work in the important cases"
  
  	| newEnd |
  	collection class == aCollection class ifFalse:
  		[ aCollection putOn: self. ^ self ].
  
  	newEnd := position + aCollection size.
  	newEnd > writeLimit ifTrue:
+ 		[self growTo: newEnd].
- 		[self growTo: newEnd + 10].
  
  	collection replaceFrom: position+1 to: newEnd  with: aCollection startingAt: 1.
  	position := newEnd.
  
  !

Item was changed:
  ----- Method: WriteStream>>growTo: (in category 'private') -----
  growTo: anInteger
+ 	" anInteger is the required minimal new size of the collection "
  
+ 	| oldSize newSize |
-    " anInteger is the required minimal new size of the collection "
- 	| oldSize grownCollection newSize |
  	oldSize := collection size.
+ 	newSize := anInteger + (oldSize // 4 max: 20).
+ 	collection := collection grownBy: newSize - oldSize.
-      newSize := anInteger + (oldSize // 4 max: 20).
- 	grownCollection := collection class new: newSize.
- 	collection := grownCollection replaceFrom: 1 to: oldSize with: collection startingAt: 1.
  	writeLimit := collection size.
  !

Item was changed:
  ----- Method: WriteStream>>next:putAll:startingAt: (in category 'accessing') -----
  next: anInteger putAll: aCollection startingAt: startIndex
  	"Store the next anInteger elements from the given collection."
  
  	| newEnd |
  	anInteger > 0 ifFalse: [ ^aCollection ].
  	(collection class == aCollection class
  		or: [ collection isString 
  			and: [ aCollection isString
  			and: [ collection class format = aCollection class format ] ] ]) "Let Strings with the same field size as collection take the quick route too."
  		ifFalse: [ ^super next: anInteger putAll: aCollection startingAt: startIndex ].
  
  	newEnd := position + anInteger.
  	newEnd > writeLimit ifTrue:
+ 		[self growTo: newEnd].
- 		[self growTo: newEnd + 10].
  
  	collection replaceFrom: position+1 to: newEnd  with: aCollection startingAt: startIndex.
  	position := newEnd.
  
  	^aCollection!

Item was changed:
  ----- Method: WriteStream>>nextPutAll: (in category 'accessing') -----
  nextPutAll: aCollection
  
  	| newEnd |
  	(collection class == aCollection class
  		or: [ collection class isBits
  			and: [ aCollection isString
  			and: [ collection class format = aCollection class format ] ] ]) "Let Strings with the same field size as collection take the quick route too."
  		ifFalse: [ ^ super nextPutAll: aCollection ].
  
  	newEnd := position + aCollection size.
  	newEnd > writeLimit ifTrue:
+ 		[self growTo: newEnd].
- 		[self growTo: newEnd + 10].
  
  	collection replaceFrom: position+1 to: newEnd  with: aCollection startingAt: 1.
  	position := newEnd.
  	^aCollection!



More information about the Squeak-dev mailing list