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

com.bigcustard.util.WatchableList Maven / Gradle / Ivy

There is a newer version: 1.4.0
Show newest version
package com.bigcustard.util;

import com.badlogic.gdx.utils.Disposable;
import com.bigcustard.scene2dplus.resource.Resource;
import com.google.common.collect.Lists;

import java.util.Iterator;
import java.util.List;
import java.util.Spliterator;
import java.util.function.Consumer;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

public class WatchableList implements Iterable, Disposable {
    private final List list;

    private WatchableValue add = new WatchableValue<>(null);
    private WatchableValue remove = new WatchableValue<>(null);

    public WatchableList(List list) {
        this.list = Lists.newArrayList(list);
    }

    public boolean add(E e) {
        list.add(0, e);
        add.broadcast(e);
        return true;
    }

    public boolean remove(E e) {
        boolean result = list.remove(e);
        remove.broadcast(e);
        return result;
    }

    public void watchAdd(Consumer watcher) {
        add.watch(watcher);
    }

    public void watchRemove(Consumer watcher) {
        remove.watch(watcher);
    }

    public void watchChange(Consumer watcher) {
        remove.watch(watcher);
        add.watch(watcher);
    }

    @Override
    public Iterator iterator() {
        return list.iterator();
    }

    @Override
    public void forEach(Consumer action) {
        list.forEach(action);
    }

    @Override
    public Spliterator spliterator() {
        return list.spliterator();
    }

    public Stream stream() {
        return StreamSupport.stream(spliterator(), false);
    }

    @Override
    public void dispose() {
        add.dispose();
        remove.dispose();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy