OperatorMulticast.smali
.class public final Lrx/internal/operators/OperatorMulticast;
.super Lrx/observables/ConnectableObservable;
.source "OperatorMulticast.java"
# annotations
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
"R:",
"Ljava/lang/Object;",
">",
"Lrx/observables/ConnectableObservable<",
"TR;>;"
}
.end annotation
# instance fields
.field final connectedSubject:Ljava/util/concurrent/atomic/AtomicReference;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/concurrent/atomic/AtomicReference<",
"Lrx/subjects/Subject<",
"-TT;+TR;>;>;"
}
.end annotation
.end field
.field final guard:Ljava/lang/Object;
.field guardedSubscription:Lrx/Subscription;
.field final source:Lrx/Observable;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lrx/Observable<",
"+TT;>;"
}
.end annotation
.end field
.field final subjectFactory:Lrx/functions/Func0;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lrx/functions/Func0<",
"+",
"Lrx/subjects/Subject<",
"-TT;+TR;>;>;"
}
.end annotation
.end field
.field subscription:Lrx/Subscriber;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lrx/Subscriber<",
"TT;>;"
}
.end annotation
.end field
.field final waitingForConnect:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lrx/Subscriber<",
"-TR;>;>;"
}
.end annotation
.end field
# direct methods
.method private constructor <init>(Ljava/lang/Object;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/List;Lrx/Observable;Lrx/functions/Func0;)V
.registers 7
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/lang/Object;",
"Ljava/util/concurrent/atomic/AtomicReference<",
"Lrx/subjects/Subject<",
"-TT;+TR;>;>;",
"Ljava/util/List<",
"Lrx/Subscriber<",
"-TR;>;>;",
"Lrx/Observable<",
"+TT;>;",
"Lrx/functions/Func0<",
"+",
"Lrx/subjects/Subject<",
"-TT;+TR;>;>;)V"
}
.end annotation
.line 2
new-instance v0, Lrx/internal/operators/OperatorMulticast$1;
invoke-direct {v0, p1, p2, p3}, Lrx/internal/operators/OperatorMulticast$1;-><init>(Ljava/lang/Object;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/List;)V
invoke-direct {p0, v0}, Lrx/observables/ConnectableObservable;-><init>(Lrx/Observable$OnSubscribe;)V
.line 3
iput-object p1, p0, Lrx/internal/operators/OperatorMulticast;->guard:Ljava/lang/Object;
.line 4
iput-object p2, p0, Lrx/internal/operators/OperatorMulticast;->connectedSubject:Ljava/util/concurrent/atomic/AtomicReference;
.line 5
iput-object p3, p0, Lrx/internal/operators/OperatorMulticast;->waitingForConnect:Ljava/util/List;
.line 6
iput-object p4, p0, Lrx/internal/operators/OperatorMulticast;->source:Lrx/Observable;
.line 7
iput-object p5, p0, Lrx/internal/operators/OperatorMulticast;->subjectFactory:Lrx/functions/Func0;
return-void
.end method
.method public constructor <init>(Lrx/Observable;Lrx/functions/Func0;)V
.registers 9
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lrx/Observable<",
"+TT;>;",
"Lrx/functions/Func0<",
"+",
"Lrx/subjects/Subject<",
"-TT;+TR;>;>;)V"
}
.end annotation
.line 1
new-instance v1, Ljava/lang/Object;
invoke-direct {v1}, Ljava/lang/Object;-><init>()V
new-instance v2, Ljava/util/concurrent/atomic/AtomicReference;
invoke-direct {v2}, Ljava/util/concurrent/atomic/AtomicReference;-><init>()V
new-instance v3, Ljava/util/ArrayList;
invoke-direct {v3}, Ljava/util/ArrayList;-><init>()V
move-object v0, p0
move-object v4, p1
move-object v5, p2
invoke-direct/range {v0 .. v5}, Lrx/internal/operators/OperatorMulticast;-><init>(Ljava/lang/Object;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/List;Lrx/Observable;Lrx/functions/Func0;)V
return-void
.end method
# virtual methods
.method public connect(Lrx/functions/Action1;)V
.registers 7
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lrx/functions/Action1<",
"-",
"Lrx/Subscription;",
">;)V"
}
.end annotation
.line 1
iget-object v0, p0, Lrx/internal/operators/OperatorMulticast;->guard:Ljava/lang/Object;
monitor-enter v0
.line 2
:try_start_3
iget-object v1, p0, Lrx/internal/operators/OperatorMulticast;->subscription:Lrx/Subscriber;
if-eqz v1, :cond_e
.line 3
iget-object v1, p0, Lrx/internal/operators/OperatorMulticast;->guardedSubscription:Lrx/Subscription;
invoke-interface {p1, v1}, Lrx/functions/Action1;->call(Ljava/lang/Object;)V
.line 4
monitor-exit v0
return-void
.line 5
:cond_e
iget-object v1, p0, Lrx/internal/operators/OperatorMulticast;->subjectFactory:Lrx/functions/Func0;
invoke-interface {v1}, Lrx/functions/Func0;->call()Ljava/lang/Object;
move-result-object v1
check-cast v1, Lrx/subjects/Subject;
.line 6
invoke-static {v1}, Lrx/observers/Subscribers;->from(Lrx/Observer;)Lrx/Subscriber;
move-result-object v2
iput-object v2, p0, Lrx/internal/operators/OperatorMulticast;->subscription:Lrx/Subscriber;
.line 7
new-instance v2, Ljava/util/concurrent/atomic/AtomicReference;
invoke-direct {v2}, Ljava/util/concurrent/atomic/AtomicReference;-><init>()V
.line 8
new-instance v3, Lrx/internal/operators/OperatorMulticast$2;
invoke-direct {v3, p0, v2}, Lrx/internal/operators/OperatorMulticast$2;-><init>(Lrx/internal/operators/OperatorMulticast;Ljava/util/concurrent/atomic/AtomicReference;)V
invoke-static {v3}, Lrx/subscriptions/Subscriptions;->create(Lrx/functions/Action0;)Lrx/Subscription;
move-result-object v3
invoke-virtual {v2, v3}, Ljava/util/concurrent/atomic/AtomicReference;->set(Ljava/lang/Object;)V
.line 9
invoke-virtual {v2}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
move-result-object v2
check-cast v2, Lrx/Subscription;
iput-object v2, p0, Lrx/internal/operators/OperatorMulticast;->guardedSubscription:Lrx/Subscription;
.line 10
iget-object v2, p0, Lrx/internal/operators/OperatorMulticast;->waitingForConnect:Ljava/util/List;
invoke-interface {v2}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_3b
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v3
if-eqz v3, :cond_50
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v3
check-cast v3, Lrx/Subscriber;
.line 11
new-instance v4, Lrx/internal/operators/OperatorMulticast$3;
invoke-direct {v4, p0, v3, v3}, Lrx/internal/operators/OperatorMulticast$3;-><init>(Lrx/internal/operators/OperatorMulticast;Lrx/Subscriber;Lrx/Subscriber;)V
invoke-virtual {v1, v4}, Lrx/Observable;->unsafeSubscribe(Lrx/Subscriber;)Lrx/Subscription;
goto :goto_3b
.line 12
:cond_50
iget-object v2, p0, Lrx/internal/operators/OperatorMulticast;->waitingForConnect:Ljava/util/List;
invoke-interface {v2}, Ljava/util/List;->clear()V
.line 13
iget-object v2, p0, Lrx/internal/operators/OperatorMulticast;->connectedSubject:Ljava/util/concurrent/atomic/AtomicReference;
invoke-virtual {v2, v1}, Ljava/util/concurrent/atomic/AtomicReference;->set(Ljava/lang/Object;)V
.line 14
monitor-exit v0
:try_end_5b
.catchall {:try_start_3 .. :try_end_5b} :catchall_71
.line 15
iget-object v0, p0, Lrx/internal/operators/OperatorMulticast;->guardedSubscription:Lrx/Subscription;
invoke-interface {p1, v0}, Lrx/functions/Action1;->call(Ljava/lang/Object;)V
.line 16
iget-object p1, p0, Lrx/internal/operators/OperatorMulticast;->guard:Ljava/lang/Object;
monitor-enter p1
.line 17
:try_start_63
iget-object v0, p0, Lrx/internal/operators/OperatorMulticast;->subscription:Lrx/Subscriber;
.line 18
monitor-exit p1
:try_end_66
.catchall {:try_start_63 .. :try_end_66} :catchall_6e
if-eqz v0, :cond_6d
.line 19
iget-object p1, p0, Lrx/internal/operators/OperatorMulticast;->source:Lrx/Observable;
invoke-virtual {p1, v0}, Lrx/Observable;->subscribe(Lrx/Subscriber;)Lrx/Subscription;
:cond_6d
return-void
:catchall_6e
move-exception v0
.line 20
:try_start_6f
monitor-exit p1
:try_end_70
.catchall {:try_start_6f .. :try_end_70} :catchall_6e
throw v0
:catchall_71
move-exception p1
.line 21
:try_start_72
monitor-exit v0
:try_end_73
.catchall {:try_start_72 .. :try_end_73} :catchall_71
goto :goto_75
:goto_74
throw p1
:goto_75
goto :goto_74
.end method