Esempio n. 1
0
 /// <summary>
 /// Tries to get value from collection and return success status.
 /// Notifies if next value is ready.
 /// Resets enumerator if source is inexhaustible and last element of collection is already reached.
 /// </summary>
 /// <param name="value">Output parameter for pulled value.</param>
 /// <returns>True if value was successfully extracted or false otherwise.</returns>
 public override bool Pull(out T value)
 {
     if (_hasNext)
     {
         value    = _enumerator.Current;
         _hasNext = _enumerator.MoveNext();
         if (_hasNext || !_exhaustible)
         {
             ValueReady?.Invoke(this);
         }
         return(true);
     }
     else
     {
         if (!_exhaustible)
         {
             _enumerator.Reset();
             _hasNext = _enumerator.MoveNext();
             return(Pull(out value));
         }
         else
         {
             _exhausted = true;
             value      = default(T);
             return(false);
         }
     }
 }
Esempio n. 2
0
 /// <summary>
 /// Tries to get value and return success status. Notifies if next value is ready.
 /// </summary>
 /// <param name="value">Output parameter for pulled value.</param>
 /// <returns>True if value was successfully extracted or false otherwise.</returns>
 public override bool Pull(out T value)
 {
     if (!_exhausted)
     {
         value = _value;
         if (_exhaustible)
         {
             _exhausted = true;
         }
         else
         {
             ValueReady?.Invoke(this);
         }
         return(true);
     }
     value = default(T);
     return(false);
 }
Esempio n. 3
0
 /// <summary>
 /// Event handler method for ValueEnqueued event fired by inner queue.
 /// </summary>
 private void ValueEnqueued()
 {
     ValueReady?.Invoke(this);
 }