All Downloads are FREE. Search and download functionalities are using the official Maven repository.

xapi.util.impl.DeferredMultiReceiver Maven / Gradle / Ivy

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;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy