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
00028 #include "csgeom/poly2d.h"
00029
00036 class csPoly2DPool
00037 {
00038 private:
00039 struct PoolObj
00040 {
00041 PoolObj* next;
00042 csPoly2D* pol2d;
00043 };
00045 PoolObj* alloced;
00047 PoolObj* freed;
00048
00049
00050 csPoly2DFactory* factory;
00051
00052 public:
00054 csPoly2DPool (csPoly2DFactory* fact) : alloced (0), freed (0),
00055 factory (fact) { }
00056
00058 ~csPoly2DPool ()
00059 {
00060 while (alloced)
00061 {
00062 PoolObj* n = alloced->next;
00063
00064
00065
00066
00067 delete alloced;
00068 alloced = n;
00069 }
00070 while (freed)
00071 {
00072 PoolObj* n = freed->next;
00073 delete freed->pol2d;
00074 delete freed;
00075 freed = n;
00076 }
00077 }
00078
00080 csPoly2D* Alloc ()
00081 {
00082 PoolObj* pnew;
00083 if (freed)
00084 {
00085 pnew = freed;
00086 freed = freed->next;
00087 }
00088 else
00089 {
00090 pnew = new PoolObj ();
00091 pnew->pol2d = factory->Create ();
00092 }
00093 pnew->next = alloced;
00094 alloced = pnew;
00095 return pnew->pol2d;
00096 }
00097
00103 void Free (csPoly2D* pol)
00104 {
00105 if (alloced)
00106 {
00107 PoolObj* po = alloced;
00108 alloced = alloced->next;
00109 po->pol2d = pol;
00110 po->next = freed;
00111 freed = po;
00112 }
00113 else
00114 {
00115
00116 CS_ASSERT (false);
00117 }
00118 }
00119 };
00120
00123 #endif // __CS_POLYPOOL_H__