# HG changeset patch # User claus # Date 800809835 -7200 # Node ID 5ac1b6b4360010c77e6fb43471b7b29221daf182 # Parent 0d4c08ca9da3563521701e7496c86db5f427cd92 . diff -r 0d4c08ca9da3 -r 5ac1b6b43600 Block.st --- a/Block.st Wed May 17 14:17:43 1995 +0200 +++ b/Block.st Thu May 18 17:10:35 1995 +0200 @@ -21,7 +21,7 @@ COPYRIGHT (c) 1989 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/Block.st,v 1.34 1995-05-01 21:28:12 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Block.st,v 1.35 1995-05-18 15:08:46 claus Exp $ '! !Block class methodsFor:'documentation'! @@ -42,7 +42,7 @@ version " -$Header: /cvs/stx/stx/libbasic/Block.st,v 1.34 1995-05-01 21:28:12 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Block.st,v 1.35 1995-05-18 15:08:46 claus Exp $ " ! @@ -650,7 +650,9 @@ valueUninterruptably "evaluate the receiver with interrupts blocked. - This does not prevent preemption by higher priority processes." + This does not prevent preemption by a higher priority processes + if any becomes runnable due to the evaluation of the receiver + (i.e. if a semaphore is signalled)." Processor activeProcess uninterruptablyDo:self ! diff -r 0d4c08ca9da3 -r 5ac1b6b43600 Coll.st --- a/Coll.st Wed May 17 14:17:43 1995 +0200 +++ b/Coll.st Thu May 18 17:10:35 1995 +0200 @@ -13,7 +13,7 @@ Object subclass:#Collection instanceVariableNames:'' classVariableNames:'InvalidKeySignal EmptyCollectionSignal - ValueNotFoundSignal' + ValueNotFoundSignal NotEnoughElementsSignal' poolDictionaries:'' category:'Collections-Abstract' ! @@ -22,7 +22,7 @@ COPYRIGHT (c) 1989 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/Attic/Coll.st,v 1.33 1995-05-16 17:06:27 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Attic/Coll.st,v 1.34 1995-05-18 15:09:00 claus Exp $ '! !Collection class methodsFor:'documentation'! @@ -43,7 +43,7 @@ version " -$Header: /cvs/stx/stx/libbasic/Attic/Coll.st,v 1.33 1995-05-16 17:06:27 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Attic/Coll.st,v 1.34 1995-05-18 15:09:00 claus Exp $ " ! @@ -73,7 +73,11 @@ ValueNotFoundSignal nameClass:self message:#valueNotFoundSignal. ValueNotFoundSignal notifierString:'value not found:'. - EmptyCollectionSignal := ErrorSignal newSignalMayProceed:true. + NotEnoughElementsSignal := ErrorSignal newSignalMayProceed:true. + NotEnoughElementsSignal nameClass:self message:#notEnoughElementsSignal. + NotEnoughElementsSignal notifierString:'not enough elements in collection'. + + EmptyCollectionSignal := NotEnoughElementsSignal newSignalMayProceed:true. EmptyCollectionSignal nameClass:self message:#emptyCollectionSignal. EmptyCollectionSignal notifierString:'operation not allowed for empty collections'. ] @@ -97,6 +101,13 @@ "return the signal used to report non-allowed operation on empty collections" ^ EmptyCollectionSignal +! + +notEnoughElementsSignal + "return the signal used to report attempts for an operation, for which + there are not enough elements in the collection" + + ^ NotEnoughElementsSignal ! ! !Collection class methodsFor:'queries'! @@ -220,6 +231,13 @@ ^ EmptyCollectionSignal raise ! +notEnoughElementsError + "report an error that the operation is not allowed, + since not enough elements are in the collection" + + ^ NotEnoughElementsSignal raise +! + emptyCheck "check if the receiver is empty; report an error if so" @@ -389,14 +407,17 @@ ! remove:anObject ifAbsent:exceptionBlock - "remove the argument, anObject from the receiver - if it was not - in the collection returns the the value of the exceptionBlock" + "remove the (first occurrence of) argument, anObject from the receiver, + and return it. + If it was not in the collection, return the the value of the exceptionBlock" ^ self subclassResponsibility ! remove:anObject - "remove the argument, anObject from the receiver" + "remove the (first occurrence of) argument, anObject from the receiver, + and return it. + If it was not in the collection, raise an error." self remove:anObject ifAbsent:[self errorValueNotFound:anObject] ! @@ -416,6 +437,52 @@ aCollection do:[:element | self remove:element]. ^ aCollection +! + +removeFirst + "remove the first element from the receiver. + Return the removed element." + + ^ self subclassResponsibility +! + +removeLast + "remove the last element from the receiver. + Return the removed element." + + ^ self subclassResponsibility +! + +removeFirst:n + "remove the first n elements from the receiver. + Return an array filled with the removed elements." + + |ret| + + self size < n ifTrue:[ + ^ self notEnoughElementsError + ]. + ret := Array new:n. + 1 to:n do:[:i | + ret at:i put:(self removeFirst). + ]. + ^ ret +! + +removeLast:n + "remove the last n elements from the receiver. + Return an array filled with the removed elements." + + |ret| + + self size < n ifTrue:[ + ^ self notEnoughElementsError + ]. + ret := Array new:n. + n to:1 by:-1 do:[:i | + ret at:i put:(self removeLast). + ]. + ^ ret ! ! !Collection methodsFor:'growing'! diff -r 0d4c08ca9da3 -r 5ac1b6b43600 Collection.st --- a/Collection.st Wed May 17 14:17:43 1995 +0200 +++ b/Collection.st Thu May 18 17:10:35 1995 +0200 @@ -13,7 +13,7 @@ Object subclass:#Collection instanceVariableNames:'' classVariableNames:'InvalidKeySignal EmptyCollectionSignal - ValueNotFoundSignal' + ValueNotFoundSignal NotEnoughElementsSignal' poolDictionaries:'' category:'Collections-Abstract' ! @@ -22,7 +22,7 @@ COPYRIGHT (c) 1989 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/Collection.st,v 1.33 1995-05-16 17:06:27 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Collection.st,v 1.34 1995-05-18 15:09:00 claus Exp $ '! !Collection class methodsFor:'documentation'! @@ -43,7 +43,7 @@ version " -$Header: /cvs/stx/stx/libbasic/Collection.st,v 1.33 1995-05-16 17:06:27 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Collection.st,v 1.34 1995-05-18 15:09:00 claus Exp $ " ! @@ -73,7 +73,11 @@ ValueNotFoundSignal nameClass:self message:#valueNotFoundSignal. ValueNotFoundSignal notifierString:'value not found:'. - EmptyCollectionSignal := ErrorSignal newSignalMayProceed:true. + NotEnoughElementsSignal := ErrorSignal newSignalMayProceed:true. + NotEnoughElementsSignal nameClass:self message:#notEnoughElementsSignal. + NotEnoughElementsSignal notifierString:'not enough elements in collection'. + + EmptyCollectionSignal := NotEnoughElementsSignal newSignalMayProceed:true. EmptyCollectionSignal nameClass:self message:#emptyCollectionSignal. EmptyCollectionSignal notifierString:'operation not allowed for empty collections'. ] @@ -97,6 +101,13 @@ "return the signal used to report non-allowed operation on empty collections" ^ EmptyCollectionSignal +! + +notEnoughElementsSignal + "return the signal used to report attempts for an operation, for which + there are not enough elements in the collection" + + ^ NotEnoughElementsSignal ! ! !Collection class methodsFor:'queries'! @@ -220,6 +231,13 @@ ^ EmptyCollectionSignal raise ! +notEnoughElementsError + "report an error that the operation is not allowed, + since not enough elements are in the collection" + + ^ NotEnoughElementsSignal raise +! + emptyCheck "check if the receiver is empty; report an error if so" @@ -389,14 +407,17 @@ ! remove:anObject ifAbsent:exceptionBlock - "remove the argument, anObject from the receiver - if it was not - in the collection returns the the value of the exceptionBlock" + "remove the (first occurrence of) argument, anObject from the receiver, + and return it. + If it was not in the collection, return the the value of the exceptionBlock" ^ self subclassResponsibility ! remove:anObject - "remove the argument, anObject from the receiver" + "remove the (first occurrence of) argument, anObject from the receiver, + and return it. + If it was not in the collection, raise an error." self remove:anObject ifAbsent:[self errorValueNotFound:anObject] ! @@ -416,6 +437,52 @@ aCollection do:[:element | self remove:element]. ^ aCollection +! + +removeFirst + "remove the first element from the receiver. + Return the removed element." + + ^ self subclassResponsibility +! + +removeLast + "remove the last element from the receiver. + Return the removed element." + + ^ self subclassResponsibility +! + +removeFirst:n + "remove the first n elements from the receiver. + Return an array filled with the removed elements." + + |ret| + + self size < n ifTrue:[ + ^ self notEnoughElementsError + ]. + ret := Array new:n. + 1 to:n do:[:i | + ret at:i put:(self removeFirst). + ]. + ^ ret +! + +removeLast:n + "remove the last n elements from the receiver. + Return an array filled with the removed elements." + + |ret| + + self size < n ifTrue:[ + ^ self notEnoughElementsError + ]. + ret := Array new:n. + n to:1 by:-1 do:[:i | + ret at:i put:(self removeLast). + ]. + ^ ret ! ! !Collection methodsFor:'growing'! diff -r 0d4c08ca9da3 -r 5ac1b6b43600 Object.st --- a/Object.st Wed May 17 14:17:43 1995 +0200 +++ b/Object.st Thu May 18 17:10:35 1995 +0200 @@ -29,7 +29,7 @@ COPYRIGHT (c) 1988 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/Object.st,v 1.48 1995-05-16 17:08:05 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Object.st,v 1.49 1995-05-18 15:09:41 claus Exp $ '! !Object class methodsFor:'documentation'! @@ -50,7 +50,7 @@ version " -$Header: /cvs/stx/stx/libbasic/Object.st,v 1.48 1995-05-16 17:08:05 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Object.st,v 1.49 1995-05-18 15:09:41 claus Exp $ " ! @@ -1361,13 +1361,14 @@ used from other c subsystems too, to upcast errors. IDs (currently) used: #DisplayError ..... x-error interrupt + #XtError ..... xt-error interrupt (Xt interface is not yet published) " |handler| handler := ObjectMemory registeredErrorInterruptHandlers at:errorID ifAbsent:nil. handler notNil ifTrue:[ - handler errorInterrupt. + handler errorInterrupt:errorID. ^ self ]. diff -r 0d4c08ca9da3 -r 5ac1b6b43600 OrdColl.st --- a/OrdColl.st Wed May 17 14:17:43 1995 +0200 +++ b/OrdColl.st Thu May 18 17:10:35 1995 +0200 @@ -21,7 +21,7 @@ COPYRIGHT (c) 1989 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/Attic/OrdColl.st,v 1.24 1995-05-16 17:08:13 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Attic/OrdColl.st,v 1.25 1995-05-18 15:09:50 claus Exp $ '! !OrderedCollection class methodsFor:'documentation'! @@ -42,7 +42,7 @@ version " -$Header: /cvs/stx/stx/libbasic/Attic/OrdColl.st,v 1.24 1995-05-16 17:08:13 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Attic/OrdColl.st,v 1.25 1995-05-18 15:09:50 claus Exp $ " ! @@ -200,9 +200,11 @@ ]. ^ anObject - "(OrderedCollection withAll:#(1 2 3 4 5)) removeFirst; yourself" - "(SortedCollection withAll:#(5 4 3 2 1)) removeFirst; yourself" - "(SortedCollection new) removeFirst" + " + (OrderedCollection withAll:#(1 2 3 4 5)) removeFirst; yourself + OrderedCollection new removeFirst + (SortedCollection withAll:#(5 4 3 2 1)) removeFirst; yourself + " ! removeLast @@ -225,17 +227,98 @@ ]. ^ anObject - "(OrderedCollection withAll:#(1 2 3 4 5)) removeLast; yourself" - "(SortedCollection withAll:#(5 4 3 2 1)) removeLast; yourself" + " + (OrderedCollection withAll:#(1 2 3 4 5)) removeLast; yourself + OrderedCollection new removeLast + (SortedCollection withAll:#(5 4 3 2 1)) removeLast; yourself + " +! + +removeFirst:n + "remove the first n elements from the collection; + return the elements in an Array" + + |mySize ret| + + mySize := self size. + mySize < n ifTrue:[ + "error if collection has not enough elements" + ^ self notEnoughElementsError. + ]. + + ret := Array new:n. + ret replaceFrom:1 to:n with:contentsArray startingAt:firstIndex. + "/ + "/ nil-out contents array, to not keep elements from being GC'd + "/ + contentsArray from:firstIndex to:firstIndex + n - 1 put:nil. + firstIndex := firstIndex + n. + + firstIndex > lastIndex ifTrue:[ + "reset to avoid ever growing" + firstIndex := 1. + lastIndex := 0 + ]. + ^ ret + + " + (OrderedCollection withAll:#(1 2 3 4 5)) removeFirst:2; yourself + (OrderedCollection withAll:#(1 2 3 4 5)) removeFirst:0; yourself + OrderedCollection new removeFirst:2 + (OrderedCollection withAll:#(1 2 3 4 5)) removeFirst:6 + (SortedCollection withAll:#(5 4 3 2 1)) removeFirst:2; yourself + " +! + +removeLast:n + "remove the last n elements from the collection; + return the elements in an Array" + + |mySize ret| + + mySize := self size. + mySize < n ifTrue:[ + "error if collection has not enough elements" + ^ self notEnoughElementsError. + ]. + + ret := Array new:n. + ret replaceFrom:1 to:n with:contentsArray startingAt:lastIndex - n + 1. + "/ + "/ nil-out contents array, to not keep elements from being GC'd + "/ + contentsArray from:lastIndex - n + 1 to:lastIndex put:nil. + lastIndex := lastIndex - n. + + firstIndex > lastIndex ifTrue:[ + "reset to avoid ever growing" + firstIndex := 1. + lastIndex := 0 + ]. + ^ ret + + " + (OrderedCollection withAll:#(1 2 3 4 5)) removeLast:2; yourself + (OrderedCollection withAll:#(1 2 3 4 5)) removeLast:0; yourself + (OrderedCollection withAll:#(1 2 3 4 5)) removeLast:6; yourself + (SortedCollection withAll:#(5 4 3 2 1)) removeLast:2; yourself + " ! removeFromIndex:startIndex toIndex:stopIndex "remove the elements stored under startIndex up to and including the elements under stopIndex. - return the receiver." + Return the receiver. + Returning the receiver here is a historic leftover - it may change. + Please use yourself in a cascade, if you need the receivers value + when using this method." |nDeleted| + (startIndex < firstIndex + or:[stopIndex > lastIndex]) ifTrue:[ + ^ self notEnoughElementsError + ]. nDeleted := stopIndex - startIndex + 1. contentsArray replaceFrom:(firstIndex + startIndex - 1) @@ -257,6 +340,7 @@ " #(1 2 3 4 5 6 7 8 9) asOrderedCollection removeFromIndex:3 toIndex:6 + #(1 2 3 4 5) asOrderedCollection removeFromIndex:3 toIndex:6 " ! @@ -287,6 +371,11 @@ index := index + 1 ]. ^ exceptionBlock value + + " + #(1 2 3 4 5 6 7 8 9) asOrderedCollection remove:3 ifAbsent:'oops' + #(1 2 3 4 5) asOrderedCollection remove:9 ifAbsent:'oops' + " ! removeAll @@ -295,6 +384,39 @@ self initContents:10 ! +removeAllSuchThat:aBlock + "remove all elements that meet a test criteria as specified in aBlock. + The argument, aBlock is evaluated for successive elements and all those, + for which it returns true, are removed." + + "/ this is a q&d implementation (slow). + "/ it should be rewritten to + + |runIndex removed element| + + removed := self species new. + + runIndex := 1. + [runIndex <= self size] whileTrue:[ + element := self at:runIndex. + (aBlock value:element) ifTrue:[ + removed add:element. + self removeAtIndex:runIndex + ] ifFalse:[ + runIndex := runIndex + 1 + ] + ]. + ^ removed + + " + |coll| + + coll := OrderedCollection withAll:(1 to:10). + Transcript showCr:(coll removeAllSuchThat:[:el | el even]). + Transcript showCr:coll + " +! + add:anObject "add the argument, anObject to the end of the collection Return the argument, anObject." @@ -393,7 +515,7 @@ idx ~~ 0 ifTrue:[ ^ self add:newObject beforeIndex:(idx + 1). ]. - self errorNotFound:oldObject + self errorValueNotFound:oldObject " |c| @@ -424,7 +546,7 @@ idx ~~ 0 ifTrue:[ ^ self add:newObject beforeIndex:idx. ]. - self errorNotFound:oldObject + self errorValueNotFound:oldObject " |c| @@ -572,7 +694,7 @@ "return the element, after anObject. If anObject is not in the receiver, report an error." - ^ self after:anObject ifAbsent:[self errorNotFound:anObject] + ^ self after:anObject ifAbsent:[self errorValueNotFound:anObject] " #(4 3 2 1) asOrderedCollection after:3. @@ -605,7 +727,7 @@ "return the element before the argument, anObject. If anObject is not in the receiver, report an error." - ^ self before:anObject ifAbsent:[self errorNotFound:anObject] + ^ self before:anObject ifAbsent:[self errorValueNotFound:anObject] " #(4 3 2 1) asOrderedCollection before:3. diff -r 0d4c08ca9da3 -r 5ac1b6b43600 OrderedCollection.st --- a/OrderedCollection.st Wed May 17 14:17:43 1995 +0200 +++ b/OrderedCollection.st Thu May 18 17:10:35 1995 +0200 @@ -21,7 +21,7 @@ COPYRIGHT (c) 1989 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/OrderedCollection.st,v 1.24 1995-05-16 17:08:13 claus Exp $ +$Header: /cvs/stx/stx/libbasic/OrderedCollection.st,v 1.25 1995-05-18 15:09:50 claus Exp $ '! !OrderedCollection class methodsFor:'documentation'! @@ -42,7 +42,7 @@ version " -$Header: /cvs/stx/stx/libbasic/OrderedCollection.st,v 1.24 1995-05-16 17:08:13 claus Exp $ +$Header: /cvs/stx/stx/libbasic/OrderedCollection.st,v 1.25 1995-05-18 15:09:50 claus Exp $ " ! @@ -200,9 +200,11 @@ ]. ^ anObject - "(OrderedCollection withAll:#(1 2 3 4 5)) removeFirst; yourself" - "(SortedCollection withAll:#(5 4 3 2 1)) removeFirst; yourself" - "(SortedCollection new) removeFirst" + " + (OrderedCollection withAll:#(1 2 3 4 5)) removeFirst; yourself + OrderedCollection new removeFirst + (SortedCollection withAll:#(5 4 3 2 1)) removeFirst; yourself + " ! removeLast @@ -225,17 +227,98 @@ ]. ^ anObject - "(OrderedCollection withAll:#(1 2 3 4 5)) removeLast; yourself" - "(SortedCollection withAll:#(5 4 3 2 1)) removeLast; yourself" + " + (OrderedCollection withAll:#(1 2 3 4 5)) removeLast; yourself + OrderedCollection new removeLast + (SortedCollection withAll:#(5 4 3 2 1)) removeLast; yourself + " +! + +removeFirst:n + "remove the first n elements from the collection; + return the elements in an Array" + + |mySize ret| + + mySize := self size. + mySize < n ifTrue:[ + "error if collection has not enough elements" + ^ self notEnoughElementsError. + ]. + + ret := Array new:n. + ret replaceFrom:1 to:n with:contentsArray startingAt:firstIndex. + "/ + "/ nil-out contents array, to not keep elements from being GC'd + "/ + contentsArray from:firstIndex to:firstIndex + n - 1 put:nil. + firstIndex := firstIndex + n. + + firstIndex > lastIndex ifTrue:[ + "reset to avoid ever growing" + firstIndex := 1. + lastIndex := 0 + ]. + ^ ret + + " + (OrderedCollection withAll:#(1 2 3 4 5)) removeFirst:2; yourself + (OrderedCollection withAll:#(1 2 3 4 5)) removeFirst:0; yourself + OrderedCollection new removeFirst:2 + (OrderedCollection withAll:#(1 2 3 4 5)) removeFirst:6 + (SortedCollection withAll:#(5 4 3 2 1)) removeFirst:2; yourself + " +! + +removeLast:n + "remove the last n elements from the collection; + return the elements in an Array" + + |mySize ret| + + mySize := self size. + mySize < n ifTrue:[ + "error if collection has not enough elements" + ^ self notEnoughElementsError. + ]. + + ret := Array new:n. + ret replaceFrom:1 to:n with:contentsArray startingAt:lastIndex - n + 1. + "/ + "/ nil-out contents array, to not keep elements from being GC'd + "/ + contentsArray from:lastIndex - n + 1 to:lastIndex put:nil. + lastIndex := lastIndex - n. + + firstIndex > lastIndex ifTrue:[ + "reset to avoid ever growing" + firstIndex := 1. + lastIndex := 0 + ]. + ^ ret + + " + (OrderedCollection withAll:#(1 2 3 4 5)) removeLast:2; yourself + (OrderedCollection withAll:#(1 2 3 4 5)) removeLast:0; yourself + (OrderedCollection withAll:#(1 2 3 4 5)) removeLast:6; yourself + (SortedCollection withAll:#(5 4 3 2 1)) removeLast:2; yourself + " ! removeFromIndex:startIndex toIndex:stopIndex "remove the elements stored under startIndex up to and including the elements under stopIndex. - return the receiver." + Return the receiver. + Returning the receiver here is a historic leftover - it may change. + Please use yourself in a cascade, if you need the receivers value + when using this method." |nDeleted| + (startIndex < firstIndex + or:[stopIndex > lastIndex]) ifTrue:[ + ^ self notEnoughElementsError + ]. nDeleted := stopIndex - startIndex + 1. contentsArray replaceFrom:(firstIndex + startIndex - 1) @@ -257,6 +340,7 @@ " #(1 2 3 4 5 6 7 8 9) asOrderedCollection removeFromIndex:3 toIndex:6 + #(1 2 3 4 5) asOrderedCollection removeFromIndex:3 toIndex:6 " ! @@ -287,6 +371,11 @@ index := index + 1 ]. ^ exceptionBlock value + + " + #(1 2 3 4 5 6 7 8 9) asOrderedCollection remove:3 ifAbsent:'oops' + #(1 2 3 4 5) asOrderedCollection remove:9 ifAbsent:'oops' + " ! removeAll @@ -295,6 +384,39 @@ self initContents:10 ! +removeAllSuchThat:aBlock + "remove all elements that meet a test criteria as specified in aBlock. + The argument, aBlock is evaluated for successive elements and all those, + for which it returns true, are removed." + + "/ this is a q&d implementation (slow). + "/ it should be rewritten to + + |runIndex removed element| + + removed := self species new. + + runIndex := 1. + [runIndex <= self size] whileTrue:[ + element := self at:runIndex. + (aBlock value:element) ifTrue:[ + removed add:element. + self removeAtIndex:runIndex + ] ifFalse:[ + runIndex := runIndex + 1 + ] + ]. + ^ removed + + " + |coll| + + coll := OrderedCollection withAll:(1 to:10). + Transcript showCr:(coll removeAllSuchThat:[:el | el even]). + Transcript showCr:coll + " +! + add:anObject "add the argument, anObject to the end of the collection Return the argument, anObject." @@ -393,7 +515,7 @@ idx ~~ 0 ifTrue:[ ^ self add:newObject beforeIndex:(idx + 1). ]. - self errorNotFound:oldObject + self errorValueNotFound:oldObject " |c| @@ -424,7 +546,7 @@ idx ~~ 0 ifTrue:[ ^ self add:newObject beforeIndex:idx. ]. - self errorNotFound:oldObject + self errorValueNotFound:oldObject " |c| @@ -572,7 +694,7 @@ "return the element, after anObject. If anObject is not in the receiver, report an error." - ^ self after:anObject ifAbsent:[self errorNotFound:anObject] + ^ self after:anObject ifAbsent:[self errorValueNotFound:anObject] " #(4 3 2 1) asOrderedCollection after:3. @@ -605,7 +727,7 @@ "return the element before the argument, anObject. If anObject is not in the receiver, report an error." - ^ self before:anObject ifAbsent:[self errorNotFound:anObject] + ^ self before:anObject ifAbsent:[self errorValueNotFound:anObject] " #(4 3 2 1) asOrderedCollection before:3. diff -r 0d4c08ca9da3 -r 5ac1b6b43600 Process.st --- a/Process.st Wed May 17 14:17:43 1995 +0200 +++ b/Process.st Thu May 18 17:10:35 1995 +0200 @@ -24,7 +24,7 @@ COPYRIGHT (c) 1992 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/Process.st,v 1.27 1995-05-16 17:08:29 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Process.st,v 1.28 1995-05-18 15:09:58 claus Exp $ '! !Process class methodsFor:'documentation'! @@ -45,7 +45,7 @@ version " -$Header: /cvs/stx/stx/libbasic/Process.st,v 1.27 1995-05-16 17:08:29 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Process.st,v 1.28 1995-05-18 15:09:58 claus Exp $ " ! @@ -692,8 +692,10 @@ ! uninterruptablyDo:aBlock - "execute aBlock with interrupts blocked. This does not prevent - preemption by higher priority processes." + "execute aBlock with interrupts blocked. + This does not prevent preemption by a higher priority processes + if any becomes runnable due to the evaluation of aBlock + (i.e. if a semaphore is signalled there)." |wasBlocked| @@ -707,7 +709,8 @@ ! waitUntilTerminated - "wait until the receiver is terminated" + "wait until the receiver is terminated. + This method allows another process to wait till the receiver finishes." |wasBlocked| @@ -718,7 +721,7 @@ ! waitUntilSuspended - "wait until the receiver is suspended" + "wait until the receiver is suspended." |wasBlocked| diff -r 0d4c08ca9da3 -r 5ac1b6b43600 SeqColl.st --- a/SeqColl.st Wed May 17 14:17:43 1995 +0200 +++ b/SeqColl.st Thu May 18 17:10:35 1995 +0200 @@ -21,7 +21,7 @@ COPYRIGHT (c) 1989 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/Attic/SeqColl.st,v 1.27 1995-03-18 05:06:08 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Attic/SeqColl.st,v 1.28 1995-05-18 15:10:08 claus Exp $ '! !SequenceableCollection class methodsFor:'documentation'! @@ -42,7 +42,7 @@ version " -$Header: /cvs/stx/stx/libbasic/Attic/SeqColl.st,v 1.27 1995-03-18 05:06:08 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Attic/SeqColl.st,v 1.28 1995-05-18 15:10:08 claus Exp $ " ! @@ -1073,6 +1073,9 @@ removeFromIndex:startIndex toIndex:endIndex "remove the elements stored at indexes between startIndex and endIndex. + Return the receiver. + Returning the receiver is a historic leftover - it may at one + time return a collection of the removed elements. Notice, that this is modifies the receiver - NOT a copy; therefore any other users of the receiver will also see this change. @@ -1108,8 +1111,8 @@ " ! -removeAtIndex:index - "remove the argument stored at index and return it. +removeAtIndex:anIndex + "remove the element stored at anIndex. Return the removed object. Notice, that this is modifies the receiver NOT a copy. Also note, that it may be a slow operation for some collections, @@ -1118,11 +1121,13 @@ |element| - element := self at:index. - self removeIndex:index. + element := self at:anIndex. + self removeFromIndex:anIndex toIndex:anIndex. ^ element " + #(1 2 3 4 5 6 7 8 9) asOrderedCollection removeAtIndex:3 + #(1 2 3 4 5) asOrderedCollection removeAtIndex:6 #($a $b $c $d $e $f $g) removeAtIndex:3 " ! @@ -1138,6 +1143,8 @@ self removeFromIndex:index toIndex:index " + #(1 2 3 4 5 6 7 8 9) asOrderedCollection removeIndex:3 + #(1 2 3 4 5) asOrderedCollection removeIndex:6 #($a $b $c $d $e $f $g) removeIndex:3 " ! @@ -1153,10 +1160,10 @@ ^ self removeAtIndex:1 " - |a| + |a| a := #(1 2 3 4 5 6). a removeFirst. - a + a " ! @@ -1171,7 +1178,7 @@ ^ self removeAtIndex:(self size) " - |a| + |a| a := #(1 2 3 4 5 6). a removeLast. a diff -r 0d4c08ca9da3 -r 5ac1b6b43600 SequenceableCollection.st --- a/SequenceableCollection.st Wed May 17 14:17:43 1995 +0200 +++ b/SequenceableCollection.st Thu May 18 17:10:35 1995 +0200 @@ -21,7 +21,7 @@ COPYRIGHT (c) 1989 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/SequenceableCollection.st,v 1.27 1995-03-18 05:06:08 claus Exp $ +$Header: /cvs/stx/stx/libbasic/SequenceableCollection.st,v 1.28 1995-05-18 15:10:08 claus Exp $ '! !SequenceableCollection class methodsFor:'documentation'! @@ -42,7 +42,7 @@ version " -$Header: /cvs/stx/stx/libbasic/SequenceableCollection.st,v 1.27 1995-03-18 05:06:08 claus Exp $ +$Header: /cvs/stx/stx/libbasic/SequenceableCollection.st,v 1.28 1995-05-18 15:10:08 claus Exp $ " ! @@ -1073,6 +1073,9 @@ removeFromIndex:startIndex toIndex:endIndex "remove the elements stored at indexes between startIndex and endIndex. + Return the receiver. + Returning the receiver is a historic leftover - it may at one + time return a collection of the removed elements. Notice, that this is modifies the receiver - NOT a copy; therefore any other users of the receiver will also see this change. @@ -1108,8 +1111,8 @@ " ! -removeAtIndex:index - "remove the argument stored at index and return it. +removeAtIndex:anIndex + "remove the element stored at anIndex. Return the removed object. Notice, that this is modifies the receiver NOT a copy. Also note, that it may be a slow operation for some collections, @@ -1118,11 +1121,13 @@ |element| - element := self at:index. - self removeIndex:index. + element := self at:anIndex. + self removeFromIndex:anIndex toIndex:anIndex. ^ element " + #(1 2 3 4 5 6 7 8 9) asOrderedCollection removeAtIndex:3 + #(1 2 3 4 5) asOrderedCollection removeAtIndex:6 #($a $b $c $d $e $f $g) removeAtIndex:3 " ! @@ -1138,6 +1143,8 @@ self removeFromIndex:index toIndex:index " + #(1 2 3 4 5 6 7 8 9) asOrderedCollection removeIndex:3 + #(1 2 3 4 5) asOrderedCollection removeIndex:6 #($a $b $c $d $e $f $g) removeIndex:3 " ! @@ -1153,10 +1160,10 @@ ^ self removeAtIndex:1 " - |a| + |a| a := #(1 2 3 4 5 6). a removeFirst. - a + a " ! @@ -1171,7 +1178,7 @@ ^ self removeAtIndex:(self size) " - |a| + |a| a := #(1 2 3 4 5 6). a removeLast. a diff -r 0d4c08ca9da3 -r 5ac1b6b43600 Smalltalk.st --- a/Smalltalk.st Wed May 17 14:17:43 1995 +0200 +++ b/Smalltalk.st Thu May 18 17:10:35 1995 +0200 @@ -27,7 +27,7 @@ COPYRIGHT (c) 1988 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.46 1995-05-16 17:08:57 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.47 1995-05-18 15:10:18 claus Exp $ '! " @@ -56,7 +56,7 @@ version " -$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.46 1995-05-16 17:08:57 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.47 1995-05-18 15:10:18 claus Exp $ " ! @@ -255,6 +255,9 @@ Notice: this is not called when an image is restarted; in this case the show starts in Smalltalk>>restart." + SilentLoading := false. + Initializing := true. + " define low-level debugging tools - graphical classes are not prepared yet to handle things. diff -r 0d4c08ca9da3 -r 5ac1b6b43600 SortColl.st --- a/SortColl.st Wed May 17 14:17:43 1995 +0200 +++ b/SortColl.st Thu May 18 17:10:35 1995 +0200 @@ -21,7 +21,7 @@ COPYRIGHT (c) 1993 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/Attic/SortColl.st,v 1.16 1995-05-16 17:09:05 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Attic/SortColl.st,v 1.17 1995-05-18 15:10:23 claus Exp $ '! !SortedCollection class methodsFor:'documentation'! @@ -42,7 +42,7 @@ version " -$Header: /cvs/stx/stx/libbasic/Attic/SortColl.st,v 1.16 1995-05-16 17:09:05 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Attic/SortColl.st,v 1.17 1995-05-18 15:10:23 claus Exp $ " ! @@ -304,7 +304,7 @@ "return the element before the argument, anObject; or nil if there is none. If the receiver does not contain anObject, report an error" - ^ self before:anObject ifAbsent:[self errorNotFound:anObject] + ^ self before:anObject ifAbsent:[self errorValueNotFound:anObject] " #(7 3 9 10 99) asSortedCollection before:50 @@ -346,7 +346,7 @@ "return the element after the argument, anObject; or nil if there is none. If the receiver does not contain anObject, report an error" - ^ self after:anObject ifAbsent:[self errorNotFound:anObject] + ^ self after:anObject ifAbsent:[self errorValueNotFound:anObject] " #(7 3 9 10 99) asSortedCollection after:50 diff -r 0d4c08ca9da3 -r 5ac1b6b43600 SortedCollection.st --- a/SortedCollection.st Wed May 17 14:17:43 1995 +0200 +++ b/SortedCollection.st Thu May 18 17:10:35 1995 +0200 @@ -21,7 +21,7 @@ COPYRIGHT (c) 1993 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/SortedCollection.st,v 1.16 1995-05-16 17:09:05 claus Exp $ +$Header: /cvs/stx/stx/libbasic/SortedCollection.st,v 1.17 1995-05-18 15:10:23 claus Exp $ '! !SortedCollection class methodsFor:'documentation'! @@ -42,7 +42,7 @@ version " -$Header: /cvs/stx/stx/libbasic/SortedCollection.st,v 1.16 1995-05-16 17:09:05 claus Exp $ +$Header: /cvs/stx/stx/libbasic/SortedCollection.st,v 1.17 1995-05-18 15:10:23 claus Exp $ " ! @@ -304,7 +304,7 @@ "return the element before the argument, anObject; or nil if there is none. If the receiver does not contain anObject, report an error" - ^ self before:anObject ifAbsent:[self errorNotFound:anObject] + ^ self before:anObject ifAbsent:[self errorValueNotFound:anObject] " #(7 3 9 10 99) asSortedCollection before:50 @@ -346,7 +346,7 @@ "return the element after the argument, anObject; or nil if there is none. If the receiver does not contain anObject, report an error" - ^ self after:anObject ifAbsent:[self errorNotFound:anObject] + ^ self after:anObject ifAbsent:[self errorValueNotFound:anObject] " #(7 3 9 10 99) asSortedCollection after:50 diff -r 0d4c08ca9da3 -r 5ac1b6b43600 Unix.st --- a/Unix.st Wed May 17 14:17:43 1995 +0200 +++ b/Unix.st Thu May 18 17:10:35 1995 +0200 @@ -22,7 +22,7 @@ COPYRIGHT (c) 1988 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libbasic/Attic/Unix.st,v 1.34 1995-05-16 17:09:31 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Attic/Unix.st,v 1.35 1995-05-18 15:10:35 claus Exp $ '! !OperatingSystem primitiveDefinitions! @@ -156,7 +156,7 @@ version " -$Header: /cvs/stx/stx/libbasic/Attic/Unix.st,v 1.34 1995-05-16 17:09:31 claus Exp $ +$Header: /cvs/stx/stx/libbasic/Attic/Unix.st,v 1.35 1995-05-18 15:10:35 claus Exp $ " ! @@ -2001,11 +2001,6 @@ #if defined(ITIMER_VIRTUAL) struct itimerval dt; - dt.it_interval.tv_sec = 0; - dt.it_interval.tv_usec = 0; - dt.it_value.tv_sec = 0; - dt.it_value.tv_usec = 1000; /* 1000 Hz */ - setitimer(ITIMER_VIRTUAL, &dt, 0); # ifndef xxxSYSV4 # if defined(BSD) || defined(HAS_SIGSETMASK) sigsetmask(0); @@ -2018,6 +2013,12 @@ signal(SIGALRM, __spyInterrupt); # endif + dt.it_interval.tv_sec = 0; + dt.it_interval.tv_usec = 0; + dt.it_value.tv_sec = 0; + dt.it_value.tv_usec = 1000; /* 1000 Hz */ + setitimer(ITIMER_VIRTUAL, &dt, 0); + RETURN (true); #endif %} @@ -2055,17 +2056,18 @@ #if defined(ITIMER_REAL) struct itimerval dt; - dt.it_interval.tv_sec = 0; - dt.it_interval.tv_usec = 0; - dt.it_value.tv_sec = _intVal(millis) / 1000; - dt.it_value.tv_usec = (_intVal(millis) % 1000) * 1000; - setitimer(ITIMER_REAL, &dt, 0); # ifndef xxxSYSV4 # if defined(BSD) || defined(HAS_SIGSETMASK) sigsetmask(0); # endif # endif signal(SIGALRM, __signalTimerInterrupt); + + dt.it_interval.tv_sec = 0; + dt.it_interval.tv_usec = 0; + dt.it_value.tv_sec = _intVal(millis) / 1000; + dt.it_value.tv_usec = (_intVal(millis) % 1000) * 1000; + setitimer(ITIMER_REAL, &dt, 0); RETURN (true); #endif %}