cleaned up bootstrapping code a bit
This commit is contained in:
		| @ -71,6 +71,7 @@ class Semaphore(Object) | ||||
| 	method(#primitive) wait. | ||||
|  | ||||
| (* | ||||
| TODO: timed wait... | ||||
| 	method waitWithTimeout: seconds | ||||
| 	{ | ||||
| 		<primitive: #_semaphore_wait> | ||||
| @ -121,6 +122,51 @@ class Semaphore(Object) | ||||
| 		^self.fireTimeSec >= (aSemaphore fireTime) | ||||
| 	} | ||||
| } | ||||
|      | ||||
| class SemaphoreGroup(Object) | ||||
| { | ||||
| 	var arr, size := 0. | ||||
|  | ||||
| (* TODO: good idea to a shortcut way to prohibit a certain method in the heirarchy chain? | ||||
|  | ||||
| method(#class,#prohibited) new. | ||||
| method(#class,#prohibited) new: size. | ||||
| method(#class,#abstract) xxx. => method(#class) xxx { self subclassResponsibility: #xxxx } | ||||
| *) | ||||
|  | ||||
| 	method(#class) new { self messageProhibited: #new } | ||||
| 	method(#class) new: size { self messageProhibited: #new: } | ||||
|  | ||||
| 	method(#class,#variadic) with() | ||||
| 	{ | ||||
| 		| i x arr | | ||||
|  | ||||
| 		i := 0. | ||||
| 		x := thisContext vargCount. | ||||
|  | ||||
| 		arr := Array new: x. | ||||
| 		while (i < x) | ||||
| 		{ | ||||
| 			arr at: i put: (thisContext vargAt: i). | ||||
| 			i := i + 1. | ||||
| 		}. | ||||
|  | ||||
| 		^self basicNew initialize: arr. | ||||
| 	} | ||||
|  | ||||
| 	method initialize | ||||
| 	{ | ||||
| 		self.arr := Array new: 10. | ||||
| 	} | ||||
|  | ||||
| 	method initialize: arr | ||||
| 	{ | ||||
| 		self.size := arr size. | ||||
| 		self.arr := arr. | ||||
| 	} | ||||
|  | ||||
| 	method(#primitive) wait. | ||||
| } | ||||
|  | ||||
| class SemaphoreHeap(Object) | ||||
| { | ||||
| @ -144,16 +190,16 @@ class SemaphoreHeap(Object) | ||||
|  | ||||
| 	method insert: aSemaphore | ||||
| 	{ | ||||
| 		| index | | ||||
| 		| index newarr newsize | | ||||
|  | ||||
| 		index := self.size. | ||||
| 		(index >= (self.arr size)) ifTrue: [ | ||||
| 			| newarr newsize | | ||||
| 		if (index >= (self.arr size))  | ||||
| 		{ | ||||
| 			newsize := (self.arr size) * 2. | ||||
| 			newarr := Array new: newsize. | ||||
| 			newarr copy: self.arr. | ||||
| 			self.arr := newarr. | ||||
| 		]. | ||||
| 		}. | ||||
|  | ||||
| 		self.arr at: index put: aSemaphore. | ||||
| 		aSemaphore heapIndex: index. | ||||
|  | ||||
		Reference in New Issue
	
	Block a user