Implementation details for RaimaDB
Collaboration diagram for Implementation details for RaimaDB:

Macros

#define RDM_ALLOCA_HAVE_ALLOCA
#define RDM_ALLOCA_HAVE_MALLOC_H_WITH_ALLOCA
#define RDM_ALLOCA_HAVE_VARIABLE_SIZE_ARRAY
#define RDM_ALLOCA_USES_MAX_SIZES
#define RDM_ASSERT_INFINITE_LOOP
#define RDM_ASSERT_INFINITE_LOOP_STDERR
#define RDM_ATOMIC_INTEGRITY
#define RDM_ATOMIC_NO
#define RDM_ATOMIC_UNIX
#define RDM_ATOMIC_WINDOWS
#define RDM_ATTRIBUTE_FORMAT_GCC
#define RDM_CLIENT_API_MUTEX
#define RDM_COLLATE_HAVE_XLOCALE_H
#define RDM_COLLATE_NO
#define RDM_COLLATE_REENTRANT
#define RDM_COLLATE_UNIX
#define RDM_COLLATE_WINDOWS
#define RDM_CONVERT_NO_PREPRO
#define RDM_DAEMON_NO
#define RDM_DAEMON_UNIX
#define RDM_CPP_NO_GHOST_CLASSES
#define RDM_ENV_HAVE_GETIFADDRS
#define RDM_ENV_SIGNAL
#define RDM_ENV_NO
#define RDM_ENV_LINUX
#define RDM_ENV_OSX
#define RDM_ENV_SEED_NO_ADDRESS_OF
#define RDM_ENV_UNIX
#define RDM_ENV_VXWORKS
#define RDM_ENV_VXWORKS_RTP
#define RDM_ENV_WINDOWS
#define RDM_FEATURES_GNU_SOURCE
#define RDM_FEATURES_POSIX_C_SOURCE
#define RDM_FEATURES_REENTRANT
#define RDM_FEATURES_RW_MULTI_THREAD
#define RDM_FEATURES__EXTENSIONS__
#define RDM_FFT_USE_FFTW
#define RDM_FILE_HAVE_DIR_SYNC
#define RDM_FILE_HAVE_FALLOCATE
#define RDM_FILE_HAVE_FLOCK
#define RDM_FILE_HAVE_FILE_ID
#define RDM_FILE_HAVE_LOCKF
#define RDM_FILE_HAVE_MADVISE
#define RDM_FILE_HAVE_MMAP
#define RDM_FILE_HAVE_POSIX_FADVISE
#define RDM_FILE_HAVE_PREAD
#define RDM_FILE_LOCK_NO
#define RDM_FILE_NO
#define RDM_FILE_IGNORE
#define RDM_FILE_MKDIR_WITH_ONE_PARAMETER
#define RDM_FILE_RED
#define RDM_FILE_STDIO
#define RDM_FILE_SET_ECHO_NO
#define RDM_FILE_UNIX
#define RDM_FILE_WINDOWS
#define RDM_FLOAT_BITMASKS_FOR_ISFINITE_AND_ISN
#define RDM_FLOAT_HAVE_FLOORF
#define RDM_FLOAT_HAVE_ISFINITE
#define RDM_INTMAX_NO
#define RDM_LOGGING
#define RDM_LOGGING_NO
#define RDM_MATH_GCC_BUILTIN
#define RDM_MATH_DONT_INCLUDE_MATH_H
#define RDM_MATH_SQRT_QUAKE3
#define RDM_MATH_CONST_VALUES_H
#define RDM_MATH_CONST_FLOAT_H
#define RDM_MEM_ALIGN_4K
#define RDM_MEM_MALLOC
#define RDM_MEM_MMAP
#define RDM_MEM_VXWORKS
#define RDM_MEM_NO
#define RDM_MEM_STATIC_SIZE
#define RDM_MEM_VIRTUAL_ALLOC
#define RDM_ODBC_UNICODE
#define RDM_QA_STACK_PROBE_NO
#define RDM_QA_TIME_NO
#define RDM_QA_HAVE_EXIT
#define RDM_RETURN_CODE_DEBUG
#define RDM_RETURN_CODE_DEBUG
#define RDM_STARTUP_WITH_10_ARGS
#define RDM_STR_HAVE_STRCASECMP
#define RDM_STR_HAVE_UNDERSCORE_STRICMP
#define RDM_STR_HAVE_UNDERSCORE_STRICMP_L
#define RDM_STR_HAVE_STRCASESTR
#define RDM_STR_HAVE_STRNCMP
#define RDM_STR_HAVE_STRTOK_R
#define RDM_STR_HAVE_STRTOK_S
#define RDM_STR_HAVE_ATOF
#define RDM_STR_HAVE_NO_STRTOD
#define RDM_STR_HAVE_STRTOD
#define RDM_STR_HAVE_STRTOF
#define RDM_STR_HAVE_STRTOD_L
#define RDM_STR_HAVE_UNDERSCORE_STRTOD_L
#define RDM_STR_HAVE_STRTOLL
#define RDM_STR_HAVE_STRTOLL_L
#define RDM_STR_HAVE_UNDERSCORE_STRTOLL_L
#define RDM_STR_HAVE_UNDERSCORE_STRUPR
#define RDM_STR_HAVE_UNDERSCORE_STRUPR_L
#define RDM_STR_STRTOD_CALCULATE
#define RDM_STR_STRTOD_CALCULATE_USING_LONG_DOUBLE
#define RDM_TFS_CLIENT_NO_DIRECT_IO
#define RDM_TFS_SERVER_NO_CLIENT_THREADS
#define RDM_TAG_HAVE_FFSLL
#define RDM_TAG_NO_REPORT
#define RDM_TRANSPORT_HAVE_SSL
#define RDM_TRANSPORT_SSL_DISCONNECT_BY_NOTIFYING_PEER
#define RDM_TRANSPORT_SSL_DISCONNECT_MAY_NOTIFY_PEER
#define RDM_TRANSPORT_SSL_HAVE_ERR_GET_ERROR
#define RDM_TRANSPORT_HAVE_TCP
#define RDM_TRANSPORT_HAVE_TCP_SSL
#define RDM_TRANSPORT_TCP_ACCEPT_NO_DELAY
#define RDM_TRANSPORT_TCP_CONNECT_NO_DELAY
#define RDM_TRANSPORT_TCP_FLUSH_NO_DELAY
#define RDM_TRANSPORT_TCP_CLOSESOCKET
#define RDM_TRANSPORT_TCP_SHUTDOWN
#define RDM_TRANSPORT_TCP_DONT_USE_KEEPALIVES
#define RDM_TRANSPORT_TCP_HAVE_MSG_NOSIGNAL
#define RDM_TRANSPORT_TCP_HAVE_POLL
#define RDM_TRANSPORT_TCP_HAVE_QOS
#define RDM_TRANSPORT_TCP_LOCALHOST "127.0.0.1"
#define RDM_TRANSPORT_TCP_NO_IPV6
#define RDM_TRANSPORT_TCP_UNIX
#define RDM_TRANSPORT_TCP_LINUX
#define RDM_TRANSPORT_HAVE_RPMSG
#define RDM_TRANSPORT_HAVE_SHARED_MEMORY
#define RDM_TRANSPORT_HAVE_SHM_POLL
#define RDM_TRANSPORT_HAVE_FIFO_FILES
#define RDM_THREAD_BASE_PRIORITY
#define RDM_TRANSPORT_SO_REUSERADDR
#define RDM_TRANSPORT_SO_EXCLUSIVEADDRUSE
#define RDM_THREAD_CALL_PTHREAD_SELF_ON_STARTUP
#define RDM_THREAD_FREE_RTOS
#define RDM_THREAD_INC_PRIORITY
#define RDM_THREAD_INTEGRITY
#define RDM_THREAD_NO
#define RDM_THREAD_PTHREAD
#define RDM_THREAD_USE_PPOLL_TO_SLEEP
#define RDM_THREAD_USE_PSELECT_TO_SLEEP
#define RDM_THREAD_VXWORKS
#define RDM_THREAD_WINDOWS
#define RDM_TIME_FREE_RTOS
#define RDM_TIME_HAVE_CLOCK_GETTIME
#define RDM_TIME_HAVE_TIME64_T
#define RDM_TIME_NO
#define RDM_TIME_UNIX
#define RDM_TIME_WINDOWS
#define RDM_UNIX
#define RDM_VSNPRINTF_STB

Detailed Description

The defined here are for the most part only applicable when compiling using a RaimaDB source package or an engineering build.

Regarding an object package this is provided here for your information.

Some defined have information about certain safety issues such as thread safeness, reentrancy, and locale dependencies.

Macro Definition Documentation

RDM_ALLOCA_HAVE_ALLOCA

#define RDM_ALLOCA_HAVE_ALLOCA

#include <pspplatos.h>

Have alloca (may be defined on some OS)

RDM_ALLOCA_HAVE_MALLOC_H_WITH_ALLOCA

#define RDM_ALLOCA_HAVE_MALLOC_H_WITH_ALLOCA

#include <pspplatos.h>

Have malloc.h that declares alloca (may be defined on some OS)

RDM_ALLOCA_HAVE_VARIABLE_SIZE_ARRAY

#define RDM_ALLOCA_HAVE_VARIABLE_SIZE_ARRAY

#include <pspplatos.h>

Have variable size arrays (may be defined on some OS)

RDM_ALLOCA_USES_MAX_SIZES

#define RDM_ALLOCA_USES_MAX_SIZES

#include <pspplatos.h>

Use the maximum sizes instead of actual size

Use the maximum sizes instead of actual size when dynamically allocating memory on the system stack. Consider using the other metods to save space since many platorms may have a limited stack size.

RDM_ASSERT_INFINITE_LOOP

#define RDM_ASSERT_INFINITE_LOOP

#include <pspplatos.h>

Implement assert using an infinite loop (may be defined on some OS)

RDM_ASSERT_INFINITE_LOOP_STDERR

#define RDM_ASSERT_INFINITE_LOOP_STDERR

#include <pspplatos.h>

Also print a message to standard error (may be defined on some OS)

RDM_ATOMIC_INTEGRITY

#define RDM_ATOMIC_INTEGRITY

#include <pspplatos.h>

Atomic integer implementation for Integrity (may be defined on some OS)

RDM_ATOMIC_NO

#define RDM_ATOMIC_NO

#include <pspplatos.h>

No atomic integer implementation (may be defined on some OS)

RDM_ATOMIC_UNIX

#define RDM_ATOMIC_UNIX

#include <pspplatos.h>

Atomic integer implementation for Unix (may be defined on some OS)

RDM_ATOMIC_WINDOWS

#define RDM_ATOMIC_WINDOWS

#include <pspplatos.h>

Atomic integer implementation for Windows (may be defined on some OS)

RDM_ATTRIBUTE_FORMAT_GCC

#define RDM_ATTRIBUTE_FORMAT_GCC

#include <pspplatos.h>

Use GCC style of attribute format to validate format strings (may be defined on some OS)

GCC style attribute format is the only one supported.

We use lld, llu, and llx for the 64-bit integer types. The underlying types for these are either variations of long or long long. GCC therefore issue warnings on platforms where the underlying type is a long. For this reason only some platforms have this enabled.

RDM_CLIENT_API_MUTEX

#define RDM_CLIENT_API_MUTEX

#include <pspplatos.h>

Mutex protect RaimaDB API call

Protect calls to any rdm_tfs..., rdm_db..., rdm_cursor..., and rdm_trans... public APIs by using a mutex where we acquire it when entering and release it when exit. This is for the purpose of using a transport where messages from multiple users (each has their own RDM_DB/TFS handle) are interleaved on one shared channel.

An alternative to this is to use a mutex when calling RaimaDB public functions.

RDM_COLLATE_HAVE_XLOCALE_H

#define RDM_COLLATE_HAVE_XLOCALE_H

#include <pspplatos.h>

Get collate functinality from xlocale.h instead of locale.h

RDM_COLLATE_NO

#define RDM_COLLATE_NO

#include <pspplatos.h>

No implementation for string collate (may be defined on some OS)

RDM_COLLATE_REENTRANT

#define RDM_COLLATE_REENTRANT

#include <pspplatos.h>

Have reentrant versions of collate (may be defined on some OS)

RDM_COLLATE_UNIX

#define RDM_COLLATE_UNIX

#include <pspplatos.h>

Unix implementation for string collate (may be defined on some OS)

RDM_COLLATE_WINDOWS

#define RDM_COLLATE_WINDOWS

#include <pspplatos.h>

Windows implementation for string collate (may be defined on some OS)

RDM_CONVERT_NO_PREPRO

#define RDM_CONVERT_NO_PREPRO

#include <pspplatos.h>

Do not invode the C preprocessor for input file to rdm-convert (may be defined on some OS)

RDM_CPP_NO_GHOST_CLASSES

#define RDM_CPP_NO_GHOST_CLASSES

#include <pspplatos.h>

No Ghost Clases (may be defined on some OS)

Do not do size of classes generated through a template that are not otherwise used without a using statement.

RDM_DAEMON_NO

#define RDM_DAEMON_NO

#include <pspplatos.h>

No Daemon implementation (may be defined on some OS)

RDM_DAEMON_UNIX

#define RDM_DAEMON_UNIX

#include <pspplatos.h>

Daemon implementation for Unix (may be defined on some OS)

RDM_ENV_HAVE_GETIFADDRS

#define RDM_ENV_HAVE_GETIFADDRS

#include <pspplatos.h>

Have getifaddrs (may be defined on some OS)

RDM_ENV_LINUX

#define RDM_ENV_LINUX

#include <pspplatos.h>

Envirionment implementation for Linux (may be defined on some OS)

RDM_ENV_NO

#define RDM_ENV_NO

#include <pspplatos.h>

No environment implementation (may be defined on some OS)

RDM_ENV_OSX

#define RDM_ENV_OSX

#include <pspplatos.h>

Envirionment implementation for macOS (may be defined on some OS)

RDM_ENV_SEED_NO_ADDRESS_OF

#define RDM_ENV_SEED_NO_ADDRESS_OF

#include <pspplatos.h>

Don't take the address of a function and a stack variable to compute a seed

We may define this to comply with standards or for platforms where these numbers are deterministic.

RDM_ENV_SIGNAL

#define RDM_ENV_SIGNAL

#include <pspplatos.h>

Sending signals to a process (may be defined on some OS)

Allow sending a signal to a process as seen from the TFS. With this, clients on for example a micro controller can send a signal to a process where the TFS is hosted.

This feature should not be enabled on most platforms since it poses a security risk. In the event that the TFS is running as a different user or with elevated privileges compared to its clients the clients can send signals to other processis that it otherwise are not able to do.

RDM_ENV_UNIX

#define RDM_ENV_UNIX

#include <pspplatos.h>

Envirionment implementation for Unix (may be defined on some OS)

RDM_ENV_VXWORKS

#define RDM_ENV_VXWORKS

#include <pspplatos.h>

Envirionment implementation for Vxworks Kernel modules (may be defined on some OS)

RDM_ENV_VXWORKS_RTP

#define RDM_ENV_VXWORKS_RTP

#include <pspplatos.h>

Envirionment implementation for Vxworks RTP (may be defined on some OS)

RDM_ENV_WINDOWS

#define RDM_ENV_WINDOWS

#include <pspplatos.h>

Envirionment implementation for Windows (may be defined on some OS)

RDM_FEATURES__EXTENSIONS__

#define RDM_FEATURES__EXTENSIONS__

#include <pspplatos.h>

Define EXTENSIONS (may be defined on some OS)

RDM_FEATURES_GNU_SOURCE

#define RDM_FEATURES_GNU_SOURCE

#include <pspplatos.h>

Define _GNU_SOURCE (may be defined on some OS)

RDM_FEATURES_POSIX_C_SOURCE

#define RDM_FEATURES_POSIX_C_SOURCE

#include <pspplatos.h>

Define _POSIX_C_SOURCE to the specified value (may be defined on some OS)

RDM_FEATURES_REENTRANT

#define RDM_FEATURES_REENTRANT

#include <pspplatos.h>

Define _REENTRANT (may be defined on some OS)

RDM_FEATURES_RW_MULTI_THREAD

#define RDM_FEATURES_RW_MULTI_THREAD

#include <pspplatos.h>

Define RW_MULTI_THREAD (may be defined on some OS)

RDM_FFT_USE_FFTW

#define RDM_FFT_USE_FFTW

#include <pspplatos.h>

Use FFTW instead of RaimaDB FFT

Use FFTW instead of a simple algorithm included with RaimaDB. RaimaDB is not distributed with FFTW for licensing reasons.

If you want to use FFTW in your program you should probably not use the interface provided here, but rather use FFTW directly.

Please be aware that the license for RaimaDB is incompatible with the GPL license for FFTW. You will need a commercial license. See https://tlo.mit.edu/technologies/fftw-fastest-fourier-transform-west for details.

Define RDM_FFT_USE_FFTW2 if you want to use version 2 of FFTW or RDM_FFT_USE_FFTW3 for version 3. RDM_FFT_USE_FFTW will currently default to version 3.

RDM_FILE_HAVE_DIR_SYNC

#define RDM_FILE_HAVE_DIR_SYNC

#include <pspplatos.h>

Have the capability of syncing a directory (may be defined on some OS)

RDM_FILE_HAVE_FALLOCATE

#define RDM_FILE_HAVE_FALLOCATE

#include <pspplatos.h>

Have fallocate for punching holes in files (may be defined on some OS)

RDM_FILE_HAVE_FILE_ID

#define RDM_FILE_HAVE_FILE_ID

#include <pspplatos.h>

We have an implementation to get a unique ID for a file

This will only be defined for flavors of Unix, Linux, and Windows.

On Unix and Linux the device and inode numbers will be used as returned from fstat.

On Windows the volume serial number and the file index will be used as returned by GetFileInformationByHandle. This is not guaranteed to be unique with the ReFS file system and some 3rd party file systems and defragmentation tools.

RDM_FILE_HAVE_FLOCK

#define RDM_FILE_HAVE_FLOCK

#include <pspplatos.h>

Have flock for doing file locking (may be defined on some OS)

RDM_FILE_HAVE_LOCKF

#define RDM_FILE_HAVE_LOCKF

#include <pspplatos.h>

Have lockf for doing file locking (may be defined on some OS)

RDM_FILE_HAVE_MADVISE

#define RDM_FILE_HAVE_MADVISE

#include <pspplatos.h>

Have madvise

Have the capability of advising the kernal about memory access patterns (may be defined on some OS). This setting may improve overall system performance. We advise the kernal that memory mapped database file pages are references in random order.

RDM_FILE_HAVE_MMAP

#define RDM_FILE_HAVE_MMAP

#include <pspplatos.h>

Have the capability of memory mapping files using mmap on Unix or CreateFileMappingA/MapViewOfFile on Windows

RDM_FILE_HAVE_POSIX_FADVISE

#define RDM_FILE_HAVE_POSIX_FADVISE

#include <pspplatos.h>

Have posix_fadvise for paging out pages in the file cache (may be defined on some OS)

RDM_FILE_HAVE_PREAD

#define RDM_FILE_HAVE_PREAD

#include <pspplatos.h>

Have pread and pwrite (may be defined on some OS) or ReadFile and WriteFile on Windows (which have the same capabilities as the Unix functions)

RDM_FILE_IGNORE

#define RDM_FILE_IGNORE

#include <pspplatos.h>

No implementation for buffered file operations except that any output is ignored and we get eNOTIMPLEMENTED_FILE for certain functions and EOF for any read operations. Opening files will silently succeed. (may be defined on some OS)

RDM_FILE_LOCK_NO

#define RDM_FILE_LOCK_NO

#include <pspplatos.h>

No file locking (may be defined on some OS)

RDM_FILE_MKDIR_WITH_ONE_PARAMETER

#define RDM_FILE_MKDIR_WITH_ONE_PARAMETER

#include <pspplatos.h>

Function mkdir does only take one parameter

Note
mkdir may only take one argument on some versions of VxWorks with kernel modules

RDM_FILE_NO

#define RDM_FILE_NO

#include <pspplatos.h>

No file system implementation for unbuffered read and write and other file operations (may be defined on some OS)

RDM_FILE_RED

#define RDM_FILE_RED

#include <pspplatos.h>

Reliance Edge file system from Datalight

RDM_FILE_SET_ECHO_NO

#define RDM_FILE_SET_ECHO_NO

#include <pspplatos.h>

Set echo mode to a terminal is not implemented (may be defined on some OS)

RDM_FILE_STDIO

#define RDM_FILE_STDIO

#include <pspplatos.h>

Reading and writing of buffered files using stdio. No other file operations (may be defined on some OS)

RDM_FILE_UNIX

#define RDM_FILE_UNIX

#include <pspplatos.h>

Unix file system implementation for unbuffered read and write and other file operations (may be defined on some OS)

RDM_FILE_WINDOWS

#define RDM_FILE_WINDOWS

#include <pspplatos.h>

Windows file system implementation for unbuffered read and write and other file operations (may be defined on some OS)

RDM_FLOAT_BITMASKS_FOR_ISFINITE_AND_ISN

#define RDM_FLOAT_BITMASKS_FOR_ISFINITE_AND_ISN

#include <pspplatos.h>

Use bitmasks for determining IEEE-754 INF and NAN (may be defined on some OS)

RDM_FLOAT_HAVE_FLOORF

#define RDM_FLOAT_HAVE_FLOORF

#include <pspplatos.h>

Have floorf and ceilf (may be defined on some OS)

RDM_FLOAT_HAVE_ISFINITE

#define RDM_FLOAT_HAVE_ISFINITE

#include <pspplatos.h>

Have isfinite and isnan (may be defined on some OS)

RDM_INTMAX_NO

#define RDM_INTMAX_NO

#include <pspplatos.h>

Does not have uintmax_t and intmax_t defined in stdint.h (may be defined on some OS)

RDM_LOGGING

#define RDM_LOGGING

#include <pspplatos.h>

A platform independent logging implementation (may be defined on some OS)

RDM_LOGGING_NO

#define RDM_LOGGING_NO

#include <pspplatos.h>

No logging implementation (may be defined on some OS)

RDM_MATH_CONST_FLOAT_H

#define RDM_MATH_CONST_FLOAT_H

#include <pspplatos.h>

Get floatingoint constants from float.h

RDM_MATH_CONST_VALUES_H

#define RDM_MATH_CONST_VALUES_H

#include <pspplatos.h>

Get floatingoint constants from values.h

RDM_MATH_DONT_INCLUDE_MATH_H

#define RDM_MATH_DONT_INCLUDE_MATH_H

#include <pspplatos.h>

Dont include math.h

RDM_MATH_GCC_BUILTIN

#define RDM_MATH_GCC_BUILTIN

#include <pspplatos.h>

Use GCC builtin for floatingoint constants

RDM_MATH_SQRT_QUAKE3

#define RDM_MATH_SQRT_QUAKE3

#include <pspplatos.h>

Quake 3 implementation of sqrt

RDM_MEM_ALIGN_4K

#define RDM_MEM_ALIGN_4K

#include <pspplatos.h>

Dynamic memory allocated is 4K aligned (may be defined on some OS)

RDM_MEM_MALLOC

#define RDM_MEM_MALLOC

#include <pspplatos.h>

Dynamic memory allocation using malloc and request large blocks (may be defined on some OS)

RDM_MEM_MMAP

#define RDM_MEM_MMAP

#include <pspplatos.h>

Dynamic memory allocation using mmap on Unix and request large blocks (may be defined on some OS)

RDM_MEM_NO

#define RDM_MEM_NO

#include <pspplatos.h>

No dynamic memory allocation (may be defined on some OS)

RDM_MEM_STATIC_SIZE

#define RDM_MEM_STATIC_SIZE

#include <pspplatos.h>

Use a buffer of this size when allocating memory statically (may be defined on some OS)

RDM_MEM_VIRTUAL_ALLOC

#define RDM_MEM_VIRTUAL_ALLOC

#include <pspplatos.h>

Dynamic memory allocation using virtual_alloc on Windows and request large blocks (may be defined on some OS)

RDM_MEM_VXWORKS

#define RDM_MEM_VXWORKS

#include <pspplatos.h>

Dynamic memory allocation using memalign/free on VxWorks and request large blocks (may be defined on some OS)

RDM_ODBC_UNICODE

#define RDM_ODBC_UNICODE

#include <pspplatos.h>

ODBC driver support for Unicode

The ODBC driver include Unicode versions of all functions that accept pointers to character strings or SQLPOINTER in their arguments. The Unicode functions have a suffix of W. (May be defined on some OS).

RDM_QA_HAVE_EXIT

#define RDM_QA_HAVE_EXIT

#include <pspplatos.h>

The QA Framework may exit immediately using exit (may be defined on some OS)

RDM_QA_STACK_PROBE_NO

#define RDM_QA_STACK_PROBE_NO

#include <pspplatos.h>

The QA Framework should not probe the stack (may be defined on some OS)

RDM_QA_TIME_NO

#define RDM_QA_TIME_NO

#include <pspplatos.h>

The QA Framework should not as for time (may be defined on some OS)

RDM_RETURN_CODE_DEBUG [1/2]

#define RDM_RETURN_CODE_DEBUG

#include <pspplatos.h>

Additional debug information for RDM_RETURN_CODE

Internally we use a class RDM_RETURN_CODE instead of RDM_RETCODE with some additional information for debugging if enabled here. If NDEBUG is not defined then this will be enabled unless RDM_RETURN_CODE_NDEBUG is defined.

RDM_RETURN_CODE_DEBUG [2/2]

#define RDM_RETURN_CODE_DEBUG

#include <pspplatos.h>

Additional debug information for RDM_RETURN_CODE

Internally we use a class RDM_RETURN_CODE instead of RDM_RETCODE with some additional information for debugging if enabled here. If NDEBUG is not defined then this will be enabled unless RDM_RETURN_CODE_NDEBUG is defined.

RDM_STARTUP_WITH_10_ARGS

#define RDM_STARTUP_WITH_10_ARGS

#include <pspplatos.h>

Use a startup function with 10 string arguments

We use this with VxWorks kernel modules for the application to be started directly from the VxWorks command prompt or the debugger.

RDM_STR_HAVE_ATOF

#define RDM_STR_HAVE_ATOF

#include <pspplatos.h>

Have atof (may be defined on some OS)

Note
atof is not reentrant nor safe in an environment where the application sets the global locale. Consider using RDM_STR_HAVE_STRTOD_L instead

RDM_STR_HAVE_NO_STRTOD

#define RDM_STR_HAVE_NO_STRTOD

#include <pspplatos.h>

Have no atof, strtod, strtod_l, or _strtod_l

Note
We have on implementation for converting a string to a double that we can use. If the conversion is attempted it will return eNOTIMPLEMENTED_STRTOD

RDM_STR_HAVE_STRCASECMP

#define RDM_STR_HAVE_STRCASECMP

#include <pspplatos.h>

Have strcasecmp and strncasecmp (may be defined on some OS)

Note
strcasecmp and strncasecmp are not reentrant nor safe in an environment where the application sets the global locale. Consider using RDM_STR_HAVE_UNDERSCORE_STRICMP_L or none at all.

RDM_STR_HAVE_STRCASESTR

#define RDM_STR_HAVE_STRCASESTR

#include <pspplatos.h>

Have strcasestr (may be defined on some OS)

Note
strcasestr is not reentrant nor safe in an environment where the application sets the global locale. Consider not defining this at all.

RDM_STR_HAVE_STRNCMP

#define RDM_STR_HAVE_STRNCMP

#include <pspplatos.h>

Have strncmp (may be defined on some OS)

RDM_STR_HAVE_STRTOD

#define RDM_STR_HAVE_STRTOD

#include <pspplatos.h>

Have strtod (may be defined on some OS)

Note
strtod and strtof are not reentrant nor safe in an environment where the application sets the global locale. Consider using RDM_STR_HAVE_STRTOD_L or RDM_STR_HAVE_UNDERSCORE_STRTOD_L

RDM_STR_HAVE_STRTOD_L

#define RDM_STR_HAVE_STRTOD_L

#include <pspplatos.h>

Have strtof_l and strtod_l (may be defined on some OS)

Note
This uses strtof_l and strtod_l with a C locale instead of strtof and strtod as a safe replacement

RDM_STR_HAVE_STRTOF

#define RDM_STR_HAVE_STRTOF

#include <pspplatos.h>

Have strtof (may be defined on some OS)

