00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef GEOS_OP_UNION_GEOMETRYLISTHOLDER_H
00018 #define GEOS_OP_UNION_GEOMETRYLISTHOLDER_H
00019
00020
00021 namespace geos {
00022 namespace geom {
00023 class Geometry;
00024 }
00025 }
00026
00027 namespace geos {
00028 namespace operation {
00029 namespace geounion {
00030
00035 class GeometryListHolder : public std::vector<geom::Geometry*>
00036 {
00037 private:
00038 typedef std::vector<geom::Geometry*> base_type;
00039
00040 public:
00041 GeometryListHolder() {}
00042 ~GeometryListHolder()
00043 {
00044 std::for_each(ownedItems.begin(), ownedItems.end(),
00045 &GeometryListHolder::deleteItem);
00046 }
00047
00048
00049 void push_back_owned(geom::Geometry* item)
00050 {
00051 this->base_type::push_back(item);
00052 ownedItems.push_back(item);
00053 }
00054
00055 geom::Geometry* getGeometry(std::size_t index)
00056 {
00057 if (index >= this->base_type::size())
00058 return NULL;
00059 return (*this)[index];
00060 }
00061
00062 private:
00063 static void deleteItem(geom::Geometry* item);
00064
00065 private:
00066 std::vector<geom::Geometry*> ownedItems;
00067 };
00068
00069 }
00070 }
00071 }
00072
00073 #endif