[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sc-users] Dictionary:choose - loops forever



I have always used clear but the other day I was snooping around and
James points it  right, I saw Julian doing stuff with makeEmpty in
JIT.


I've implemented makeEmpty for Order, which I use it for, but not for Set / Dictionary. It is better to use clear, and I'll change it to clear in Order too, I think.


I tried these for a day, and they seem to work fine; please test:
---
	// IMO removeAll(nil) should remove all items, like the
	// other removeAll methods:
+ Collection {
removeAll { | list | (list ?? { this.copy }).do { | item | this.remove(item) } }
}

+ Dictionary {
removeAll { | list | (list ?? { this.copy }).keysValuesDo { | key | this.removeAt(key) } }
}

	// replacing makeEmpty:
+ Set {
	clear { array.fill; size=0 }
	makeEmpty { ^this.shouldNotImplement } // check to find other uses
}

+ Order {
	*new { arg size = 8;
		^super.new.init(size)
	}

	init { arg size = 8;
		array = Array.new(size);
		indices = Array.new(size);
	}

	clear { arg func;
		var item;
		while { item = this.pop; item.notNil } { func.value(item) };
		^this.init;
	}
	makeEmpty { ^this.shouldNotImplement }	// check to find other uses
}

+ PatternProxy {
	*removeAll {
		this.all.do { arg pat; pat.stop };
		this.all.clear;
	}
}

+ NodeProxy {
	removeAllToBundle { arg bundle;
		var dt, playing;
		dt = this.fadeTime;
		playing = this.isPlaying;
		objects.do { arg obj;
				if(playing) { obj.stopToBundle(bundle, dt) };
				obj.freeToBundle(bundle, dt);
		};
		objects.clear;
	}
}

+ SharedNodeProxy {
	removeAllToBundle { arg bundle;
		var dt, playing;
		dt = this.fadeTime;
		playing = this.isPlaying;
		if(playing) { this.stopAllToBundle(bundle) };
		objects.do { arg obj; obj.freeToBundle(bundle, dt) };
		objects.clear;
	}
}
---
--
--
Alberto de Campo
Bergstrasse 59/33
A-8020 Graz, Austria
e-mail : decampo@xxxxxx
--