Property definitions

gmp $ NativeMPQ :: defaultinit
# Multi precision Rational
extern class NativeMPQ `{mpq_ptr`}

    # Initializing

    new `{
        mpq_ptr self = (mpq_ptr)malloc(sizeof(mpq_t));
        mpq_init(self);
        return self;
    `}

    # Arithmetic Functions

    fun add(res, op: NativeMPQ) `{
        mpq_add(res, self, op);
    `}

    fun sub(res, op: NativeMPQ) `{
        mpq_sub(res, self, op);
    `}

    fun mul(res, op: NativeMPQ) `{
        mpq_mul(res, self, op);
    `}

    fun div(res, op: NativeMPQ) `{
        mpq_div(res, self, op);
    `}

    fun neg(res: NativeMPQ) `{
        mpq_neg(res, self);
    `}

    fun abs(res: NativeMPQ) `{
        mpq_abs(res, self);
    `}

    fun inv(res: NativeMPQ) `{
        mpq_inv(res, self);
    `}

    # Assignment

    fun set(op: NativeMPQ) `{ mpq_set(self, op); `}

    fun set_z(op: NativeMPZ) `{ mpq_set_z(self, op); `}

    fun set_si(op1: Int, op2: Int) `{
        mpq_set_si(self, op1, op2);
        mpq_canonicalize(self);
    `}

    fun set_d(op: Float) `{ mpq_set_d(self, op); `}

    fun set_str(str: CString) `{
        mpq_set_str(self, str, 10);
        mpq_canonicalize(self);
    `}

    fun swap(op: NativeMPQ) `{ mpq_swap(self, op); `}

    # Convertion Functions

    fun get_d: Float `{ return mpq_get_d(self); `}

    fun get_str(base: Int32): CString `{
        return mpq_get_str(NULL, base, self);
    `}

    # Comparison Functions

    fun cmp(op: NativeMPQ): Int `{
        return mpq_cmp(self, op);
    `}

#    fun cmp_z(op: NativeMPZ): Int `{
#        return mpq_cmp_z(self, op);
#    `}

    fun cmp_si(num: Int, den: Int): Int `{
        return mpq_cmp_si(self, num, den);
    `}

    fun equal(op: NativeMPQ): Bool `{
        return mpq_equal(self, op);
    `}

    # Getter

    fun numref: NativeMPZ `{
        return mpq_numref(self);
    `}

    fun denref: NativeMPZ `{
        return mpq_denref(self);
    `}

    # Delete this NativeMPZ
    fun finalize `{
        mpq_clear(self);
        free(self);
    `}
end
lib/gmp/native_gmp.nit:148,1--250,3