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