--- a/ValueHolderWithWeakDependents.st Fri Nov 11 17:21:44 2016 +0100
+++ b/ValueHolderWithWeakDependents.st Fri Nov 11 17:22:08 2016 +0100
@@ -11,6 +11,8 @@
"
"{ Package: 'stx:libview2' }"
+"{ NameSpace: Smalltalk }"
+
ValueHolder subclass:#ValueHolderWithWeakDependents
instanceVariableNames:''
classVariableNames:''
@@ -103,43 +105,45 @@
wasBlocked := OperatingSystem blockInterrupts.
[
- |deps n d|
-
- deps := dependents.
- deps size ~~ 0 ifTrue:[
+ |deps n dep|
- "/ to save a fair amount of memory in case of
- "/ many dependencies, we store a single dependent in
- "/ a WeakArray, and switch to a WeakSet if more dependents are
- "/ added. Here we have to do the inverse ...
+ deps := dependents.
+ deps size ~~ 0 ifTrue:[
+ "/ to save a fair amount of memory in case of
+ "/ many dependencies, we store a single dependent in
+ "/ a WeakArray, and switch to a WeakSet if more dependents are
+ "/ added. Here we have to do the inverse ...
- deps class == WeakArray ifTrue:[
- ((d := deps at:1) == anObject
- or:[d isNil
- or:[d class == SmallInteger]]) ifTrue:[
- dependents := nil
- ]
- ] ifFalse:[
- deps remove:anObject ifAbsent:[].
- (n := deps size) == 0 ifTrue:[
- dependents := nil
- ] ifFalse:[
- n == 1 ifTrue:[
- d := deps firstIfEmpty:nil.
- d notNil ifTrue:[
- deps := WeakArray with:d
- ] ifFalse:[
- deps := nil
- ].
- dependents := deps.
- ]
- ]
- ]
- ]
+ deps class == WeakArray ifTrue:[
+ ((dep := deps at:1) == anObject
+ or:[dep isNil
+ or:[dep class == SmallInteger]]) ifTrue:[
+ dependents := nil
+ ]
+ ] ifFalse:[
+ dep := deps remove:anObject ifAbsent:[].
+ "if dep is nil, nothing has changed"
+ dep notNil ifTrue:[
+ (n := deps size) == 0 ifTrue:[
+ dependents := nil
+ ] ifFalse:[
+ n == 1 ifTrue:[
+ dep := deps firstIfEmpty:nil.
+ dep notNil ifTrue:[
+ deps := WeakArray with:dep
+ ] ifFalse:[
+ deps := nil
+ ].
+ dependents := deps.
+ ]
+ ]
+ ].
+ ]
+ ]
] ensure:[
- wasBlocked ifFalse:[
- OperatingSystem unblockInterrupts
- ]
+ wasBlocked ifFalse:[
+ OperatingSystem unblockInterrupts
+ ]
]
"Modified: / 26.1.1998 / 19:51:50 / cg"
@@ -150,3 +154,4 @@
version
^ '$Header$'
! !
+