MODULE = Ogre     PACKAGE = Ogre::Radian

Radian *
Radian::new(...)
  PREINIT:
    char *usage = "Usage: Ogre::Radian::new(CLASS [, d]) or new(CLASS, Degree)\n";
  CODE:
    // Radian()
    if (items == 1) {
        RETVAL = new Radian();
    }
    else if (items == 2) {
        // Radian(Real r)
        if (looks_like_number(ST(1))) {
            RETVAL = new Radian((Real)SvNV(ST(1)));
        }
        // Radian(const Degree &d)
        else if (sv_isobject(ST(1)) && sv_derived_from(ST(1), "Ogre::Degree")) {
            Degree *deg = (Degree *) SvIV((SV *) SvRV(ST(1)));   // TMOGRE_IN
            RETVAL = new Radian(*deg);
        }
    }
    else {
        croak("%s", usage);
    }
  OUTPUT:
    RETVAL

void
Radian::DESTROY()


# ==, !=, <, >, <=, >=
bool
rad_eq_xs(lobj, robj, swap)
    Radian * lobj
    Radian * robj
    IV        swap
  ALIAS:
    rad_ne_xs = 1
    rad_lt_xs = 2
    rad_gt_xs = 3
    rad_le_xs = 4
    rad_ge_xs = 5
  CODE:
    switch(ix) {
        case 0: RETVAL = (*lobj == *robj); break;
        case 1: RETVAL = (*lobj != *robj); break;
        case 2: RETVAL = (*lobj < *robj); break;
        case 3: RETVAL = (*lobj > *robj); break;
        case 4: RETVAL = (*lobj <= *robj); break;
        case 5: RETVAL = (*lobj >= *robj); break;
    }
  OUTPUT:
    RETVAL

# +, -   (still need other variations with Real, etc)
Radian *
rad_plus(lobj, robj, swap)
    Radian * lobj
    Radian * robj
    IV        swap
  ALIAS:
    rad_minus_xs = 1
  PREINIT:
    Radian *rad = new Radian;
  CODE:
    switch(ix) {
        case 0: *rad = *lobj + *robj; break;
        case 1: *rad = swap ? (*robj - *lobj) : (*lobj - *robj); break;
    }
    RETVAL = rad;
  OUTPUT:
    RETVAL

# *
Radian *
rad_mult_xs(lobj, robj, swap)
    Radian * lobj
    SV * robj
    IV swap
  PREINIT:
    Radian *rad = new Radian;
  CODE:
    if (looks_like_number(robj)) {
        Real rhs = (Real)SvNV(robj);
        *rad = *lobj * rhs;
    }
    else if (sv_isobject(robj)) {
        DegRad * rhs;
        TMOGRE_DEGRAD_IN(robj, rhs, Ogre::Radian, rad_mult_xs);
        *rad = swap ? (*rhs * *lobj) : (*lobj * *rhs);
    }
    else {
        croak("Radian::rad_mult_xs: unknown argument!\n");
    }
    RETVAL = rad;
  OUTPUT:
    RETVAL

# neg
Radian *
rad_neg_xs(lobj, robj, swap)
    Radian * lobj
    SV * robj
    IV swap
  PREINIT:
    Radian *rad = new Radian;
  CODE:
    *rad = - (*lobj);
    RETVAL = rad;
  OUTPUT:
    RETVAL


Real
Radian::valueDegrees()

Real
Radian::valueRadians()

Real
Radian::valueAngleUnits()