/* ----> DO NOT REMOVE THE FOLLOWING NOTICE <---- | |
Copyright (c) 2014-2015 Datalight, Inc. | |
All Rights Reserved Worldwide. | |
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; use version 2 of the License. | |
This program is distributed in the hope that it will be useful, | |
but "AS-IS," 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. | |
*/ | |
/* Businesses and individuals that for commercial or other reasons cannot | |
comply with the terms of the GPLv2 license may obtain a commercial license | |
before incorporating Reliance Edge into proprietary software for | |
distribution in any form. Visit http://www.datalight.com/reliance-edge for | |
more information. | |
*/ | |
/** @file | |
@brief Defines basic types used by Reliance Edge. | |
The following types *must* be defined by this header, either directly (using | |
typedef) or indirectly (by including other headers, such as the C99 headers | |
stdint.h and stdbool.h): | |
- bool: Boolean type, capable of storing true (1) or false (0) | |
- uint8_t: Unsigned 8-bit integer | |
- int8_t: Signed 8-bit integer | |
- uint16_t: Unsigned 16-bit integer | |
- int16_t: Signed 16-bit integer | |
- uint32_t: Unsigned 32-bit integer | |
- int32_t: Signed 32-bit integer | |
- uint64_t: Unsigned 64-bit integer | |
- int64_t: Signed 64-bit integer | |
- uintptr_t: Unsigned integer capable of storing a pointer, preferably the | |
same size as pointers themselves. | |
These types deliberately use the same names as the standard C99 types, so | |
that if the C99 headers stdint.h and stdbool.h are available, they may be | |
included here. | |
If the user application defines similar types, those may be reused. For | |
example, suppose there is an application header apptypes.h which defines | |
types with a similar purpose but different names. That header could be | |
reused to define the types Reliance Edge needs: | |
~~~{.c} | |
#include <apptypes.h> | |
typedef BOOL bool; | |
typedef BYTE uint8_t; | |
typedef INT8 int8_t; | |
// And so on... | |
~~~ | |
If there are neither C99 headers nor suitable types in application headers, | |
this header should be populated with typedefs that define the required types | |
in terms of the standard C types. This requires knowledge of the size of | |
the C types on the target hardware (e.g., how big is an "int" or a pointer). | |
Below is an example which assumes the target has 8-bit chars, 16-bit shorts, | |
32-bit ints, 32-bit pointers, and 64-bit long longs: | |
~~~{.c} | |
typedef int bool; | |
typedef unsigned char uint8_t; | |
typedef signed char int8_t; | |
typedef unsigned short uint16_t; | |
typedef short int16_t; | |
typedef unsigned int uint32_t; | |
typedef int int32_t; | |
typedef unsigned long long uint64_t; | |
typedef long long int64_t; | |
typedef uint32_t uintptr_t; | |
~~~ | |
*/ | |
#ifndef REDTYPES_H | |
#define REDTYPES_H | |
typedef int bool; /**< @brief Boolean type; either true or false. */ | |
typedef unsigned __int8 uint8_t; /**< @brief Unsigned 8-bit integer. */ | |
typedef __int8 int8_t; /**< @brief Signed 8-bit integer. */ | |
typedef unsigned __int16 uint16_t; /**< @brief Unsigned 16-bit integer. */ | |
typedef __int16 int16_t; /**< @brief Signed 16-bit integer. */ | |
typedef unsigned __int32 uint32_t; /**< @brief Unsigned 32-bit integer. */ | |
typedef __int32 int32_t; /**< @brief Signed 32-bit integer. */ | |
typedef unsigned __int64 uint64_t; /**< @brief Unsigned 64-bit integer. */ | |
typedef __int64 int64_t; /**< @brief Signed 64-bit integer. */ | |
/** @brief Unsigned integer capable of storing a pointer. | |
*/ | |
#ifdef _WIN64 | |
typedef uint64_t uintptr_t; | |
#else | |
typedef uint32_t uintptr_t; | |
#endif | |
#endif | |