#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"

#define MATHLIB_STANDALONE 1
#include <Rmath.h>

double log_gamma(double x)
{
    return gamma(x);
}

MODULE = Math::GammaFunction		PACKAGE = Math::GammaFunction		

double
log_gamma (x)
        double x
    OUTPUT:
        RETVAL

double
gamma (x)
        double x
    INIT:
        double res;
    CODE:
        res = gammafn(x);
        RETVAL = res;
    OUTPUT:
        RETVAL

int
faculty (x)
        int x
    INIT:
        int res;
    CODE:
        res = (int) gammafn(x+1);
        RETVAL = res;
    OUTPUT:
        RETVAL


double
psi (x)
        double x
    CODE:
        x = psigamma(x, 0);
        RETVAL = x;
    OUTPUT:
        RETVAL

double
psi_derivative (x, deriv)
        double x
        int deriv;
    CODE:
        x = psigamma(x, (double)deriv);
        RETVAL = x;
    OUTPUT:
        RETVAL