Program Listing for File ecl_unknown.hpp
↰ Return to documentation for file (include/ecl/config/ecl_unknown.hpp
)
/*****************************************************************************
** Ifdefs
*****************************************************************************/
#ifndef ECL_CONFIG_UNKNOWN_HPP_
#define ECL_CONFIG_UNKNOWN_HPP_
/*****************************************************************************
** Includes
*****************************************************************************/
#include <limits>
#include <climits>
/*****************************************************************************
** Integers
*****************************************************************************/
/*
* The c99 standard will only define certain macros for c++
* if explicitly requested.
*/
#define __STDC_LIMIT_MACROS
#if defined(__GNUC__)
/*
* Note that cstdint is not enabled by default by gcc yet (v4.4). It will
* give a compile time error unless you explicitly pass -std=c++0x to gcc.
*/
#if __GXX_EXPERIMENTAL_CXX0X__ > 0
#include <cstdint>
#else
#include <stdint.h>
#endif
#elif (defined(__STDC__) && __STDC__)
#include <stdint.h>
#else
// nothing here yet - look in graveyard/include/portable_integers for some ideas.
#endif
/*
* These are very naive - update these as we come across different platforms.
*/
#if CHAR_MAX == INT8_MAX
#define ECL_SIZE_OF_CHAR 1
#else
#error "ECL_SIZE_OF_CHAR could not be determined (probably faulty ecl logic)."
#endif
#if SHRT_MAX == INT16_MAX
#define ECL_SIZE_OF_SHORT 2
#else
#error "ECL_SIZE_OF_SHORT could not be determined (probably faulty ecl logic)."
#endif
#if INT_MAX == INT32_MAX
#define ECL_SIZE_OF_INT 4
#else
#error "ECL_SIZE_OF_INT could not be determined (probably faulty ecl logic)."
#endif
#if LONG_MAX == INT32_MAX
#define ECL_SIZE_OF_LONG 4
#elif LONG_MAX == INT64_MAX
#define ECL_SIZE_OF_LONG 8
#else
#error "ECL_SIZE_OF_LONG could not be determined (probably faulty ecl logic)."
#endif
#if LONG_LONG_MAX == INT64_MAX
#define ECL_SIZE_OF_LONG_LONG 8
#else
#error "ECL_SIZE_OF_LONG_LONG could not be determined (probably faulty ecl logic)."
#endif
/*****************************************************************************
** Floats
*****************************************************************************/
/*
* These may be somewhat naively assumed. I should hand craftfor
* particular platforms in the future if it ever really
* differs.
*/
#ifdef __GNUC__
#ifdef __SIZEOF_FLOAT__
#define ECL_SIZE_OF_FLOAT __SIZEOF_FLOAT__
#else
#define ECL_SIZE_OF_FLOAT 4
#endif
#ifdef __SIZEOF_DOUBLE__
#define ECL_SIZE_OF_DOUBLE __SIZEOF_DOUBLE__
#else
#define ECL_SIZE_OF_DOUBLE 8
#endif
#ifdef __SIZEOF_LONG_DOUBLE__
#define ECL_SIZE_OF_LONG_DOUBLE __SIZEOF_LONG_DOUBLE__
#else
#define ECL_SIZE_OF_LONG_DOUBLE 16
#endif
#else // Non Gnu platforms
#define ECL_SIZE_OF_FLOAT 4
#define ECL_SIZE_OF_DOUBLE 8
#define ECL_SIZE_OF_LONG_DOUBLE 16 // This is often 12!
#endif
#endif /* ECL_CONFIG_UNKNOWN_HPP_ */