Advertisement
Guest User

Hose<T>

a guest
Jun 9th, 2011
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.06 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace R_01.classes
  5. {
  6.     public class hose<T>
  7.         where T : class, new()
  8.     {
  9.         private Queue<T> objectPool;
  10.         public int count;
  11.         public int numFree;
  12.         private bool lockObjects;
  13.  
  14.         public hose()
  15.         {
  16.             objectPool = new Queue<T>();
  17.             lockObjects = false;
  18.             numFree = 0;
  19.             count = 0;
  20.         }
  21.         public T get()
  22.         {
  23.             while (lockObjects && !gameData.exiting) { }
  24.             lockObjects = true;
  25.  
  26.             T obj;
  27.  
  28.             lock (objectPool)
  29.             {
  30.                 try
  31.                 {
  32.                     if (numFree > 0)
  33.                     {
  34.                         obj = objectPool.Dequeue();
  35.                         numFree--;
  36.                         if (obj == null)
  37.                         {
  38.                             obj = new T();
  39.                             count++;
  40.                         }
  41.                     }
  42.                     else
  43.                     {
  44.                         obj = new T();
  45.                         count++;
  46.                     }
  47.                 }
  48.                 catch (Exception ex)
  49.                 {
  50.                     ex.ToString();
  51.                     obj = new T();
  52.                     count++;
  53.                 }
  54.                 finally
  55.                 {
  56.                     lockObjects = false;
  57.                 }
  58.             }
  59.  
  60.             return obj;
  61.         }
  62.         public void put(T obj)
  63.         {
  64.             while (lockObjects && !gameData.exiting) { }
  65.             lockObjects = true;
  66.  
  67.             lock (objectPool)
  68.             {
  69.                 try
  70.                 {
  71.                     objectPool.Enqueue(obj);
  72.                     numFree++;
  73.                 }
  74.                 catch (Exception ex)
  75.                 {
  76.                     ex.ToString();
  77.                 }
  78.                 finally
  79.                 {
  80.                     lockObjects = false;
  81.                 }
  82.             }
  83.         }
  84.     }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement