Advertisement
Slapoguzov

Untitled

May 19th, 2014
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.59 KB | None | 0 0
  1.  ///Попытаться поместить элемент в буфер
  2.  ///</summary>
  3.  ///<param name="item">Новый элемент</param>
  4.  ///<returns>true, если удалось поместить элемент, иначе - false</returns>
  5.  bool TryPut(T item);
  6.  ///<summary>
  7.  ///Попытаться получить элемент из буфера
  8.  ///</summary>
  9.  ///<param name="item">Полученный элемент</param>
  10.  ///<returns>true, если удалось получить элемент, иначе - false</returns>
  11.  bool TryGet(out T item);
  12. }
  13.  
  14.  
  15.     public class RingBuffer<T> : IRingBuffer<T>
  16.     {
  17.         private int size;
  18.         public int freeSapce;
  19.  
  20.         private int first;
  21.         private int last;
  22.  
  23.         public int Size
  24.         {
  25.             get
  26.             {
  27.                 return size;
  28.             }
  29.         }
  30.         public int FreeSapce
  31.         {
  32.  
  33.             get
  34.             {
  35.                 return freeSapce;
  36.             }
  37.  
  38.         }
  39.  
  40.         private T[] buffer;
  41.  
  42.         public RingBuffer()
  43.         {
  44.             buffer = new T[100];
  45.             this.size = 100;
  46.             this.freeSapce = 100;
  47.  
  48.             first = size / 2;
  49.             last = first;
  50.         }
  51.  
  52.         public RingBuffer(int size)
  53.         {
  54.             buffer = new T[size];
  55.             this.size = size;
  56.             this.freeSapce = size;
  57.  
  58.             first = size / 2;
  59.             last = first;
  60.         }
  61.  
  62.         public bool TryPut(T item)
  63.         {
  64.             if (freeSapce > 0)
  65.             {
  66.                 if (last < size)
  67.                 {
  68.                     buffer[last] = item;
  69.                     last++;
  70.  
  71.                 }
  72.                 else
  73.                 {
  74.                     buffer[size - last] = item;
  75.                     last = size - last;
  76.                 }
  77.                 freeSapce--;
  78.                 return true;
  79.             }
  80.             else
  81.             {
  82.                 return false;
  83.             }
  84.         }
  85.  
  86.         public bool TryGet(out T item)
  87.         {
  88.             try
  89.             {
  90.                 item = buffer[last];
  91.                 return true;
  92.             }
  93.             catch
  94.             {
  95.                 item = buffer[0];                       //костыль. Мы обязательно должны вернуть какое-то значение, но какое если произошла ошибка?
  96.                 return false;
  97.             }
  98.  
  99.         }
  100.  
  101.     }
  102.     class Program
  103.     {
  104.         static void Main(string[] args)
  105.         {
  106.         }
  107.     }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement