Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package utils
- {
- import flash.utils.describeType;
- import utils.IPoolable;
- public class ObjectPool
- {
- private var _pool:Vector.<IPoolable>;
- private var _nextObject:IPoolable;
- private var _objectType:Class;
- private var _activeCount:int = 0; //The number of objects that are in use.
- public function ObjectPool(object:Class, size:uint, expandable:Boolean = true ) {
- //if (!(describeType(object)).factory.implementsInterface.(@type == "IPoolable").length() > 0) {
- // throw new Error("object parameter does not implement interface IPoolable.");
- // return;
- //}
- this._objectType = object;
- this._pool = new Vector.<IPoolable>(size, !expandable);
- _pool[size - 1] = new object(this);
- for (var i:int = _pool.length - 2; i >= 0; i-- ) {
- _pool[i] = new object(this);
- _pool[i].nextObject = _pool[i + 1];
- }
- _nextObject = IPoolable(_pool[0]);
- }
- public function getNext():IPoolable {
- var obj:IPoolable = null;
- if (!_nextObject) {
- if (_pool.fixed) {
- trace("Cannot return an object. Object pool has no available objects and is static.");
- return null;
- }
- else {
- obj = new _objectType(this);
- _pool.push(obj);
- _activeCount++;
- }
- }
- else {
- obj = _nextObject;
- _nextObject = _nextObject.nextObject;
- _activeCount++;
- }
- return obj;
- }
- public function recycle(object:IPoolable):void {
- _activeCount--;
- object.nextObject = _nextObject;
- _nextObject = object;
- }
- public function get activeCount():int {
- return _activeCount;
- }
- public function get pool():Vector.<IPoolable> {
- return _pool;
- }
- public function trash():void
- {
- _pool = null;
- _nextObject = null;
- _objectType = null;
- _activeCount = 0;
- //this = null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement