Defines |
#define | Malloc(s) MallocWithErrorMessage(s) |
| Function to allocate a block of memory.
|
#define | Realloc(p, s) ReallocWithErrorMessage(p, s) |
| Function to reallocate a block of memory.
|
#define | Free(p) free(p) |
| Function to free memory.
|
#define | M_2PI 6.28318530717958647692528676655900576 |
| The constant 2 pi.
|
#define | M_PI 3.14159265358979323846264338327950288 |
| The constant pi.
|
#define | M_PI_2 1.57079632679489661923132169163975144 |
| The constant pi/2.
|
#define | M_PI_4 0.78539816339744830961566084581987572 |
| The constant pi/4.
|
#define | M_PI_8 0.39269908169872415480783042290993786 |
| The constant pi/8.
|
#define | M_SQRT2 1.41421356237309504880168872420969808 |
| The constant sqrt(2)
|
#define | M_1_SQRT2 0.70710678118654752440084436210484904 |
| The constant 1/sqrt(2)
|
#define | M_E 2.71828182845904523536028747135266250 |
| The natural number.
|
#define | M_LOG2E 1.44269504088896340735992468100189213 |
| Log base 2 of the natural number.
|
#define | M_LOG10E 0.43429448190325182765112891891660508 |
| Log base 10 of the natural number.
|
#define | M_LN2 0.69314718055994530941723212145817657 |
| Natural log of 2.
|
#define | M_LN10 2.30258509299404568401799145468436421 |
| Natural log of 10.
|
#define | M_EULER 0.57721566490153286060651209008240243 |
| Euler number.
|
#define | ROUND(X) (floor((X) + 0.5)) |
| Round double X.
|
#define | ROUNDF(X) (floor((X) + 0.5f)) |
| Round float X.
|
#define | ATTRIBUTE_UNUSED |
#define | ATTRIBUTE_ALWAYSINLINE |
Functions |
void * | MallocWithErrorMessage (size_t Size) |
| malloc with an error message on failure.
|
void * | ReallocWithErrorMessage (void *Ptr, size_t Size) |
| realloc with an error message and free on failure.
|
unsigned long | Clock () |
| Time in milliseconds, useful for measuring elapsed time.
|
void | ErrorMessage (const char *Format,...) |
| Redefine this function to customize error messages.
|
Memory management, portable types, timing, and math constants.
- Author:
- Pascal Getreuer <getreuer@gmail.com>
The purpose of this file is to gather useful nonportable C features and then use compiler-defined symbols so that the right thing happens most of the time automatically. This way, if changes are required for your platform, hopefully only this file and possibly also basic.c need to be changed.
For memory management, macros Malloc, Realloc, and Free are defined here, which can be modified to customize memory management.
Types uint8_t
, uint16_t
, uint32_t
are defined as unsigned integer types such that
uint8_t
is 8-bit, range 0 to 255
uint16_t
is 16-bit, range 0 to 65535
uint32_t
is 32-bit, range 0 to 4294967295
Similarly, int8_t
, int16_t
, int32_t
are defined as signed integer types such that
int8_t
is 8-bit, range -128 to +127
int16_t
is 16-bit, range -32768 to +32767
int32_t
is 32-bit, range -2147483648 to +2147483647
These definitions are implemented with types __int8
, __int16
, and __int32
under Windows and by including stdint.h under UNIX.
A millisecond-precision timer Clock() is defined. There is no portable ANSI C millisecond timer, so Clock is defined depending on the platform. On Windows systems, Clock is implemented using GetSystemTime. On POSIX systems, Clock uses gettimeofday. If the system is neither POSIX nor Windows, the time.h time function is used as a fallback, which has only second accuracy.
To define the math constants, math.h is included, and any of the following that were not defined by math.h are defined here according to the values from Hart & Cheney.
- M_2PI = 2 pi = 6.28318530717958647692528676655900576
- M_PI = pi = 3.14159265358979323846264338327950288
- M_PI_2 = pi/2 = 1.57079632679489661923132169163975144
- M_PI_4 = pi/4 = 0.78539816339744830961566084581987572
- M_PI_8 = pi/8 = 0.39269908169872415480783042290993786
- M_SQRT2 = sqrt(2) = 1.41421356237309504880168872420969808
- M_1_SQRT2 = 1/sqrt(2) = 0.70710678118654752440084436210484904
- M_E = e = 2.71828182845904523536028747135266250
- M_LOG2E = log_2(e) = 1.44269504088896340735992468100189213
- M_LOG10E = log_10(e) = 0.43429448190325182765112891891660508
- M_LN2 = log_e(2) = 0.69314718055994530941723212145817657
- M_LN10 = log_e(10) = 2.30258509299404568401799145468436421
- M_EULER = Euler = 0.57721566490153286060651209008240243
Copyright (c) 2010-2011, Pascal Getreuer All rights reserved.
This program is free software: you can use, modify and/or redistribute it under the terms of the simplified BSD License. You should have received a copy of this license along this program. If not, see <http://www.opensource.org/licenses/bsd-license.html>.
Definition in file basic.h.