[squeak-dev] The Trunk: Morphic-ul.1151.mcz

commits at source.squeak.org commits at source.squeak.org
Mon May 30 23:55:10 UTC 2016


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

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

Name: Morphic-ul.1151
Author: ul
Time: 31 May 2016, 1:05:09.648151 am
UUID: 88bc6d22-477b-477f-8aa9-b324ff0dbcd0
Ancestors: Morphic-mt.1150

Make MorphicAlarmQueue not be a subclass of Heap. Use encapsulation instead. Part #1.

=============== Diff against Morphic-mt.1150 ===============

Item was changed:
  Heap subclass: #MorphicAlarmQueue
+ 	instanceVariableNames: 'mutex sequenceNumber heap'
- 	instanceVariableNames: 'mutex sequenceNumber'
  	classVariableNames: ''
  	poolDictionaries: ''
  	category: 'Morphic-Events'!
  
  !MorphicAlarmQueue commentStamp: 'jcg 1/9/2010 13:34' prior: 0!
  MorphicAlarmQueue is a specialized Heap.  The main change is to stamp each added MorphicAlarm with a sequence number to ensure that alarms scheduled for the same time are executed in the order that they were added.!

Item was changed:
  ----- Method: MorphicAlarmQueue>>add: (in category 'adding') -----
  add: aMorphicAlarm
+ 
+ 	heap ifNotNil: [ 
+ 		aMorphicAlarm sequenceNumber: self nextSequenceNumber.
+ 		^heap add: aMorphicAlarm ].
  	(sequenceNumber := sequenceNumber + 1) = 16r3FFFFFFF ifTrue: [
  		"Sequence number overflow... reassign sequence numbers starting at 0."
  		| alarmList |
  		alarmList := self asArray sort: [:msg1 :msg2 |
  			 msg1 sequenceNumber < msg2 sequenceNumber
  		].
  		alarmList withIndexDo: [:msg :ind | msg sequenceNumber: ind-1].
  		"The #bitAnd: for the unlikely event that we have > 16r3FFFFFF messages in the queue."
  		sequenceNumber := alarmList last sequenceNumber + 1 bitAnd: 16r3FFFFFFF.
  	].
  	aMorphicAlarm sequenceNumber: sequenceNumber.
  	super add: aMorphicAlarm.
  	
  	"If we doubt our sanity..."
  	false ifTrue: [
  		self isValidHeap ifFalse: [self error: 'not a valid heap!!!!!!'].
  	].
  	^aMorphicAlarm!

Item was added:
+ ----- Method: MorphicAlarmQueue>>detect:ifNone: (in category 'migration') -----
+ detect: aBlock ifNone: noneBlock
+ 
+ 	heap ifNil: [ ^super detect: aBlock ifNone: noneBlock ].
+ 	^heap detect: aBlock ifNone: noneBlock!

Item was added:
+ ----- Method: MorphicAlarmQueue>>do: (in category 'migration') -----
+ do: aBlock
+ 
+ 	heap ifNil: [ ^super do: aBlock ].
+ 	^heap do: aBlock!

Item was added:
+ ----- Method: MorphicAlarmQueue>>first (in category 'migration') -----
+ first
+ 
+ 	heap ifNil: [ ^super first ].
+ 	^heap first!

Item was changed:
  ----- Method: MorphicAlarmQueue>>initialize (in category 'initialize') -----
  initialize
+ 
  	super initialize.
+ 	sequenceNumber := 0.
+ 	heap := Heap sortBlock: [ :alarmA :alarmB |
+ 		alarmA scheduledTime = alarmB scheduledTime 
+ 			ifFalse: [ alarmA scheduledTime < alarmB scheduledTime ]
+ 			ifTrue: [
+ 				alarmA sequenceNumber = alarmB sequenceNumber
+ 					ifFalse: [ alarmA sequenceNumber < alarmB sequenceNumber ]
+ 					ifTrue: [ self error: 'These alarms run at the same time' ] ] ]!
- 	sequenceNumber := 0.!

Item was added:
+ ----- Method: MorphicAlarmQueue>>isEmpty (in category 'migration') -----
+ isEmpty
+ 
+ 	heap ifNil: [ ^super isEmpty ].
+ 	^heap isEmpty!

Item was added:
+ ----- Method: MorphicAlarmQueue>>migrate (in category 'migration') -----
+ migrate
+ 
+ 	heap ifNotNil: [ ^self ].
+ 	heap := Heap withAll: self asArray sortBlock: [ :alarmA :alarmB |
+ 		alarmA scheduledTime = alarmB scheduledTime 
+ 			ifFalse: [ alarmA scheduledTime < alarmB scheduledTime ]
+ 			ifTrue: [
+ 				alarmA sequenceNumber = alarmB sequenceNumber
+ 					ifFalse: [ alarmA sequenceNumber < alarmB sequenceNumber ]
+ 					ifTrue: [ self error: 'These alarms run at the same time' ] ] ]!

Item was added:
+ ----- Method: MorphicAlarmQueue>>nextSequenceNumber (in category 'private') -----
+ nextSequenceNumber
+ 
+ 	(sequenceNumber := sequenceNumber + 1) = 16r3FFFFFFF ifTrue: [
+ 		"Sequence number overflow... reassign sequence numbers starting at 1."
+ 		| alarmList |
+ 		alarmList := heap fullySort asArray.
+ 		alarmList withIndexDo: [ :alarm :index |
+ 			alarm sequenceNumber: index ].
+ 		sequenceNumber := alarmList size + 1 ].
+ 	^sequenceNumber!

Item was added:
+ ----- Method: MorphicAlarmQueue>>postCopy (in category 'as yet unclassified') -----
+ postCopy
+ 
+ 	super postCopy.
+ 	heap := heap copy!

Item was added:
+ ----- Method: MorphicAlarmQueue>>remove: (in category 'migration') -----
+ remove: anObject
+ 
+ 	heap ifNil: [ ^super remove: anObject ].
+ 	^heap remove: anObject!

Item was added:
+ ----- Method: MorphicAlarmQueue>>removeFirst (in category 'migration') -----
+ removeFirst
+ 
+ 	heap ifNil: [ ^super removeFirst ].
+ 	^heap removeFirst!

Item was changed:
+ (PackageInfo named: 'Morphic') postscript: 'MorphicAlarmQueue allInstancesDo: #migrate'!
- (PackageInfo named: 'Morphic') postscript: 'SystemWindow reconfigureWindowsForFocus.'!



More information about the Squeak-dev mailing list