/*  
 *  - - - - - - - - - - - - - - - -
 *   g a l _ f a c e x p d e f . h
 *  - - - - - - - - - - - - - - - - 
 *  
 *  This header file is part of the General Astrodynamics Library  
 *
 *  Description:
 *
 *     This header file defines the factorial exponent lookup table
 *     and macros to access the lookup table
 *  
 *  Status: 
 *  
 *     Sub-system header file  
 *
 *  This revision:  
 * 
 *     2008 May 30  
 *  
 *  Copyright (C) 2008 Paul C. L. Willmott. See notes at end. 
 *  
 *-----------------------------------------------------------------------  
 */  

#ifndef _GAL_FACEXPDEF_H_  
#define _GAL_FACEXPDEF_H_ 1  

#undef __BEGIN_DECLS  
#undef __END_DECLS  
#ifdef __cplusplus  
#define __BEGIN_DECLS extern "C" {  
#define __END_DECLS }  
#else  
#define __BEGIN_DECLS /* empty */  
#define __END_DECLS   /* empty */  
#endif
  
__BEGIN_DECLS  

/* ------------------------------------------------------
 * Structure to store the factorial exponent lookup table
 * ------------------------------------------------------
 */

typedef struct {
  int num_prime     ;  /* Number of prime numbers                            */
  int max_factorial ;  /* Maximum factorial that can be computed using table */
  int *primes       ;  /* Array of prime numbers                             */
  int *exponents    ;  /* Array of prime number exponents                    */
} gal_facexp_t ;

/* ----------------------------------------------------
 * Macros to access the factorial exponent lookup table
 * ----------------------------------------------------
 */

#define PRIME(n) *( facexp->primes + ( n ) ) 
#define EXPONENT(f,n) *( facexp->exponents + ( ( f ) -1 ) * ( facexp->num_prime + 1 ) + ( n ) ) 
  
__END_DECLS
  
#endif /* !_GAL_FACEXPDEF_H_ */ 

/*
 *  gal - General Astrodynamics Library  
 *  Copyright (C) 2008 Paul C. L. Willmott  
 *  
 *  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 2 of the License, or  
 *  (at your option) any later version.  
 *  
 *  This program is distributed in the hope that it will be useful,  
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of  
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
 *  GNU General Public License for more details.  
 *  
 *  You should have received a copy of the GNU General Public License along  
 *  with this program; if not, write to the Free Software Foundation, Inc.,  
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.  
 *    
 *  Contact:  
 *    
 *  Paul Willmott  
 *  vp9mu@amsat.org  
 */  
  
