xapi.util.impl.DeferredMultiReceiver Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xapi-dev Show documentation
Show all versions of xapi-dev Show documentation
Everything needed to run a comprehensive dev environment.
Just type X_ and pick a service from autocomplete;
new dev modules will be added as they are built.
The only dev service not included in the uber jar is xapi-dev-maven,
as it includes all runtime dependencies of maven, adding ~4 seconds to build time,
and 6 megabytes to the final output jar size (without xapi-dev-maven, it's ~1MB).
The newest version!
package xapi.util.impl;
import xapi.collect.api.Fifo;
import xapi.collect.impl.SimpleFifo;
import xapi.util.api.ProvidesValue;
import xapi.util.api.ReceivesValue;
public class DeferredMultiReceiver implements ProvidesValue>{
private final Fifo>> providers;
private final ReceivesValue adapter;
public DeferredMultiReceiver() {
providers = new SimpleFifo>>();
adapter = new ReceivesValue(){
@Override
public void set(X value) {
ProvidesValue> local;
while((local=providers.take())!=null){
local.get().set(value);
}
local = null;
}
};
}
public final void add(ProvidesValue> provider){
assert !providers.contains(provider) : new RuntimeException("You have sent the same provider instance to a DeferredMultiReceiver more than once: "+provider);
providers.give(provider);
}
public final void add(final ReceivesValue provider){
ProviderAdapter adapter = new ProviderAdapter();
adapter.set(provider);
providers.give(adapter);
}
@Override
public final ReceivesValue get() {
return adapter;
}
}