Blob Blame History Raw
/*
 * Copyright (C) 2014 Daniel Renninghoff
 *
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
 * license.
 */

[CCode (cheader_filename="mpfr.h")]
namespace MPFR {
    [SimpleType]
    [IntegerType (rank = 9)]
    [CCode (cname = "mpfr_prec_t", has_type_id = false)]
    public struct Precision {}

    [CCode (cname = "mpfr_rnd_t", has_type_id = false)]
    public enum Round {
        [CCode (cname = "MPFR_RNDN")]
        NEAREST,
        [CCode (cname = "MPFR_RNDZ")]
        ZERO,
        [CCode (cname = "MPFR_RNDU")]
        UP,
        [CCode (cname = "MPFR_RNDD")]
        DOWN,
        [CCode (cname = "MPFR_RNDA")]
        AWAY,
        [CCode (cname = "MPFR_RNDF")]
        FAITHFUL,
        [CCode (cname = "MPFR_RNDNA")]
        NEARESTAWAY
    }

    [CCode (cname = "__mpfr_struct", cprefix = "mpfr_", destroy_function = "mpfr_clear", copy_function = "", lvalue_access = false, has_type_id = false)]
    public struct Real {
        [CCode (cname="mpfr_init2")]
        public Real (Precision prec);
        public Precision get_precision ();
        [CCode (cname="mpfr_set_ui")]
        public int set_unsigned_integer (ulong op, Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_set_si")]
        public int set_signed_integer (long op, Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_set_flt")]
        public int set_float (float op, Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_set_d")]
        public int set_double (double op, Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_set")]
        public int set (Real op, Round rnd = Round.NEAREST);
        public int set_zero (Round rnd = Round.NEAREST);
        public int add (Real op1, Real op2, Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_sub")]
        public int subtract (Real op1, Real op2, Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_mul")]
        public int multiply (Real op1, Real op2, Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_div")]
        public int divide (Real op1, Real op2, Round rnd = Round.NEAREST);

        [CCode (cname="mpfr_get_si")]
        public long get_signed_integer (Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_get_ui")]
        public ulong get_unsigned_integer (Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_get_flt")]
        public float get_float (Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_get_d")]
        public double get_double (Round rnd = Round.NEAREST);

        public int const_pi (Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_zero_p")]
        public bool is_zero ();
        public int sgn ();
        [CCode (cname="mpfr_equal_p")]
        public bool is_equal (Real op2);
        public int cmp (Real op2);
        public int sqrt (Real op, Round rnd = Round.NEAREST);
        public int neg (Real op, Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_pow_si")]
        public int power_signed_integer (Real op1, long op2, Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_mul_si")]
        public int multiply_signed_integer (Real op1, long op2, Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_div_si")]
        public int divide_signed_integer (Real op1, long op2, Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_si_div")]
        public int signed_integer_divide (long op1, Real op2, Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_div_ui")]
        public int divide_unsigned_integer (Real op1, ulong op2, Round rnd = Round.NEAREST);
        [CCode (cname="mpfr_ui_div")]
        public int unsigned_integer_divide (ulong op1, Real op2, Round rnd = Round.NEAREST);
        public int floor (Real op);
        [CCode (cname="mpfr_pow")]
        public int power (Real op1, Real op2, Round rnd = Round.NEAREST);
        public int exp (Real op, Round rnd = Round.NEAREST);
        public int log (Real op, Round rnd = Round.NEAREST);
        public int sin (Real op, Round rnd = Round.NEAREST);
        public int cos (Real op, Round rnd = Round.NEAREST);
        public int tan (Real op, Round rnd = Round.NEAREST);
        public int asin (Real op, Round rnd = Round.NEAREST);
        public int acos (Real op, Round rnd = Round.NEAREST);
        public int atan (Real op, Round rnd = Round.NEAREST);
        public int sinh (Real op, Round rnd = Round.NEAREST);
        public int cosh (Real op, Round rnd = Round.NEAREST);
        public int tanh (Real op, Round rnd = Round.NEAREST);
        public int asinh (Real op, Round rnd = Round.NEAREST);
        public int acosh (Real op, Round rnd = Round.NEAREST);
        public int atanh (Real op, Round rnd = Round.NEAREST);
        public int abs (Real op, Round rnd = Round.NEAREST);
        public int root (Real op, ulong k, Round rnd = Round.NEAREST);
        public int rint (Real op, Round rnd = Round.NEAREST);
        public int frac (Real op, Round rnd = Round.NEAREST);
        public int ceil (Real op);
        public int trunc (Real op);
        public int round (Real op);
        [CCode (cname="mpfr_integer_p")]
        public int is_integer ();
        public int gamma (Real op, Round rnd = Round.NEAREST);
    }

    [CCode (cname = "mpfr_underflow_p")]
    public int mpfr_is_underflow ();

    [CCode (cname = "mpfr_overflow_p")]
    public int mpfr_is_overflow ();
}