Advertisement
Guest User

Untitled

a guest
Mar 6th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package utils
  2. {
  3.    
  4.     import flash.utils.describeType;
  5.    
  6.     import utils.IPoolable;
  7.    
  8.     public class ObjectPool
  9.     {
  10.        
  11.         private var _pool:Vector.<IPoolable>;
  12.         private var _nextObject:IPoolable;
  13.         private var _objectType:Class;
  14.         private var _activeCount:int = 0; //The number of objects that are in use.
  15.        
  16.         public function ObjectPool(object:Class, size:uint, expandable:Boolean = true ) {
  17.            
  18.             //if (!(describeType(object)).factory.implementsInterface.(@type == "IPoolable").length() > 0) {
  19.             //  throw new Error("object parameter does not implement interface IPoolable.");
  20.             //  return;
  21.             //}
  22.            
  23.             this._objectType = object;
  24.             this._pool = new Vector.<IPoolable>(size, !expandable);
  25.             _pool[size - 1] = new object(this);
  26.             for (var i:int = _pool.length - 2; i >= 0; i-- ) {
  27.                 _pool[i] = new object(this);
  28.                 _pool[i].nextObject = _pool[i + 1];
  29.             }
  30.             _nextObject = IPoolable(_pool[0]);
  31.            
  32.         }
  33.        
  34.         public function getNext():IPoolable {
  35.            
  36.             var obj:IPoolable = null;
  37.            
  38.             if (!_nextObject) {
  39.                 if (_pool.fixed) {
  40.                     trace("Cannot return an object.  Object pool has no available objects and is static.");
  41.                     return null;
  42.                 }
  43.                 else {
  44.                     obj = new _objectType(this);
  45.                     _pool.push(obj);
  46.                     _activeCount++;
  47.                 }
  48.             }
  49.             else {
  50.                 obj = _nextObject;
  51.                 _nextObject = _nextObject.nextObject;
  52.                 _activeCount++;
  53.             }
  54.            
  55.             return obj;
  56.            
  57.         }
  58.        
  59.         public function recycle(object:IPoolable):void {
  60.             _activeCount--;
  61.             object.nextObject = _nextObject;
  62.             _nextObject = object;
  63.         }
  64.        
  65.         public function get activeCount():int {
  66.             return _activeCount;
  67.         }
  68.         public function get pool():Vector.<IPoolable> {
  69.             return _pool;
  70.         }
  71.        
  72.         public function trash():void
  73.         {
  74.             _pool = null;
  75.             _nextObject = null;
  76.             _objectType = null;
  77.             _activeCount = 0;
  78.             //this = null;
  79.         }
  80.        
  81.     }
  82.  
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement