ObjectPool<T>
          class
        
        
class ObjectPool<T> {
 final List<T> _pool = new List<T>();
 final Function _valueFactory;
 int _poolCount = 0;
 ObjectPool(T valueFactory()) : _valueFactory = valueFactory;
 //---------------------------------------------------------------------------
 T pop() {
   if (_poolCount == 0) {
     return _valueFactory();
   } else {
     _poolCount--;
     return _pool[_poolCount];
   }
 }
 //---------------------------------------------------------------------------
 push(T value) {
   if (_poolCount == _pool.length) {
     _pool.add(value);
   } else {
     _pool[_poolCount] = value;
   }
   _poolCount++;
 }
 //---------------------------------------------------------------------------
 reset() {
   _pool.clear();
   _poolCount = 0;
 }
}
 
Constructors
new ObjectPool(T valueFactory()) #
Creates a new Object instance.
Object instances have no meaningful state, and are only useful
through their identity. An Object instance is equal to itself
only.
 
ObjectPool(T valueFactory()) : _valueFactory = valueFactory;
 
 
Methods
T pop() #
T pop() {
 if (_poolCount == 0) {
   return _valueFactory();
 } else {
   _poolCount--;
   return _pool[_poolCount];
 }
}
 
dynamic push(T value) #
push(T value) {
 if (_poolCount == _pool.length) {
   _pool.add(value);
 } else {
   _pool[_poolCount] = value;
 }
 _poolCount++;
}
 
dynamic reset() #
reset() {
 _pool.clear();
 _poolCount = 0;
}