Note
strtod and strtof are not reentrant nor safe in an environment where the application sets the global locale. Consider using RDM_STR_HAVE_STRTOD_L or RDM_STR_HAVE_UNDERSCORE_STRTOD_L

RDM_STR_HAVE_STRTOK_R

#define RDM_STR_HAVE_STRTOK_R

#include <pspplatos.h>

Use strtok_r implementation

Note
strtok will be used if RDM_THREAD_NO is defined and neither RDM_STR_HAVE_STRTOK_S nor RDM_STR_HAVE_STRTOK_R is defined. Use of strtok from more than one thread without proper protection is not safe.

RDM_STR_HAVE_STRTOK_S

#define RDM_STR_HAVE_STRTOK_S

#include <pspplatos.h>

Use strtok_s implementation

Note
strtok will be used if RDM_THREAD_NO is defined and neither RDM_STR_HAVE_STRTOK_S nor RDM_STR_HAVE_STRTOK_R is defined. Use of strtok from more than one thread without proper protection is not safe.

RDM_STR_HAVE_STRTOLL

#define RDM_STR_HAVE_STRTOLL

#include <pspplatos.h>

Have strtoll and strtoull (may be defined on some OS)

Note
strtod is not reentrant nor safe in an environment where the application sets the global locale. Consider using RDM_STR_HAVE_STRTOLL_L

RDM_STR_HAVE_STRTOLL_L

#define RDM_STR_HAVE_STRTOLL_L

#include <pspplatos.h>

Have strtoll_l and strtoull_l (may be defined on some OS)

Note
This uses strtoll_l and strtoull_l with a C locale instead of strtoll and strtoull as a safe replacement

RDM_STR_HAVE_UNDERSCORE_STRICMP

#define RDM_STR_HAVE_UNDERSCORE_STRICMP

#include <pspplatos.h>

Have _tricmp and _strnicmp (may be defined on some OS)

Note
_stricmp and _strnicmp are not reentrant nor safe in an environment where the application sets the global locale. Consider using RDM_STR_HAVE_UNDERSCORE_STRICMP_L or none at all.

RDM_STR_HAVE_UNDERSCORE_STRICMP_L

#define RDM_STR_HAVE_UNDERSCORE_STRICMP_L

#include <pspplatos.h>

Have _stricmp_l and _strnicmp_l (may be defined on some OS)

Note
This uses _stricmp_l and _stricmp_l with a C locale instead of _stricmp and _strnicmp as a safe replacement.

RDM_STR_HAVE_UNDERSCORE_STRTOD_L

#define RDM_STR_HAVE_UNDERSCORE_STRTOD_L

#include <pspplatos.h>

Have _strtof_l and _strtod_l (may be defined on some OS)

Note
This uses _strtof_l and _strtod_l with a C locale instead of strtof and strtod as a safe replacement

RDM_STR_HAVE_UNDERSCORE_STRTOLL_L

#define RDM_STR_HAVE_UNDERSCORE_STRTOLL_L

#include <pspplatos.h>

Have _strtoll_l and _strtoull_l (may be defined on some OS)

Note
This uses _strtoll_l and _strtoull_l with a C locale instead of strtoll and strtoull as a safe replacement

RDM_STR_HAVE_UNDERSCORE_STRUPR

#define RDM_STR_HAVE_UNDERSCORE_STRUPR

#include <pspplatos.h>

Have _strupr and _strlwr (may be defined on some OS)

Note
_strupr and _strlwl are not reentrant nor safe in an environment where the application sets the global locale. Consider using RDM_STR_HAVE_UNDERSCORE_STRUPR_L or none at all.

RDM_STR_HAVE_UNDERSCORE_STRUPR_L

#define RDM_STR_HAVE_UNDERSCORE_STRUPR_L

#include <pspplatos.h>

Have _strupr_l and _strlwr_l (may be defined on some OS)

Note
This uses _strupr_l and _strlwr_l with a C locale instead of __strupr and _strlwr as a safe replacement.

RDM_STR_STRTOD_CALCULATE

#define RDM_STR_STRTOD_CALCULATE

#include <pspplatos.h>

Do string convertion to double by calculations

When other options are not available do string conversion to double using our own calculations. This method is not safe, meaning converting from double to a decimal string (with appropriate precision) and back again may not reproduce the same IEEE-754 double value. RDM_STR_STRTOD_CALCULATE_USING_LONG_DOUBLE is safe.

Please note that some of the other methods are local dependent and may therefor not be safe.

RDM_STR_STRTOD_CALCULATE_USING_LONG_DOUBLE

#define RDM_STR_STRTOD_CALCULATE_USING_LONG_DOUBLE

#include <pspplatos.h>

Do string convertion to double without use of pow or powl

When RDM_STR_STRTOD_CALCULATE is enabled do not adjust for the exponent using pow or powl. This avoids use of the math library. It may be less efficient than pow or powl especially for large or small exponents. Do string convertion to double by long double calculations

Same as RDM_STR_STRTOD_CALCULATE except that we here use long double instead of double for the calculation. This makes the conversion accurate, meaning converting from double to a decimal string (with appropriate precision) and back again reproduces the same IEEE-754 double value. The compiler need support for long double for this method to work.

Please note that some of the other methods are local dependent and may therefor not be safe.

RDM_TAG_HAVE_FFSLL

#define RDM_TAG_HAVE_FFSLL

#include <pspplatos.h>

Have ffsll for finding the first bit set in a word (may be defined on some OS)

RDM_TAG_NO_REPORT

#define RDM_TAG_NO_REPORT

#include <pspplatos.h>

Detailed report for memory usage where this is supported

RaimaDB have alternate implementations for allocating memory. A detailed report can be generated. Generating this report has some performance penalties.

RDM_TFS_CLIENT_NO_DIRECT_IO

#define RDM_TFS_CLIENT_NO_DIRECT_IO

