generic_pool.H 541 B

1234567891011121314151617181920212223242526272829
  1. template<class T, int max>class genericPool
  2. {
  3. public:
  4. Delegate<T()> doCreate;
  5. Delegate<void(T)> doDestroy;
  6. genericPool(Delegate<T()> c, Delegate<void(T)> d):doCreate(c),doDestroy(d) {}
  7. struct item {
  8. T data;
  9. };
  10. item items[max];
  11. int itemCount=0;
  12. T get() {
  13. if(itemCount>0) {
  14. return items[--itemCount].data;
  15. }
  16. return doCreate();
  17. }
  18. void put(T obj) {
  19. if(itemCount>=max) doDestroy(obj);
  20. else {
  21. items[itemCount++].data=obj;
  22. }
  23. }
  24. ~genericPool() {
  25. for(int i=0;i<itemCount;i++) {
  26. doDestroy(items[i].data);
  27. }
  28. }
  29. };