Advertisement
Guest User

Untitled

a guest
Oct 8th, 2015
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.91 KB | None | 0 0
  1.     [Serializable]
  2.     public abstract class LoaderStateBase<TState, T>
  3.         where T : IEquatable<T>
  4.         where TState : LoaderStateBase<TState, T>
  5.     {
  6.         HashSet<T> _failure;
  7.         HashSet<T> _noResults;
  8.         HashSet<T> _partial;
  9.         HashSet<T> _queue;
  10.         HashSet<T> _success;
  11.  
  12.         protected LoaderStateBase()
  13.         {
  14.         }
  15.  
  16.         protected LoaderStateBase(HashSet<T> queue, HashSet<T> success, HashSet<T> failure, HashSet<T> noResults,
  17.             HashSet<T> partial)
  18.         {
  19.             _queue = queue;
  20.             _success = success;
  21.             _failure = failure;
  22.             _noResults = noResults;
  23.             _partial = partial;
  24.         }
  25.  
  26.        
  27.         protected abstract TState Create(HashSet<T> queue,
  28.                                          HashSet<T> success,
  29.                                          HashSet<T> failure,
  30.                                          HashSet<T> noResults,
  31.                                          HashSet<T> @partial);
  32.  
  33.         protected abstract T[] ToSortedArray(HashSet<T> items);
  34.        
  35.         public LoaderInfo LastLoaderInfo { get; set; }
  36.  
  37.         public T[] Queue
  38.         {
  39.             get { return ToSortedArray(_queue); }
  40.             set { _queue = new HashSet<T>(value ?? new T[0]); }
  41.         }
  42.  
  43.         public T[] Success
  44.         {
  45.             get { return ToSortedArray(_success); }
  46.             set { _success = new HashSet<T>(value ?? new T[0]); }
  47.         }
  48.  
  49.         public T[] Failure
  50.         {
  51.             get { return ToSortedArray(_failure); }
  52.             set { _failure = new HashSet<T>(value ?? new T[0]); }
  53.         }
  54.  
  55.         public T[] NoResults
  56.         {
  57.             get { return ToSortedArray(_noResults); }
  58.             set { _noResults = new HashSet<T>(value ?? new T[0]); }
  59.         }
  60.        
  61.         public T[] Partial
  62.         {
  63.             get { return ToSortedArray(_partial); }
  64.             set { _partial = new HashSet<T>(value ?? new T[0]); }
  65.         }
  66.  
  67.         public TState Enqueue(IEnumerable<T> items)
  68.         {
  69.             var queue = new HashSet<T>(Queue);
  70.             foreach (var item in items)
  71.                 queue.Add(item);
  72.             foreach (var item in Success)
  73.                 queue.Remove(item);
  74.             foreach (var item in Failure)
  75.                 queue.Remove(item);
  76.             foreach (var item in Partial)
  77.                 queue.Remove(item);
  78.             foreach (var item in NoResults)
  79.                 queue.Remove(item);
  80.             return Create(queue, _success, _failure, _noResults, _partial);
  81.         }
  82.  
  83.         public int GetQueueCount()
  84.         {
  85.             return _queue.Count;
  86.         }
  87.  
  88.         public TState Merge(IEnumerable<ExternalLoaderResult<T>> loaderResult)
  89.         {
  90.             var queue = new HashSet<T>(Queue);
  91.             var success = new HashSet<T>(Success);
  92.             var failure = new HashSet<T>(Failure);
  93.             var partial = new HashSet<T>(Partial);
  94.             var noResults = new HashSet<T>(NoResults);
  95.             foreach (var resultItem in loaderResult)
  96.             {
  97.                 queue.Remove(resultItem.ExternalItem);
  98.                 switch (resultItem.State)
  99.                 {
  100.                     case TransformerResultState.Completed:
  101.                         success.Add(resultItem.ExternalItem);
  102.                         break;
  103.                     case TransformerResultState.Failed:
  104.                         failure.Add(resultItem.ExternalItem);
  105.                         break;
  106.                     case TransformerResultState.FailedEmpty:
  107.                         noResults.Add(resultItem.ExternalItem);
  108.                         break;
  109.                     case TransformerResultState.FailedPartial:
  110.                         partial.Add(resultItem.ExternalItem);
  111.                         break;
  112.                 }
  113.             }
  114.             return Create(queue, success, failure, noResults, partial);
  115.         }
  116.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement