/*************************************************************************
 *                                                                       *
 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
 * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
 *                                                                       *
 * This library is free software; you can redistribute it and/or         *
 * modify it under the terms of EITHER:                                  *
 *   (1) The GNU Lesser General Public License as published by the Free  *
 *       Software Foundation; either version 2.1 of the License, or (at  *
 *       your option) any later version. The text of the GNU Lesser      *
 *       General Public License is included with this library in the     *
 *       file LICENSE.TXT.                                               *
 *   (2) The BSD-style license that is included with this library in     *
 *       the file LICENSE-BSD.TXT.                                       *
 *                                                                       *
 * This library 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 files    *
 * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
 *                                                                       *
 *************************************************************************/

/* per-machine configuration */

#ifndef _ODE_CONFIG_H_

#define _ODE_CONFIG_H_


#ifdef __cplusplus

extern "C" {
#endif


#include <stdio.h>

#include <stdarg.h>

#include <malloc.h>		// for alloca under windows

#include <string.h>

#include <math.h>


#if defined(WIN32) && (defined(_MSC_VER) || defined(MINGW))

static union { unsigned char __c[4]; float __f; } __ode_huge_valf =
  {{0,0,0x80,0x7f}};
#define _INFINITY4 (__ode_huge_valf.__f)

static union { unsigned char __c[8]; double __d; } __ode_huge_val =
  {{0,0,0,0,0,0,0xf0,0x7f }};
#define _INFINITY8 (__ode_huge_val.__d)

#else

#define _INFINITY8 HUGE_VAL

#define _INFINITY4 HUGE_VALF

#endif


#if defined(dSINGLE)

#define dInfinity _INFINITY4

#else

#define dInfinity _INFINITY8

#endif


/* some types. assume `int' >= 32 bits */
typedef unsigned int    uint;
typedef int             int32;
typedef unsigned int    uint32;
typedef short           int16;
typedef unsigned short  uint16;
typedef char            int8;
typedef unsigned char   uint8;


/* an integer type that we can safely cast a pointer to and from without
 * loss of bits.
 */
typedef uint32 intP;


/* if we're compiling on a pentium, we may need to know the clock rate so
 * that the timing function can report accurate times. this number only needs
 * to be set accurately if we're doing performance tests - otherwise just
 * ignore this. i have not worked out how to determine this number
 * automatically yet.
 */

#ifdef PENTIUM

#ifndef PENTIUM_HZ

#define PENTIUM_HZ (496.318983e6)

#endif

#endif



/* the efficient alignment. most platforms align data structures to some
 * number of bytes, but this is not always the most efficient alignment.
 * for example, many x86 compilers align to 4 bytes, but on a pentium it is
 * important to align doubles to 8 byte boundaries (for speed), and the 4
 * floats in a SIMD register to 16 byte boundaries. many other platforms have
 * similar behavior. setting a larger alignment can waste a (very) small
 * amount of memory. NOTE: this number must be a power of two.
 */

#define EFFICIENT_ALIGNMENT 16



/* for unix, define this if your system supports anonymous memory maps
 * (linux does).
 */

#define MMAP_ANONYMOUS



#ifdef __cplusplus

}
#endif


#endif



syntax highlighted by Code2HTML, v. 0.9.1