package live;

import java.util.function.BiConsumer;
import listeners.ListenerHandle;
import listeners.ListenerList;

// TODO: write in ZenCode
public class SimpleLiveObject<T> implements MutableLiveObject<T> {
	private final ListenerList<BiConsumer<T, T>> listeners = new ListenerList<>();
	private T value;
	
	public SimpleLiveObject(T value) {
		this.value = value;
	}
	
	@Override
	public T getValue() {
		return value;
	}
	
	@Override
	public void setValue(T value) {
		if (value == this.value)
			return;
		
		T oldValue = this.value;
		this.value = value;
		listeners.accept(listener -> listener.accept(oldValue, value));
	}
	
	@Override
	public ListenerHandle<BiConsumer<T, T>> addListener(BiConsumer<T, T> listener) {
		return listeners.add(listener);
	}
}