#include <pspplatos.h>

TFS Client is not able to read and write directly to the database pack files

Note
Define this if a TFS client should not or can not read and write directly to the database pack files instead of having the TFS Server doing this on its behalf. This could be defined where data coherence between file handles are not guaranteed, persistent files are not implemented, the persistent database pack files would never be on the same machine as the client, or where the persistent database pack files are not otherwise accessible by the client.

RDM_TFS_SERVER_NO_CLIENT_THREADS

#define RDM_TFS_SERVER_NO_CLIENT_THREADS

#include <pspplatos.h>

TFS Server accept connections without client threads

The TFS normally accepts clients using a separate thread. This allows more than one connection. Defining this will not spawn extra threads and consequently only one client can be handled at a given time.

RDM_THREAD_BASE_PRIORITY

#define RDM_THREAD_BASE_PRIORITY

#include <pspplatos.h>

Thread priority levels are derived from this and RDM_THREAD_INC_PRIORITY (may be defined on some OS)

RDM_THREAD_CALL_PTHREAD_SELF_ON_STARTUP

#define RDM_THREAD_CALL_PTHREAD_SELF_ON_STARTUP

#include <pspplatos.h>

Call pthread_self on startup

Run Time Processes (RTP) on VxWorks have a call to pthread_self as part of starting up the process to signal that pthreads are used

RDM_THREAD_FREE_RTOS

#define RDM_THREAD_FREE_RTOS

#include <pspplatos.h>

Thread implemantation for FreeRTOS

RDM_THREAD_INC_PRIORITY

#define RDM_THREAD_INC_PRIORITY

#include <pspplatos.h>

Thread priority levels are derived from this and RDM_THREAD_BASE_PRIORITY (may be defined on some OS)

RDM_THREAD_INTEGRITY

#define RDM_THREAD_INTEGRITY

#include <pspplatos.h>

Thread implementation for INTEGRITY (may be defined on some OS)

RDM_THREAD_NO

#define RDM_THREAD_NO

#include <pspplatos.h>

No thread implementation (may be defined on some OS)

RDM_THREAD_PTHREAD

#define RDM_THREAD_PTHREAD

#include <pspplatos.h>

Thread implementation for Posix Threads on Unix (may be defined on some OS)

RDM_THREAD_USE_PPOLL_TO_SLEEP

#define RDM_THREAD_USE_PPOLL_TO_SLEEP

#include <pspplatos.h>

Use ppoll and proper signal masking to sleep where it needs to be interuptible (may be defined on some OS)

RDM_THREAD_USE_PSELECT_TO_SLEEP

#define RDM_THREAD_USE_PSELECT_TO_SLEEP

#include <pspplatos.h>

Use pselect and proper signal masking to sleep where it needs to be interuptible (may be defined on some OS)

RDM_THREAD_VXWORKS

#define RDM_THREAD_VXWORKS

#include <pspplatos.h>

Thread implementation for VxWorks (may be defined on some OS)

RDM_THREAD_WINDOWS

#define RDM_THREAD_WINDOWS

#include <pspplatos.h>

Thread implementation for Windows (may be defined on some OS)

RDM_TIME_FREE_RTOS

#define RDM_TIME_FREE_RTOS

#include <pspplatos.h>

Use clock ticks for FREE_RTOS to measure elapsed time

RDM_TIME_HAVE_CLOCK_GETTIME

#define RDM_TIME_HAVE_CLOCK_GETTIME

#include <pspplatos.h>

Have clock_gettime (may be defined on some OS)

RDM_TIME_HAVE_TIME64_T

#define RDM_TIME_HAVE_TIME64_T

#include <pspplatos.h>

Have the time64_t type (may be defined on some OS)

RDM_TIME_NO

#define RDM_TIME_NO

#include <pspplatos.h>

No time implementation (may be defined on some OS) If a cycle counter is availabe the following can be defined in combination with this:

#define RDM_TIME_CYCLE_COUNT_ADR Address #define RDM_TIME_CYCLE_COUNT_HZ Hz

RDM_TIME_UNIX

#define RDM_TIME_UNIX

#include <pspplatos.h>

Timed implementation for Unix (may be defined on some OS)

RDM_TIME_WINDOWS

#define RDM_TIME_WINDOWS

#include <pspplatos.h>

Time implementation for Windows (may be defined on some OS)

RDM_TRANSPORT_HAVE_FIFO_FILES

#define RDM_TRANSPORT_HAVE_FIFO_FILES

#include <pspplatos.h>

A limited implementation that uses a pair of FIFO files on Linux (should not be defined except in some special limited cases)

RDM_TRANSPORT_HAVE_RPMSG

#define RDM_TRANSPORT_HAVE_RPMSG

#include <pspplatos.h>

A limited implementation that uses RPMSG under AUTOSAR to communicate with a Linux host (should not be defined except in some special limited cases)

RDM_TRANSPORT_HAVE_SHARED_MEMORY

#define RDM_TRANSPORT_HAVE_SHARED_MEMORY

#include <pspplatos.h>

Shared memory (may be defined on some OS)

RDM_TRANSPORT_HAVE_SHM_POLL

#define RDM_TRANSPORT_HAVE_SHM_POLL

#include <pspplatos.h>

Shared memory between AUTOSAR (client) and Linux (TFS) (may be defined on some OS)

RDM_TRANSPORT_HAVE_SSL

#define RDM_TRANSPORT_HAVE_SSL

#include <pspplatos.h>

We have a TSL/SSL implementation (may be defined on some OS)

RDM_TRANSPORT_HAVE_TCP

#define RDM_TRANSPORT_HAVE_TCP

#include <pspplatos.h>

We have a TCP implementation (may be defined on some OS)

RDM_TRANSPORT_HAVE_TCP_SSL

#define RDM_TRANSPORT_HAVE_TCP_SSL

