Advertisement
Guest User

Untitled

a guest
Dec 10th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.15 KB | None | 0 0
  1.  public class CircularBuffer<T>
  2.     {
  3.         private readonly ConcurrentQueue<T> data;
  4.         private readonly ReaderWriterLockSlim lockQueue = new ReaderWriterLockSlim();
  5.         private readonly int size;
  6.  
  7.         public CircularBuffer(int size)
  8.         {
  9.             if (size < 1)
  10.             {
  11.                 throw new ArgumentException($"{nameof(size)} cannot be negative or zero");
  12.             }
  13.             data = new ConcurrentQueue<T>();
  14.             this.size = size;
  15.         }
  16.  
  17.         public IEnumerable<T> Latest()
  18.         {
  19.             return data.ToArray();
  20.         }
  21.         public T Take()
  22.         {
  23.             T value;
  24.             data.TryDequeue(out value);
  25.             return value;
  26.         }
  27.  
  28.         public void Put(T t)
  29.         {
  30.             lockQueue.EnterWriteLock();
  31.             try
  32.             {
  33.                 if (data.Count == size)
  34.                 {
  35.                     T value;
  36.                     data.TryDequeue(out value);
  37.                 }
  38.  
  39.                 data.Enqueue(t);
  40.             }
  41.             finally
  42.             {
  43.                 lockQueue.ExitWriteLock();
  44.             }
  45.         }
  46.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement