Datastructure-independent 3D Polygon functions
These functions work on any data-structures with callback functions (nowadays called: iterators). It gives you a big freedom to choose the appropriate data-storage format for your special needs, but you must provide these callbacks (iterators) for working.
What you should provide a general description of a polygon: number of contours and vertices, orientation, etc. And a callback function like a constant random iterator to polygon segments called here as edges. Each polygon segment consist of a vertex and an edge starting from it according to the orientation. Each segment should mark that it is an end of a contour or not. So there are no separate contour structure.
To get the results you must provide a callback function like a back-inserter iterator to a storage for the resulting polygons. And a callback function like a back-inserter iterator to a storage for the resulting segments (called edges too) for all polygons. The contour ends are marked in the segments.
These structures describe callback polygon.Geometry::PG3DEDGEEXT
These functions work on callback polygons.Geometry::PG3DPolyPositionExt