/*
---------------------------------------------------------------------------
Open Asset Import Library (assimp)
---------------------------------------------------------------------------

Copyright (c) 2006-2017, assimp team


All rights reserved.

Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the following
conditions are met:

* Redistributions of source code must retain the above
  copyright notice, this list of conditions and the
  following disclaimer.

* Redistributions in binary form must reproduce the above
  copyright notice, this list of conditions and the
  following disclaimer in the documentation and/or other
  materials provided with the distribution.

* Neither the name of the assimp team, nor the names of its
  contributors may be used to endorse or promote products
  derived from this software without specific prior
  written permission of the assimp team.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------
*/

/** @file defs.h
 *  @brief Assimp build configuration setup. See the notes in the comment
 *  blocks to find out how to customize _your_ Assimp build.
 */

#pragma once
#ifndef AI_DEFINES_H_INC
#define AI_DEFINES_H_INC

#include <assimp/config.h>

    //////////////////////////////////////////////////////////////////////////
    /* Define ASSIMP_BUILD_NO_XX_IMPORTER to disable a specific
     * file format loader. The loader is be excluded from the
     * build in this case. 'XX' stands for the most common file
     * extension of the file format. E.g.:
     * ASSIMP_BUILD_NO_X_IMPORTER disables the X loader.
     *
     * If you're unsure about that, take a look at the implementation of the
     * import plugin you wish to disable. You'll find the right define in the
     * first lines of the corresponding unit.
     *
     * Other (mixed) configuration switches are listed here:
     *    ASSIMP_BUILD_NO_COMPRESSED_X
     *      - Disable support for compressed X files (zip)
     *    ASSIMP_BUILD_NO_COMPRESSED_BLEND
     *      - Disable support for compressed Blender files (zip)
     *    ASSIMP_BUILD_NO_COMPRESSED_IFC
     *      - Disable support for IFCZIP files (unzip)
     */
    //////////////////////////////////////////////////////////////////////////

#ifndef ASSIMP_BUILD_NO_COMPRESSED_X
#   define ASSIMP_BUILD_NEED_Z_INFLATE
#endif

#ifndef ASSIMP_BUILD_NO_COMPRESSED_BLEND
#   define ASSIMP_BUILD_NEED_Z_INFLATE
#endif

#ifndef ASSIMP_BUILD_NO_COMPRESSED_IFC
#   define ASSIMP_BUILD_NEED_Z_INFLATE
#   define ASSIMP_BUILD_NEED_UNZIP
#endif

#ifndef ASSIMP_BUILD_NO_Q3BSP_IMPORTER
#   define ASSIMP_BUILD_NEED_Z_INFLATE
#   define ASSIMP_BUILD_NEED_UNZIP
#endif

    //////////////////////////////////////////////////////////////////////////
    /* Define ASSIMP_BUILD_NO_XX_PROCESS to disable a specific
     * post processing step. This is the current list of process names ('XX'):
     * CALCTANGENTS
     * JOINVERTICES
     * TRIANGULATE
     * GENFACENORMALS
     * GENVERTEXNORMALS
     * REMOVEVC
     * SPLITLARGEMESHES
     * PRETRANSFORMVERTICES
     * LIMITBONEWEIGHTS
     * VALIDATEDS
     * IMPROVECACHELOCALITY
     * FIXINFACINGNORMALS
     * REMOVE_REDUNDANTMATERIALS
     * OPTIMIZEGRAPH
     * SORTBYPTYPE
     * FINDINVALIDDATA
     * TRANSFORMTEXCOORDS
     * GENUVCOORDS
     * ENTITYMESHBUILDER
     * MAKELEFTHANDED
     * FLIPUVS
     * FLIPWINDINGORDER
     * OPTIMIZEMESHES
     * OPTIMIZEANIMS
     * OPTIMIZEGRAPH
     * GENENTITYMESHES
     * FIXTEXTUREPATHS */
    //////////////////////////////////////////////////////////////////////////

#ifdef _MSC_VER
#   undef ASSIMP_API

    //////////////////////////////////////////////////////////////////////////
    /* Define 'ASSIMP_BUILD_DLL_EXPORT' to build a DLL of the library */
    //////////////////////////////////////////////////////////////////////////
#   ifdef ASSIMP_BUILD_DLL_EXPORT
#       define ASSIMP_API __declspec(dllexport)
#       define ASSIMP_API_WINONLY __declspec(dllexport)
#       pragma warning (disable : 4251)

    //////////////////////////////////////////////////////////////////////////
    /* Define 'ASSIMP_DLL' before including Assimp to link to ASSIMP in
     * an external DLL under Windows. Default is static linkage. */
    //////////////////////////////////////////////////////////////////////////
#   elif (defined ASSIMP_DLL)
#       define ASSIMP_API __declspec(dllimport)
#       define ASSIMP_API_WINONLY __declspec(dllimport)
#   else
#       define ASSIMP_API
#       define ASSIMP_API_WINONLY
#   endif

    /* Force the compiler to inline a function, if possible
     */
#   define AI_FORCE_INLINE __forceinline

    /* Tells the compiler that a function never returns. Used in code analysis
     * to skip dead paths (e.g. after an assertion evaluated to false). */
