[squeak-dev] The Trunk: Collections-eem.393.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Oct 21 16:48:57 UTC 2010


Eliot Miranda uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-eem.393.mcz

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

Name: Collections-eem.393
Author: eem
Time: 21 October 2010, 9:48:35.262 am
UUID: af89302e-d619-4f64-bbd6-0516acf3c155
Ancestors: Collections-ul.392

WriteStream>ensureACr useful for writing to the transcript.
Add SparseLargeArray (for VM profiler).  Generally useful though.

=============== Diff against Collections-ul.392 ===============

Item was added:
+ SparseLargeTable variableSubclass: #SparseLargeArray
+ 	instanceVariableNames: 'arrayClass'
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'Collections-Arrayed'!
+ 
+ !SparseLargeArray commentStamp: '<historical>' prior: 0!
+ A version of SparseLargeTable that does not populate its bins until a value other than the default is stored.!

Item was added:
+ ----- Method: SparseLargeArray>>analyzeSpaceSaving (in category 'private') -----
+ analyzeSpaceSaving
+ 
+ 	| elems tablesTotal nonNilTables lastPage lastChunkSize |
+ 	elems := 0.
+ 	tablesTotal := self basicSize.
+ 	nonNilTables := 0.
+ 	lastPage := self basicAt: self basicSize.
+ 	(lastChunkSize := size \\ chunkSize) = 0 ifTrue:
+ 		[lastChunkSize := chunkSize].
+ 	1 to: self basicSize do:
+ 		[:i | | page |
+ 		(page := self basicAt: i) ifNotNil:
+ 			[nonNilTables := nonNilTables + 1.
+ 			 1 to: (page == lastPage ifTrue: [lastChunkSize] ifFalse: [chunkSize]) do:
+ 				[:j|
+ 				(page at: j) ~= defaultValue ifTrue:
+ 					[elems := elems + 1]]]].
+ 
+ 	^String streamContents:
+ 		[:strm |
+ 		strm nextPutAll: 'total: '; print: size.
+ 		strm nextPutAll: ' elements: '; print: elems.
+ 		strm nextPutAll: ' tables: '; print: tablesTotal.
+ 		strm nextPutAll: ' non-nil: '; print: nonNilTables]!

Item was added:
+ ----- Method: SparseLargeArray>>atAllPut: (in category 'accessing') -----
+ atAllPut: anObject 
+ 	"Put anObject at every one of the receiver's indices."
+ 
+ 	1 to: self basicSize do:
+ 		[:i|
+ 		self basicAt: i put: nil].
+ 	defaultValue := anObject!

Item was added:
+ ----- Method: SparseLargeArray>>initChunkSize:size:arrayClass:base:defaultValue: (in category 'initialization') -----
+ initChunkSize: aChunkSize size: aSize arrayClass: aClass base: b defaultValue: d
+ 	chunkSize := aChunkSize.
+ 	size := aSize.
+ 	base := b.
+ 	defaultValue := d.
+ 	arrayClass := aClass
+ !

Item was added:
+ ----- Method: SparseLargeArray>>noCheckAt: (in category 'accessing') -----
+ noCheckAt: index
+ 	^(self basicAt: index - base // chunkSize + 1)
+ 		ifNil: [defaultValue]
+ 		ifNotNil: [:chunk| chunk at: index - base \\ chunkSize + 1]
+ !

Item was added:
+ ----- Method: SparseLargeArray>>noCheckAt:put: (in category 'accessing') -----
+ noCheckAt: index put: value
+ 	| chunkIndex chunk lastChunkSize |
+ 	chunkIndex := index - base // chunkSize + 1.
+ 	(chunk := self basicAt: chunkIndex) ifNil:
+ 		[value = defaultValue ifTrue:
+ 			[^value].
+ 		chunk := arrayClass
+ 					new: ((chunkIndex == self basicSize
+ 						   and: [(lastChunkSize := size \\ chunkSize) > 0])
+ 							ifTrue: [lastChunkSize]
+ 							ifFalse: [chunkSize])
+ 					withAll: defaultValue.
+ 		self basicAt: chunkIndex put: chunk].
+ 	^chunk at: index - base \\ chunkSize + 1 put: value!

Item was added:
+ ----- Method: WriteStream>>ensureACr (in category 'character writing') -----
+ ensureACr
+ 	"Append a cr character to the receiver IFF there is not one on the end."
+ 
+ 	self ensureEndsWith: Character cr!




More information about the Squeak-dev mailing list