Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
/*------------------------------------------------------------------------
Turf: Configurable C++ platform adapter
Copyright (c) 2016 Jeff Preshing
Distributed under the Simplified BSD License.
Original location: https://github.com/preshing/turf
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the LICENSE file for more information.
------------------------------------------------------------------------*/
#ifndef TURF_C_CORE_H
#define TURF_C_CORE_H
#include "turf_config.h" // turf_config.h generated by CMake.
#include "platform_detect.h"
// clang-format off
//---------------------------------------------
// Global system headers
//---------------------------------------------
#if TURF_TARGET_XBOX_360 // Xbox 360
#include <xtl.h>
#elif TURF_TARGET_WIN32 || TURF_TARGET_MINGW // Win32 API
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
#undef NOMINMAX
#endif
//---------------------------------------------
// Integer types
//---------------------------------------------
#include <stddef.h>
#if TURF_HAS_STDINT
#include <stdint.h>
#else
typedef signed char int8_t;
typedef unsigned char uint8_t;
#define INT8_MIN (-0x7f - 1)
#define INT8_MAX 0x7f
#define UINT8_MAX 0xff
typedef short int16_t;
typedef unsigned short uint16_t;
#define INT16_MIN (-0x7fff - 1)
#define INT16_MAX 0x7fff
#define UINT16_MAX 0xffff
typedef int int32_t;
typedef unsigned int uint32_t;
#define INT32_MIN (-0x7fffffff - 1)
#define INT32_MAX 0x7fffffff
#define UINT32_MAX 0xffffffff
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
#define INT64_MIN (-0x7fffffffffffffff - 1)
#define INT64_MAX 0x7fffffffffffffff
#define UINT64_MAX 0xffffffffffffffffu
#endif
// FIXME: Check PowerPC, where registers might be larger than pointers.
typedef intptr_t intreg_t;
typedef uintptr_t uintreg_t;
#define INTREG_MIN INTPTR_MIN
#define INTREG_MAX INTPTR_MAX
#define UINTREG_MAX UINTPTR_MAX
//---------------------------------------------
// Macros
//---------------------------------------------
#if TURF_COMPILER_MSVC
#include "impl/compiler_msvc.h"
#elif TURF_COMPILER_GCC
#include "impl/compiler_gcc.h"
#else
#error "Unsupported platform!"
#endif
#define TURF_STRINGIFY2(x) #x
#define TURF_STRINGIFY(x) TURF_STRINGIFY2(x)
#define TURF_CAT2(a, b) a ## b
#define TURF_CAT(a, b) TURF_CAT2(a, b)
#define TURF_UNIQUE_VARIABLE(prefix) TURF_CAT(prefix, __LINE__)
#define TURF_PTR_OFFSET(ptr, ofs) ((void*)(((u8*)(void*)(ptr)) + (ofs)))
#define TURF_MEMBER_OFFSET(type, member) offsetof(type, member)
#define TURF_STATIC_ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
#define TURF_UNUSED(x) ((void) x)
//---------------------------------------------
// Format strings
//---------------------------------------------
// FIXME: Detect and support format strings used by older compilers/CRTs.
#define TURF_U32D "u"
#define TURF_S32D "d"
#define TURF_U32X "x"
#define TURF_U64D "llu"
#define TURF_S64D "lld"
#define TURF_U64X "llx"
#if TURF_PTR_SIZE == 4
#define TURF_UPTRD TURF_U32D
#define TURF_SPTRD TURF_S32D
#define TURF_UPTRX TURF_U32X
#else
#define TURF_UPTRD TURF_U64D
#define TURF_SPTRD TURF_S64D
#define TURF_UPTRX TURF_U64X
#endif
#define TURF_UREGD TURF_UPTRD
#define TURF_SREGD TURF_SPTRD
#define TURF_UREGX TURF_UPTRX
#endif // TURF_C_CORE_H