#   define AI_WONT_RETURN __declspec(noreturn)

#elif defined(SWIG)

    /* Do nothing, the relevant defines are all in AssimpSwigPort.i */

#else

#   define AI_WONT_RETURN

#   define ASSIMP_API __attribute__ ((visibility("default")))
#   define ASSIMP_API_WINONLY
#   define AI_FORCE_INLINE inline
#endif // (defined _MSC_VER)

#ifdef __GNUC__
#   define AI_WONT_RETURN_SUFFIX  __attribute__((noreturn))
#else
#   define AI_WONT_RETURN_SUFFIX
#endif // (defined __clang__)

#ifdef __cplusplus
    /* No explicit 'struct' and 'enum' tags for C++, this keeps showing up
     * in doxydocs.
     */
#   define C_STRUCT
#   define C_ENUM
#else
    //////////////////////////////////////////////////////////////////////////
    /* To build the documentation, make sure ASSIMP_DOXYGEN_BUILD
     * is defined by Doxygen's preprocessor. The corresponding
     * entries in the DOXYFILE are: */
    //////////////////////////////////////////////////////////////////////////
#if 0
    ENABLE_PREPROCESSING   = YES
    MACRO_EXPANSION        = YES
    EXPAND_ONLY_PREDEF     = YES
    SEARCH_INCLUDES        = YES
    INCLUDE_PATH           =
    INCLUDE_FILE_PATTERNS  =
    PREDEFINED             = ASSIMP_DOXYGEN_BUILD=1
    EXPAND_AS_DEFINED      = C_STRUCT C_ENUM
    SKIP_FUNCTION_MACROS   = YES
#endif
    //////////////////////////////////////////////////////////////////////////
    /* Doxygen gets confused if we use c-struct typedefs to avoid
     * the explicit 'struct' notation. This trick here has the same
     * effect as the TYPEDEF_HIDES_STRUCT option, but we don't need
     * to typedef all structs/enums. */
     //////////////////////////////////////////////////////////////////////////
#   if (defined ASSIMP_DOXYGEN_BUILD)
#       define C_STRUCT
#       define C_ENUM
#   else
#       define C_STRUCT struct
#       define C_ENUM   enum
#   endif
#endif

#if (defined(__BORLANDC__) || defined (__BCPLUSPLUS__))
#error Currently, Borland is unsupported. Feel free to port Assimp.

// "W8059 Packgröße der Struktur geändert"

#endif


    //////////////////////////////////////////////////////////////////////////
    /* Define ASSIMP_BUILD_SINGLETHREADED to compile assimp
     * without threading support. The library doesn't utilize
     * threads then and is itself not threadsafe. */
    //////////////////////////////////////////////////////////////////////////
#ifndef ASSIMP_BUILD_SINGLETHREADED
#   define ASSIMP_BUILD_SINGLETHREADED
#endif

#if defined(_DEBUG) || ! defined(NDEBUG)
#   define ASSIMP_BUILD_DEBUG
#endif

    //////////////////////////////////////////////////////////////////////////
    /* Define ASSIMP_DOUBLE_PRECISION to compile assimp
     * with double precision support (64-bit). */
    //////////////////////////////////////////////////////////////////////////

#ifdef ASSIMP_DOUBLE_PRECISION
    typedef double ai_real;
    typedef signed long long int ai_int;
    typedef unsigned long long int ai_uint;
#else // ASSIMP_DOUBLE_PRECISION
    typedef float ai_real;
    typedef signed int ai_int;
    typedef unsigned int ai_uint;
#endif // ASSIMP_DOUBLE_PRECISION

    //////////////////////////////////////////////////////////////////////////
    /* Useful constants */
    //////////////////////////////////////////////////////////////////////////

/* This is PI. Hi PI. */
#define AI_MATH_PI          (3.141592653589793238462643383279 )
#define AI_MATH_TWO_PI      (AI_MATH_PI * 2.0)
#define AI_MATH_HALF_PI     (AI_MATH_PI * 0.5)

/* And this is to avoid endless casts to float */
#define AI_MATH_PI_F        (3.1415926538f)
#define AI_MATH_TWO_PI_F    (AI_MATH_PI_F * 2.0f)
#define AI_MATH_HALF_PI_F   (AI_MATH_PI_F * 0.5f)

/* Tiny macro to convert from radians to degrees and back */
#define AI_DEG_TO_RAD(x) ((x)*(ai_real)0.0174532925)
#define AI_RAD_TO_DEG(x) ((x)*(ai_real)57.2957795)

/* Support for big-endian builds */
#if defined(__BYTE_ORDER__)
#   if (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
#       if !defined(__BIG_ENDIAN__)
#           define __BIG_ENDIAN__
#       endif
#   else /* little endian */
#       if defined (__BIG_ENDIAN__)
#           undef __BIG_ENDIAN__
#       endif
#   endif
#endif
#if defined(__BIG_ENDIAN__)
#   define AI_BUILD_BIG_ENDIAN
#endif


/* To avoid running out of memory
 * This can be adjusted for specific use cases
 * It's NOT a total limit, just a limit for individual allocations
 */
#define AI_MAX_ALLOC(type) ((256U * 1024 * 1024) / sizeof(type))

#endif // !! AI_DEFINES_H_INC
