/*************************************************************** 

   pdlstats.c                                         

****************************************************************/

#include "pdl.h"      /* Data structure declarations */
#include "pdlcore.h"  /* Core declarations */

double pdl_min(void*x, int n, int datatype) {

    double val;

    GENERICLOOP(datatype)

       generic *xx = (generic *)x;
       int i = n; xx += n-1;
       val = (double) *xx;
       while (i--) {
          if ((double) *xx < val)
             val=(double) *xx;
          xx--;
       }

    ENDGENERICLOOP
    return val;
}

double pdl_max(void*x, int n, int datatype) {

    double val;

    GENERICLOOP(datatype)

       generic *xx = (generic *)x;
       int i = n; xx += n-1;
       val = (double) *xx;
       while (i--) {
          if ((double) *xx > val)
             val=(double) *xx;
          xx--;
        }

    ENDGENERICLOOP
    return val;
}

/* Sum a PDL array */

double pdl_sum(void*x, int n, int datatype) {

    double sum;

    sum = 0.0;

    GENERICLOOP(datatype)

       generic *xx = (generic *)x;
       int i = n; xx += n-1;
       while (i--) {            
          sum += (double) *xx;
          xx--;
       }
 
    ENDGENERICLOOP
    return sum;
}