MODULE = Geo::Geos                PACKAGE = Geo::Geos::Triangle
PROTOTYPES: DISABLE

Triangle* new(SV*, Coordinate& p0, Coordinate& p1, Coordinate& p2)

Coordinate* Triangle::p0(Coordinate* newval = NULL) : ALIAS(p1=1,p2=2) {
    Coordinate* val;
    switch (ix) {
        case 0:  val = &THIS->p0; break;
        case 1:  val = &THIS->p1; break;
        default: val = &THIS->p2; break;
    }
    if (newval) {
        *val = *newval;
    }
    RETVAL = new Coordinate(*val);
}

Coordinate* Triangle::inCentre() {
    Coordinate c;
    THIS->inCentre(c);
    RETVAL = new Coordinate(c);
}

Coordinate* Triangle::circumcentre() {
    Coordinate c;
    THIS->circumcentre(c);
    RETVAL = new Coordinate(c);
}

bool isInCircleNonRobust(Coordinate& a, Coordinate& b, Coordinate& c, Coordinate& p): ALIAS(isInCircleNormalized=1, isInCircleRobust=2) {
    switch(ix) {
        case 0: RETVAL = TrianglePredicate::isInCircleNonRobust(a, b, c, p); break;
        case 1: RETVAL = TrianglePredicate::isInCircleNormalized(a, b, c, p); break;
        default: RETVAL = TrianglePredicate::isInCircleRobust(a, b, c, p); break;
    }
}


int CLONE_SKIP (...) { PERL_UNUSED_VAR(items); RETVAL = 1; }

BOOT {
    xs::exp::autoexport(Stash(__PACKAGE__));
}