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

com.github.davidmoten.rx.Actions Maven / Gradle / Ivy

package com.github.davidmoten.rx;

import java.io.Closeable;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;

import rx.Subscription;
import rx.functions.Action0;
import rx.functions.Action1;
import rx.functions.Action2;
import rx.functions.Action3;

public final class Actions {

    private Actions() {
        // prevent instantiation
    }

    public static Action1 setAtomic(final AtomicInteger a) {
        return new Action1() {

            @Override
            public void call(Integer t) {
                a.set(t);
            }
        };
    }

    public static Action1 setAtomic(final AtomicLong a) {
        return new Action1() {

            @Override
            public void call(Long t) {
                a.set(t);
            }
        };
    }

    public static Action1 setAtomic(final AtomicBoolean a) {
        return new Action1() {

            @Override
            public void call(Boolean t) {
                a.set(t);
            }
        };
    }

    public static  Action1 setAtomic(final AtomicReference a) {
        return new Action1() {

            @Override
            public void call(T t) {
                a.set(t);
            }
        };
    }

    private static class HolderDoNothing0 {
        static final Action0 INSTANCE = new Action0() {

            @Override
            public void call() {
                // do nothing
            }
        };

    }

    public static Action0 doNothing0() {
        return HolderDoNothing0.INSTANCE;
    }

    private static class HolderDoNothing1 {
        static final Action1 INSTANCE = new Action1() {

            @Override
            public void call(Object t) {
                // do Nothing
            }
        };
    }

    @SuppressWarnings("unchecked")
    public static  Action1 doNothing1() {
        return (Action1) HolderDoNothing1.INSTANCE;
    }

    private static class HolderDoNothing2 {
        static final Action2 INSTANCE = new Action2() {

            @Override
            public void call(Object t, Object t2) {
                // do Nothing
            }
        };
    }

    @SuppressWarnings("unchecked")
    public static  Action2 doNothing2() {
        return (Action2) HolderDoNothing2.INSTANCE;
    }

    private static class HolderDoNothing3 {
        static final Action3 INSTANCE = new Action3() {

            @Override
            public void call(Object t, Object t2, Object t3) {
                // do Nothing
            }
        };
    }

    @SuppressWarnings("unchecked")
    public static  Action3 doNothing3() {
        return (Action3) HolderDoNothing3.INSTANCE;
    }

    public static Action0 unsubscribe(final Subscription subscription) {
        return new Action0() {
            @Override
            public void call() {
                subscription.unsubscribe();
            }
        };
    }

    public static  Action1 increment1(final AtomicInteger count) {
        return new Action1() {
            @Override
            public void call(T t) {
                count.incrementAndGet();
            }
        };
    }

    public static Action0 increment0(final AtomicInteger count) {
        return new Action0() {
            @Override
            public void call() {
                count.incrementAndGet();
            }
        };
    }

    public static  Action1 decrement1(final AtomicInteger count) {
        return new Action1() {
            @Override
            public void call(T t) {
                count.incrementAndGet();
            }
        };
    }

    public static Action0 decrement0(final AtomicInteger count) {
        return new Action0() {
            @Override
            public void call() {
                count.incrementAndGet();
            }
        };
    }

    public static Action1 addTo(final AtomicLong value) {
        return new Action1() {

            @Override
            public void call(Long t) {
                value.addAndGet(t);
            }
        };
    }

    @SuppressWarnings("unchecked")
    public static  Action1 println() {
        return (Action1) PrintlnHolder.instance;
    }

    private static class PrintlnHolder {
        static final Action1 instance = new Action1() {
            @Override
            public void call(Object t) {
                System.out.println(t);
            }
        };
    }

    public static  Action1 setToTrue1(final AtomicBoolean ref) {
        return new Action1() {

            @Override
            public void call(T t) {
                ref.set(true);
            }
        };
    }

    public static Action0 setToTrue0(final AtomicBoolean ref) {
        return new Action0() {

            @Override
            public void call() {
                ref.set(true);
            }
        };
    }

    public static Action0 countDown(final CountDownLatch latch) {
        return new Action0() {

            @Override
            public void call() {
                latch.countDown();
            }
        };
    }
    
    public static  Action1 countDown1(final CountDownLatch latch) {
        return new Action1() {

            @Override
            public void call(T t) {
                latch.countDown();
            }
        };
    }

    public static Action1 printStackTrace1() {
        return PrintStackTrace1Holder.instance;
    }

    private static class PrintStackTrace1Holder {
        static final Action1 instance = new Action1() {

            @Override
            public void call(Throwable t) {
                t.printStackTrace();
            }
        };
    }

    public static Action0 throw0(final RuntimeException ex) {
        return new Action0() {

            @Override
            public void call() {
                throw ex;
            }
        };
    }

    public static Action1 close() {
        return CloseHolder.INSTANCE;
    }

    private static final class CloseHolder {
        
        final static Action1 INSTANCE = new Action1() {

            @Override
            public void call(Closeable c) {
                try {
                    c.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        };
    }

}