Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_POLYPOOL_H__
00020 #define __CS_POLYPOOL_H__
00021
00029 #include "csextern.h"
00030
00031 #include "csgeom/poly2d.h"
00032
00039 class csPoly2DPool
00040 {
00041 private:
00042 struct PoolObj
00043 {
00044 PoolObj* next;
00045 csPoly2D* pol2d;
00046 };
00048 PoolObj* alloced;
00050 PoolObj* freed;
00051
00052
00053 csPoly2DFactory* factory;
00054
00055 public:
00057 csPoly2DPool (csPoly2DFactory* fact) : alloced (0), freed (0),
00058 factory (fact) { }
00059
00061 ~csPoly2DPool ()
00062 {
00063 while (alloced)
00064 {
00065 PoolObj* n = alloced->next;
00066
00067
00068
00069
00070 delete alloced;
00071 alloced = n;
00072 }
00073 while (freed)
00074 {
00075 PoolObj* n = freed->next;
00076 delete freed->pol2d;
00077 delete freed;
00078 freed = n;
00079 }
00080 }
00081
00083 csPoly2D* Alloc ()
00084 {
00085 PoolObj* pnew;
00086 if (freed)
00087 {
00088 pnew = freed;
00089 freed = freed->next;
00090 }
00091 else
00092 {
00093 pnew = new PoolObj ();
00094 pnew->pol2d = factory->Create ();
00095 }
00096 pnew->next = alloced;
00097 alloced = pnew;
00098 return pnew->pol2d;
00099 }
00100
00106 void Free (csPoly2D* pol)
00107 {
00108 if (alloced)
00109 {
00110 PoolObj* po = alloced;
00111 alloced = alloced->next;
00112 po->pol2d = pol;
00113 po->next = freed;
00114 freed = po;
00115 }
00116 else
00117 {
00118
00119 CS_ASSERT (false);
00120 }
00121 }
00122 };
00123
00126 #endif // __CS_POLYPOOL_H__