#include <pspplatos.h>

We have a SSL over TCP implementation (may be defined on some OS)

This is a complete replacement for TCP. The connection is always using SSL. There are no options to run this without use of the SSL layer. To enable this both RDM_TRANSPORT_HAVE_TCP and RDM_TRANSPORT_HAVE_TCP_SSL has to be defined.

RDM_TRANSPORT_SO_EXCLUSIVEADDRUSE

#define RDM_TRANSPORT_SO_EXCLUSIVEADDRUSE

#include <pspplatos.h>

Use socket option SO_EXCLUSIVEADDRUSE for binding a socket (may be defined on some OS)

RDM_TRANSPORT_SO_REUSERADDR

#define RDM_TRANSPORT_SO_REUSERADDR

#include <pspplatos.h>

Use socket option SO_REUSEADDR for binding a socket (may be defined on some OS)

RDM_TRANSPORT_SSL_DISCONNECT_BY_NOTIFYING_PEER

#define RDM_TRANSPORT_SSL_DISCONNECT_BY_NOTIFYING_PEER

#include <pspplatos.h>

Disconnect by always notifying the peer on the SSL protocol level

If neither this or RDM_TRANSPORT_SSL_DISCONNECT_MAY_NOTIFY_PEER are defined the peer will not be notified when we disconnect.

RDM_TRANSPORT_SSL_DISCONNECT_MAY_NOTIFY_PEER

#define RDM_TRANSPORT_SSL_DISCONNECT_MAY_NOTIFY_PEER

#include <pspplatos.h>

Disconnect may notify the peer on the SSL protocol level

This option only notifies the peer if there is no input data that is yet to be written into the internal BIO.

If neither this or RDM_TRANSPORT_SSL_DISCONNECT_BY_NOTIFYING_PEER are defined the peer will not be notified when we disconnect.

RDM_TRANSPORT_SSL_HAVE_ERR_GET_ERROR

#define RDM_TRANSPORT_SSL_HAVE_ERR_GET_ERROR

#include <pspplatos.h>

Have ERR_get_error

Have the Open SSL function ERR_get_error. Keep in mind that this function may not be supported everywhere since this function is not reentrant. It needs per thread or per task capabilities.

RDM_TRANSPORT_TCP_ACCEPT_NO_DELAY

#define RDM_TRANSPORT_TCP_ACCEPT_NO_DELAY

#include <pspplatos.h>

Use socket option TCP_NODELAY for accepting a connection (may be defined on some OS)

RDM_TRANSPORT_TCP_CLOSESOCKET

#define RDM_TRANSPORT_TCP_CLOSESOCKET

#include <pspplatos.h>

Use closesocket instead of close when closing a socket (may be defined on some OS)

RDM_TRANSPORT_TCP_CONNECT_NO_DELAY

#define RDM_TRANSPORT_TCP_CONNECT_NO_DELAY

#include <pspplatos.h>

Use socket option TCP_NODELAY for conneting (may be defined on some OS)

RDM_TRANSPORT_TCP_DONT_USE_KEEPALIVES

#define RDM_TRANSPORT_TCP_DONT_USE_KEEPALIVES

#include <pspplatos.h>

Use socket option SO_KEEPALIVE (may be defined on some OS)

RDM_TRANSPORT_TCP_FLUSH_NO_DELAY

#define RDM_TRANSPORT_TCP_FLUSH_NO_DELAY

#include <pspplatos.h>

Toggle socket option TCP_NODELAY to flush the TCP stream when we have a complete request from a client or a complete responce from the server (may be defined on some OS)

RDM_TRANSPORT_TCP_HAVE_MSG_NOSIGNAL

#define RDM_TRANSPORT_TCP_HAVE_MSG_NOSIGNAL

#include <pspplatos.h>

Have the send flag MSG_NOSIGNAL (may be defined on some OS)

RDM_TRANSPORT_TCP_HAVE_POLL

#define RDM_TRANSPORT_TCP_HAVE_POLL

#include <pspplatos.h>

Have poll and use this instead of select (may be defined on some OS)

RDM_TRANSPORT_TCP_HAVE_QOS

#define RDM_TRANSPORT_TCP_HAVE_QOS

#include <pspplatos.h>

Have Quality Of Service (may be defined on some OS)

RDM_TRANSPORT_TCP_LINUX

#define RDM_TRANSPORT_TCP_LINUX

#include <pspplatos.h>

Linux specific implementation details for TCP

RDM_TRANSPORT_TCP_LOCALHOST

#define RDM_TRANSPORT_TCP_LOCALHOST "127.0.0.1"

#include <pspplatos.h>

The IP address to use for localhost (may be defined on some OS)

RDM_TRANSPORT_TCP_NO_IPV6

#define RDM_TRANSPORT_TCP_NO_IPV6

#include <pspplatos.h>

No IP version 6 implementation (may be defined on some OS)

RDM_TRANSPORT_TCP_SHUTDOWN

#define RDM_TRANSPORT_TCP_SHUTDOWN

#include <pspplatos.h>

Do a shutdown before closing a socket (may be defined on some OS)

RDM_TRANSPORT_TCP_UNIX

#define RDM_TRANSPORT_TCP_UNIX

#include <pspplatos.h>

Unix specific implementation details for TCP

RDM_UNIX

#define RDM_UNIX

#include <pspplatos.h>

This is a Posix or Unix like system (may be defined on some OS)

RDM_VSNPRINTF_STB

#define RDM_VSNPRINTF_STB

#include <pspplatos.h>

A portable, fast, robust, and locale agnostic implementation of vsnprintf by Sean Barrett based on code from Jeff Roberts / RAD Game Tools and Fabian "ryg" Giesen.

This implementation is licensed by the original author under a dual license of MIT and Public Domain. We have made some trivial changes to this implementation and are hereby relicensing it to a Raima license.