
/** @file psCompare.c
 *  @brief Comparison functions for sorting routines
 *  @ingroup Compare
 *
 *  @author Robert Lupton, Princeton University
 *  @author Robert Daniel DeSonia, MHPCC
 *
 *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
 *  @date $Date: 2004-08-07 00:06:06 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
 */

#include "psType.h"
#include "psCompare.h"

#define COMPARE_NUMERIC_PTR(TYPE) \
int psCompare##TYPE##Ptr(const void** a, const void** b) { \
    return **((ps##TYPE**)a) - **((ps##TYPE**)b); \
}

#define COMPARE_NUMERIC_PTR_DESCENDING(TYPE) \
int psCompareDescending##TYPE##Ptr(const void** a, const void** b) { \
    return **((ps##TYPE**)b) - **((ps##TYPE**)a); \
}

#define COMPARE_NUMERIC(TYPE) \
int psCompare##TYPE(const void* a, const void* b) { \
    return *((ps##TYPE*)a) - *((ps##TYPE*)b); \
}

#define COMPARE_NUMERIC_DESCENDING(TYPE) \
int psCompare##TYPE##Descending(const void* a, const void* b) { \
    return *((ps##TYPE*)b) - *((ps##TYPE*)a); \
}

COMPARE_NUMERIC_PTR(S8)
COMPARE_NUMERIC_PTR(S16)
COMPARE_NUMERIC_PTR(S32)
COMPARE_NUMERIC_PTR(S64)
COMPARE_NUMERIC_PTR(U8)
COMPARE_NUMERIC_PTR(U16)
COMPARE_NUMERIC_PTR(U32)
COMPARE_NUMERIC_PTR(U64)
COMPARE_NUMERIC_PTR(F32)
COMPARE_NUMERIC_PTR(F64)

COMPARE_NUMERIC_PTR_DESCENDING(S8)
COMPARE_NUMERIC_PTR_DESCENDING(S16)
COMPARE_NUMERIC_PTR_DESCENDING(S32)
COMPARE_NUMERIC_PTR_DESCENDING(S64)
COMPARE_NUMERIC_PTR_DESCENDING(U8)
COMPARE_NUMERIC_PTR_DESCENDING(U16)
COMPARE_NUMERIC_PTR_DESCENDING(U32)
COMPARE_NUMERIC_PTR_DESCENDING(U64)
COMPARE_NUMERIC_PTR_DESCENDING(F32)
COMPARE_NUMERIC_PTR_DESCENDING(F64)

COMPARE_NUMERIC(S8)
COMPARE_NUMERIC(S16)
COMPARE_NUMERIC(S32)
COMPARE_NUMERIC(S64)
COMPARE_NUMERIC(U8)
COMPARE_NUMERIC(U16)
COMPARE_NUMERIC(U32)
COMPARE_NUMERIC(U64)
COMPARE_NUMERIC(F32)
COMPARE_NUMERIC(F64)

COMPARE_NUMERIC_DESCENDING(S8)
COMPARE_NUMERIC_DESCENDING(S16)
COMPARE_NUMERIC_DESCENDING(S32)
COMPARE_NUMERIC_DESCENDING(S64)
COMPARE_NUMERIC_DESCENDING(U8)
COMPARE_NUMERIC_DESCENDING(U16)
COMPARE_NUMERIC_DESCENDING(U32)
COMPARE_NUMERIC_DESCENDING(U64)
COMPARE_NUMERIC_DESCENDING(F32)
COMPARE_NUMERIC_DESCENDING(F64)
