public void Request(long n)
 {
     if (SubscriptionHelper.Validate(n))
     {
         SubscriptionHelper.AddRequest(ref requested, n);
         Drain();
     }
 }
Ejemplo n.º 2
0
 public void Request(long n)
 {
     if (n <= 0)
     {
         throw new ArgumentOutOfRangeException(nameof(n));
     }
     SubscriptionHelper.AddRequest(ref requested, n);
     Drain();
 }
 public void Request(long n)
 {
     if (SubscriptionHelper.Validate(n))
     {
         if (SubscriptionHelper.AddRequest(ref requested, n) == 0)
         {
             OnRequest(n);
         }
     }
 }
 void Request(int index, long n)
 {
     if (SubscriptionHelper.Validate(n))
     {
         SubscriptionHelper.AddRequest(ref subscribers[index].requested, n);
     }
     if (Volatile.Read(ref initDone))
     {
         Drain();
     }
 }
Ejemplo n.º 5
0
 public void Request(long n)
 {
     if (SubscriptionHelper.Validate(n))
     {
         SubscriptionHelper.AddRequest(ref requested, n);
         if (Volatile.Read(ref done) == 0)
         {
             Drain();
         }
     }
 }
Ejemplo n.º 6
0
            public void Request(long n)
            {
                if (n <= 0L)
                {
                    throw new ArgumentOutOfRangeException(nameof(n));
                }
                if (SubscriptionHelper.AddRequest(ref requested, n) == 0)
                {
                    int  idx = index;
                    int  f   = end;
                    long e   = 0;
                    IConditionalSubscriber <int> a = actual;

                    for (;;)
                    {
                        while (idx != f && e != n)
                        {
                            if (Volatile.Read(ref cancelled))
                            {
                                return;
                            }

                            if (a.TryOnNext(idx))
                            {
                                e++;
                            }

                            idx++;
                        }

                        if (idx == f)
                        {
                            if (!Volatile.Read(ref cancelled))
                            {
                                a.OnComplete();
                            }
                            return;
                        }

                        n = Volatile.Read(ref requested);
                        if (e == n)
                        {
                            index = idx;
                            n     = Interlocked.Add(ref requested, -n);
                            if (n == 0L)
                            {
                                break;
                            }
                            e = 0L;
                        }
                    }
                }
            }
Ejemplo n.º 7
0
 public void Request(long n)
 {
     if (SubscriptionHelper.Validate(n))
     {
         SubscriptionHelper.AddRequest(ref requested, n);
         if (outputFused)
         {
             DrainFused();
         }
         else
         {
             Drain();
         }
     }
 }
 public void Request(long n)
 {
     if (SubscriptionHelper.Validate(n))
     {
         SubscriptionHelper.AddRequest(ref requested, n);
         long u = SubscriptionHelper.MultiplyCap(n, size - skip);
         if (Volatile.Read(ref firstRequest) == 0 && Interlocked.CompareExchange(ref firstRequest, 1, 0) == 0)
         {
             u += skip;
             if (u < 0L)
             {
                 u = long.MaxValue;
             }
         }
         upstream.Request(u);
     }
 }
Ejemplo n.º 9
0
            public void Request(long n)
            {
                if (n <= 0L)
                {
                    throw new ArgumentOutOfRangeException(nameof(n));
                }
                if (SubscriptionHelper.AddRequest(ref requested, n) == 0)
                {
                    int  idx   = index;
                    T[]  array = this.array;
                    int  f     = array.Length;
                    long e     = 0;
                    IConditionalSubscriber <T> a = actual;

                    for (;;)
                    {
                        while (idx != f && e != n)
                        {
                            if (Volatile.Read(ref cancelled))
                            {
                                return;
                            }

                            T v = array[idx];

                            if (v == null)
                            {
                                a.OnError(new NullReferenceException("An array item was null"));
                                return;
                            }

                            if (a.TryOnNext(v))
                            {
                                e++;
                            }

                            idx++;
                        }

                        if (idx == f)
                        {
                            if (!Volatile.Read(ref cancelled))
                            {
                                a.OnComplete();
                            }
                            return;
                        }

                        n = Volatile.Read(ref requested);
                        if (e == n)
                        {
                            index = idx;
                            n     = Interlocked.Add(ref requested, -n);
                            if (n == 0L)
                            {
                                break;
                            }
                            e = 0L;
                        }
                    }
                }
            }