/* ======================== piro_band_main.c ================================ */

/* -----------------------------------------------------------------------------
 * PIRO_BAND.  Version 0.9.
 * Copyright (C) 2009, Sivasankaran Rajamanickam, Timothy A. Davis.
 * PIRO_BAND is licensed under Version 2.0 of the GNU
 * General Public License.  See gpl.txt for a text of the license.
 * PIRO_BAND is also available under other licenses; contact authors for 
 * details. http://www.cise.ufl.edu/research/sparse
 * -------------------------------------------------------------------------- */

/* 
 * One main file that includes all 8 possible versions of piro_band methods. 
 * The methods that are dependant only on LONG are not included here. They are
 * compiled twice.
 *  */

/* Global variables for safe minimum and safe maximum to compute the Givens
 * rotations reliably. They are computed once per matrix and used when 
 * generating the Givens rotations.
 * */
double piro_band_safemin2 ;
double piro_band_safemx2 ;
float piro_band_safemin2_f ;
float piro_band_safemx2_f ;

/* ------------------------ Double  ---------------------------------------- */
#include "piro_band_internal.h"
#include "piro_band.c" /* dri */
#include "piro_band_givens.c"

#define COMPLEX      /* dci */
#include "piro_band_internal.h"
#include "piro_band.c"
#include "piro_band_givens.c"
#undef COMPLEX
/*It is enough to include piro_band_blocksize.h and piro_band_uv_update.h
 * twice once each for integer and long versions of the code 
 * */
#undef PIRO_BAND_BLOCKSIZE_H 
#undef PIRO_BAND_UV_UPDATE_H 
/* Introduce a new typedef for uv_update by undefining L_UV for the long case
 * of U and V update.
 * */
#undef L_UV

#define LONG         /* drl */
#include "piro_band_internal.h"
#include "piro_band.c"
#include "piro_band_givens.c"

#define COMPLEX      /* dcl */
#include "piro_band_internal.h"
#include "piro_band.c"
#include "piro_band_givens.c"
#undef COMPLEX
#undef LONG

/* ------------------------ Single  ---------------------------------------- */
#define FLOAT         /* sri */
#include "piro_band_internal.h"
#include "piro_band.c"
#include "piro_band_givens.c"

#define COMPLEX       /* sci */
#include "piro_band_internal.h"
#include "piro_band.c"
#include "piro_band_givens.c"
#undef COMPLEX

#define LONG          /* srl */
#include "piro_band_internal.h"
#include "piro_band.c"
#include "piro_band_givens.c"

#define COMPLEX       /* scl */
#include "piro_band_internal.h"
#include "piro_band.c"
#include "piro_band_givens.c"
#undef COMPLEX    
#undef LONG
#undef FLOAT

