/**
 * Copyright 2013 Netflix, Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package rx.subscriptions;

import java.util.concurrent.atomic.AtomicBoolean;

import rx.Observable;
import rx.Subscription;

/**
 * Subscription that can be checked for status such as in a loop inside an {@link Observable} to exit the loop if unsubscribed.
 * 
 * @see <a href="http://msdn.microsoft.com/en-us/library/system.reactive.disposables.booleandisposable(v=vs.103).aspx">Rx.Net equivalent BooleanDisposable</a>
 */
public class BooleanSubscription implements Subscription {

    private final AtomicBoolean unsubscribed = new AtomicBoolean(false);

    public boolean isUnsubscribed() {
        return unsubscribed.get();
    }

    @Override
    public void unsubscribe() {
        unsubscribed.set(true);
    }

}

@@ -713,16 +713,50 @@
 ription;
+%0Aimport rx.util.functions.Action0;
 %0A%0A/**%0A *
@@ -1180,16 +1180,432 @@
 (false);
+%0A    private final Action0 action;%0A%0A    public BooleanSubscription() %7B%0A        action = null;%0A    %7D%0A%0A    private BooleanSubscription(Action0 action) %7B%0A        this.action = action;%0A    %7D%0A%0A    public static BooleanSubscription create() %7B%0A        return new BooleanSubscription();%0A    %7D%0A%0A    public static BooleanSubscription create(Action0 onUnsubscribe) %7B%0A        return new BooleanSubscription(onUnsubscribe);%0A    %7D
 %0A%0A    pu
@@ -1703,16 +1703,22 @@
  public 
+final 
 void uns
@@ -1738,16 +1738,20 @@
         
+if (
 unsubscr
@@ -1759,18 +1759,126 @@
 bed.
-set(true);
+compareAndSet(false, true)) %7B%0A            if (action != null) %7B%0A                action.call();%0A            %7D%0A        %7D
 %0A   

Add Action Support