77    std::unique_ptr<CoordinateSequence> shellRing;
 
   78    std::vector<std::unique_ptr<CoordinateSequence>> holeRings;
 
   81    std::vector<bool> isHoleTouchingHint;
 
   86    std::set<Coordinate> joinedPts;
 
   88    std::unique_ptr<SegmentSetMutualIntersector> boundaryIntersector;
 
   91    std::vector<std::unique_ptr<BasicSegmentString>> polySegStringStore;
 
   95    class InteriorIntersectionDetector;
 
   96    friend class PolygonHoleJoiner::InteriorIntersectionDetector;
 
   99    void extractOrientedRings(
const Polygon* polygon);
 
  100    static std::unique_ptr<CoordinateSequence> extractOrientedRing(
const LinearRing* ring, 
bool isCW);
 
  131    void joinNonTouchingHole(
 
  147    std::size_t findJoinIndex(
 
  160    static bool isLineInterior(
 
  162        std::size_t ringIndex,
 
  165    static std::size_t prev(std::size_t i, std::size_t size);
 
  166    static std::size_t next(std::size_t i, std::size_t size);
 
  181        std::size_t joinIndex,
 
  183        std::size_t holeJoinIndex);
 
  195    std::vector<Coordinate> createHoleSection(
 
  197        std::size_t holeJoinIndex,
 
  206    static std::vector<const LinearRing*> sortHoles(
 
  209    static std::size_t findLowestLeftVertexIndex(
 
  220    bool intersectsBoundary(
 
  224    std::unique_ptr<SegmentSetMutualIntersector> createBoundaryIntersector();
 
  230        : inputPolygon(p_inputPolygon)
 
  231        , boundaryIntersector(
nullptr)
 
  242        const Polygon* p_inputPolygon);
 
  251    static std::unique_ptr<CoordinateSequence> 
join(
 
  252        const Polygon* p_inputPolygon);
 
  259    std::unique_ptr<CoordinateSequence> 
compute();