pool_factory.js 873 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import {
  2. createSizedArray,
  3. } from '../helpers/arrays';
  4. import pooling from './pooling';
  5. const poolFactory = (function () {
  6. return function (initialLength, _create, _release) {
  7. var _length = 0;
  8. var _maxLength = initialLength;
  9. var pool = createSizedArray(_maxLength);
  10. var ob = {
  11. newElement: newElement,
  12. release: release,
  13. };
  14. function newElement() {
  15. var element;
  16. if (_length) {
  17. _length -= 1;
  18. element = pool[_length];
  19. } else {
  20. element = _create();
  21. }
  22. return element;
  23. }
  24. function release(element) {
  25. if (_length === _maxLength) {
  26. pool = pooling.double(pool);
  27. _maxLength *= 2;
  28. }
  29. if (_release) {
  30. _release(element);
  31. }
  32. pool[_length] = element;
  33. _length += 1;
  34. }
  35. return ob;
  36. };
  37. }());
  38. export default poolFactory;