[geos-devel] Interface consistency

strk strk at keybit.net
Tue Jun 15 10:26:32 EDT 2004


On Tue, Jun 15, 2004 at 10:15:31AM -0400, Frank Warmerdam wrote:
> strk wrote:
> >Before releasing next GEOS I'd like to fix interface inconsistencies.
> >Namely some geometry constructors take ownership over passed
> >components:
> >
> >	o Polygon::Polygon(LinearRing *shell, vector<Geoemtry *> *holes)
> >		will not copy shell and holes, and destroy it at
> >		polygon destruction time.
> >
> >	o GeometryCollection::GeometryCollection(const vector<Geometry 
> >	*>*geoms)
> >		will copy vector, but not geoms, which it will destroy
> >		at GeometryCollection destruction time.
> >
> >	o MultiGEOM::MultiGEOM(const vector<GEOM *>*geoms)
> >		see GeoemtryCollection constructor
> >
> >Other geometry constructors all copy their arguments. I think this needs
> >to be fixed to "all-constructors-copy-arguments". This will break existing
> >applications, but if we make the change now I don't think there will be
> >so much applications involved.
> 
> Strk,
> 
> I ran up against a similar issue in GDAL and ended up having two forms of
> some of the "attach" methods.  For instance, I have an addRing() method on
> the OGRPolygon as well as an addRingDirectly().  The "directly" method takes
> ownership of the passed geometry and can save alot of clone/delete overhead
> in many common situations.
> 
> I gather that the only way to attach the subgeometries to a GEOS geometry
> is during the constructor, is that right?  That is, the geometries are
> essentially immutable after creation?   This makes it harder to have 
> explicit
> means to create attach the geometry with different rules via different named
> methods.

There is an apply_rw method by which geometry modification is possible.

> 
> I would suggest adding a "bool takeOwnership" argument to the constructors
> which is defaulted to false. This allows code that wants to avoid the
> clone/delete overhead to explicitly control ownership but returns the 
> default
> to a consistent approach.

This is what I was thinking about, unfortunately this would not be
transparent... 

> 
> I would add that behavioural changes like this are an awful source of bugs.
> All code written against GEOS so far will need careful review to see if this
> behavioural change affects them.  The sooner a change such as this is made,
> the better.

I know... anyway I'm sure this *really* needs to be done.

> 
> PS. My integration of GEOS into OGR is going very well.

Good to know :)

--strk;




More information about the geos-devel mailing list