Libmacro  0.2
Libmacro is an extensible macro and hotkey library.
defines.h File Reference

Library-wide and utility definitions. More...

#include <errno.h>
#include <time.h>
#include <stdbool.h>
#include <stdint.h>
#include "mcr/warn.h"

Go to the source code of this file.

Macros

#define reterr   int
 
#define retind   size_t
 
#define retid   size_t
 
#define retcmp   int
 
#define opt
 
#define ctor
 
#define dtor
 
#define mcr_cpp_only
 
#define mcr_platform
 
#define mcr_future
 
#define MCR_PLATFORM_DEFINES_H
 
#define MCR_EXPORT   __attribute__((visibility("default")))
 
#define MCR_IMPORT   __attribute__((visibility("default")))
 
#define MCR_API   MCR_IMPORT
 
#define MCR_INLINE   inline
 
#define MCR_STR_HELPER(x)   #x
 
#define MCR_STR(x)   MCR_STR_HELPER(x)
 
#define MCR_EXP_HELPER(x)   x
 
#define MCR_EXP(x)   MCR_EXP_HELPER(x)
 
#define MCR_TOKEN_HELPER(x, y)   x ##y
 
#define MCR_SNAKE_HELPER(x, y)   x ##_ ##y
 
#define MCR_TOKEN(x, y)   MCR_TOKEN_HELPER(x, y)
 
#define MCR_SNAKE(x, y)   MCR_SNAKE_HELPER(x, y)
 
#define MCR_LINE   __FILE__ "(" MCR_STR(__LINE__) ")"
 
#define MCR_PLATFORM   none
 
#define UNUSED(x)   ((void)(x))
 
#define MCR_CMP(lhs, rhs)   (((lhs) > (rhs)) - ((lhs) < (rhs)))
 
#define MCR_CMP_CAST(casting, lhs, rhs)   MCR_CMP(casting(lhs), casting(rhs))
 
#define MCR_CMP_PTR(T, lhsPtr, rhsPtr)
 
#define MCR_OFFSET(structDecl, memberName, outSizeVariable)
 
#define mcr_cast(T, obj)   ((T)(obj))
 
#define mcr_castpt(T, obj)   ((T *)(obj))
 
#define mcr_null   NULL
 
#define mcr_ddo(stuff)   {}
 
#define mcr_ifdo(fnPtr, ...)
 
#define mcr_ifreturndo(fnPtr, ...)
 
#define mcr_dprint(...)   mcr_ddo(printf(__VA_ARGS__))
 
#define mcr_dexit   mcr_ddo({ mcr_dmsg; exit(mcr_err); })
 
#define mcr_dmsg
 
#define mcr_dassert(expression)   mcr_ddo(assert(expression))
 
#define mcr_arrlen(arr)   (sizeof(arr) / sizeof(*(arr)))
 
#define mcr_errno(fallbackError)
 
#define mcr_error_return
 
#define mcr_error_set(errorNumber)
 
#define mcr_error_set_return(errorNumber)
 
#define ZERO(inst)   memset(&(inst), 0, sizeof(inst))
 
#define ZERO_PTR(ptr)   memset(ptr, 0, sizeof(*(ptr)))
 
#define dmsg   mcr_dmsg
 
#define dassert(expr)   mcr_dassert(expr)
 
#define arrlen(arr)   mcr_arrlen(arr)
 
#define mset_error(errorNumber)   mcr_error_set(errorNumber)
 
#define error_set_return(errorNumber)   mcr_error_set_return(errorNumber)
 
#define MCR_MOD_ANY   ((unsigned int) ~0)
 
#define MCR_THREAD_MAX   0x10
 
#define MCR_MACRO_JOIN_TIMEOUT   2
 
#define MCR_MAX_PAUSE_COUNT   5
 
#define MCR_HIDECHO_ANY   mcr_cast(size_t, ~0)
 
#define MCR_KEY_ANY   mcr_cast(int, 0)
 
#define mcr_throwif(condition, errorNumber)
 
#define mcr_assert_receive_function(receiver, receiveFnc)
 
#define MCR_DECL_INTERFACE(className)
 
#define MCR_PLATFORM_H   MCR_STR(mcr/MCR_PLATFORM/p_libmacro.h)
 

Detailed Description

Library-wide and utility definitions.

Definition in file defines.h.

Macro Definition Documentation

§ arrlen

#define arrlen (   arr)    mcr_arrlen(arr)

mcr_arrlen

Definition at line 367 of file defines.h.

§ ctor

#define ctor

This function is a constructor. Initialize members and resources.

Precondition
Only call once. The referenced object to initialize must not already be initialized.

Definition at line 85 of file defines.h.

§ dassert

#define dassert (   expr)    mcr_dassert(expr)

mcr_dassert

Definition at line 363 of file defines.h.

§ dmsg

#define dmsg   mcr_dmsg

mcr_dmsg

Definition at line 359 of file defines.h.

§ dtor

#define dtor

This function is a deconstructor. Deinitialize members and resources.

Postcondition
Resources will be freed and object may be reinitialized to be used again.

Definition at line 93 of file defines.h.

§ error_set_return

#define error_set_return (   errorNumber)    mcr_error_set_return(errorNumber)

mcr_error_return

Definition at line 375 of file defines.h.

§ mcr_arrlen

#define mcr_arrlen (   arr)    (sizeof(arr) / sizeof(*(arr)))

For a static array definition get the number of elements.

Parameters
arrStatic array
Returns
size_t Number of elements

Definition at line 306 of file defines.h.

§ mcr_assert_receive_function

#define mcr_assert_receive_function (   receiver,
  receiveFnc 
)
Value:
mcr_throwif(!receiveFnc, EFAULT); \
mcr_throwif((receiverFnc == mcr_Trigger_receive \
|| receiverFnc == mcr_Macro_receive) && !receiver, EINVAL);
MCR_API bool mcr_Trigger_receive(struct mcr_DispatchReceiver *dispReceiver, struct mcr_Signal *dispatchSignal, unsigned int mods)
mcr_DispatchReceiver_fnc for triggers
#define mcr_throwif(condition, errorNumber)
Definition: defines.h:415
MCR_API bool mcr_Macro_receive(struct mcr_DispatchReceiver *dispPt, struct mcr_Signal *sigPt, unsigned int mods)

mcr_DispatchReceiver must have a valid receiver function, and known receiver functions also require an object to receive. mcr_cpp_only

Definition at line 427 of file defines.h.

§ mcr_cast

#define mcr_cast (   T,
  obj 
)    ((T)(obj))
Todo:
mcr_cast Not required if using functions instead of defines.

Definition at line 250 of file defines.h.

§ MCR_CMP

#define MCR_CMP (   lhs,
  rhs 
)    (((lhs) > (rhs)) - ((lhs) < (rhs)))

Compare integral types. Casting must be done manually.

Parameters
lhsLeft side
rhsRight side
Returns
retcmp

Definition at line 195 of file defines.h.

§ MCR_CMP_CAST

#define MCR_CMP_CAST (   casting,
  lhs,
  rhs 
)    MCR_CMP(casting(lhs), casting(rhs))

Integral comparison with built-in casting

Parameters
castingPrefix used to cast variables before comparison
lhsLeft side
rhsRight side
Returns
retcmp

Definition at line 205 of file defines.h.

§ MCR_CMP_PTR

#define MCR_CMP_PTR (   T,
  lhsPtr,
  rhsPtr 
)
Value:
(lhsPtr && rhsPtr ? \
MCR_CMP(*mcr_castpt(T, lhsPtr), *mcr_castpt(T, rhsPtr)) : \
MCR_CMP(lhsPtr, rhsPtr))
#define MCR_CMP(lhs, rhs)
Definition: defines.h:195

Integral comparison of pointers with built-in casting

If either pointer is null the pointer addresses are compared.

Parameters
TNative type each pointer is pointing to. e.g. if comparing pointers to integers T should be int. If either pointer is const then T must also be const. e.g. const int
lhsPtrPointer to left side comparison
rhsPtrPointer to right side comparison
Returns
retcmp

Definition at line 218 of file defines.h.

§ mcr_cpp_only

#define mcr_cpp_only

Only use with C++.

Definition at line 99 of file defines.h.

§ mcr_dassert

#define mcr_dassert (   expression)    mcr_ddo(assert(expression))

Assertion only for debug builds

Definition at line 298 of file defines.h.

§ MCR_DECL_INTERFACE

#define MCR_DECL_INTERFACE (   className)
Value:
className() = default; \
className(const className &) = default; \
virtual ~className() = default; \
className &operator =(const className &) = default;

mcr_cpp_only

Definition at line 434 of file defines.h.

§ mcr_dexit

#define mcr_dexit   mcr_ddo({ mcr_dmsg; exit(mcr_err); })

Only when debugging exit with mcr_err error code.

Definition at line 285 of file defines.h.

§ mcr_dmsg

#define mcr_dmsg
Value:
mcr_ddo(fprintf(stderr, "Error %d: " MCR_LINE ", %s: %s.\n", \
mcr_err, mcr_timestamp(), mcr_error_str(mcr_err)))
MCR_API const char * mcr_timestamp()
#define MCR_LINE
Definition: defines.h:176

Automated error message of mcr_errno.

Print to stderr for only debug builds.

Definition at line 292 of file defines.h.

§ mcr_dprint

#define mcr_dprint (   ...)    mcr_ddo(printf(__VA_ARGS__))

If debug build, print to stdout.

Definition at line 281 of file defines.h.

§ mcr_errno

#define mcr_errno (   fallbackError)
Value:
{ \
mcr_err = errno; \
if (!mcr_err) \
mcr_err = (fallbackError); \
mcr_dmsg; \
}

Set mcr_err to errno.

Also mcr_dmsg

Parameters
fallbackErrorIf errno is not an error, use this error code.

Definition at line 314 of file defines.h.

§ mcr_error_return

#define mcr_error_return
Value:
{ \
mcr_dmsg; \
return mcr_err; \
}

Immediately mcr_dmsg and return mcr_err.

Only use in a function that returns reterr

Definition at line 326 of file defines.h.

§ mcr_error_set

#define mcr_error_set (   errorNumber)
Value:
{ \
mcr_err = (errorNumber); \
mcr_dmsg; \
}

Set mcr_err and mcr_dmsg

Definition at line 333 of file defines.h.

§ mcr_error_set_return

#define mcr_error_set_return (   errorNumber)
Value:
{ \
mcr_err = (errorNumber); \
mcr_dmsg; \
return errorNumber; \
}

Set mcr_err, mcr_dmsg and return mcr_err.

Only use in a function that returns reterr

Definition at line 343 of file defines.h.

§ MCR_EXP

#define MCR_EXP (   x)    MCR_EXP_HELPER(x)

Expand macros: e.g. MCR_EXP(myMacro) => myMacroExpanded

Definition at line 165 of file defines.h.

§ mcr_future

#define mcr_future

Not currently implemented, or not yet useful, but it will be.

Definition at line 111 of file defines.h.

§ MCR_HIDECHO_ANY

#define MCR_HIDECHO_ANY   mcr_cast(size_t, ~0)

Any or invalid echo code

Definition at line 404 of file defines.h.

§ mcr_ifdo

#define mcr_ifdo (   fnPtr,
  ... 
)
Value:
if (fnPtr) { \
(fnPtr)(__VA_ARGS__); \
}

Definition at line 267 of file defines.h.

§ mcr_ifreturndo

#define mcr_ifreturndo (   fnPtr,
  ... 
)
Value:
if (fnPtr) { \
return (fnPtr)(__VA_ARGS__); \
}

Definition at line 274 of file defines.h.

§ MCR_KEY_ANY

#define MCR_KEY_ANY   mcr_cast(int, 0)

Any or invalid key code

Definition at line 406 of file defines.h.

§ MCR_LINE

#define MCR_LINE   __FILE__ "(" MCR_STR(__LINE__) ")"

Constant string "file(line)"

Definition at line 176 of file defines.h.

§ MCR_MACRO_JOIN_TIMEOUT

#define MCR_MACRO_JOIN_TIMEOUT   2

Seconds to wait for macros to respond when they are being interrupted or paused

Definition at line 394 of file defines.h.

§ MCR_MAX_PAUSE_COUNT

#define MCR_MAX_PAUSE_COUNT   5

The number of times a macro will wait while paused until it resumes

Definition at line 400 of file defines.h.

§ MCR_MOD_ANY

#define MCR_MOD_ANY   ((unsigned int) ~0)

Any or invalid modifier

Definition at line 379 of file defines.h.

§ MCR_OFFSET

#define MCR_OFFSET (   structDecl,
  memberName,
  outSizeVariable 
)
Value:
{ \
structDecl *__internalStruct = mcr_null; \
outSizeVariable = mcr_cast(size_t, &(__internalStruct).memberName); \
}
#define mcr_cast(T, obj)
Definition: defines.h:250

Get the bytes offset of a member of a struct.

Parameters
structDeclType
memberNameName of member
outSizeVariablesize_t Byte size offset output

Definition at line 230 of file defines.h.

§ mcr_platform

#define mcr_platform

Required to be re-defined for each platform

Definition at line 105 of file defines.h.

§ MCR_PLATFORM_DEFINES_H

#define MCR_PLATFORM_DEFINES_H

If defined, this file of platform definitions will always be included here. Must be a quote-enclosed string.

Definition at line 118 of file defines.h.

§ MCR_SNAKE

#define MCR_SNAKE (   x,
 
)    MCR_SNAKE_HELPER(x, y)

MCR_SNAKE(myString, myString2) => myString_myString2

Definition at line 172 of file defines.h.

§ MCR_STR

#define MCR_STR (   x)    MCR_STR_HELPER(x)

Stringify, or create a string. e.g. MCR_STR(myString) => "myString"

Definition at line 161 of file defines.h.

§ MCR_THREAD_MAX

#define MCR_THREAD_MAX   0x10

Maximum thread count for macros

For better security macros will never create more than this number of threads

Definition at line 387 of file defines.h.

§ mcr_throwif

#define mcr_throwif (   condition,
  errorNumber 
)
Value:
if (condition) { \
mcr_dassert(condition); \
::mcr::throwError(MCR_LINE, errorNumber); \
}
#define MCR_LINE
Definition: defines.h:176

If true, print a file+line message and throw the error.

mcr_cpp_only Will not set mcr_err, as thrown errors should be handled with catch. Only use in C+, because of throw.

Definition at line 415 of file defines.h.

§ MCR_TOKEN

#define MCR_TOKEN (   x,
 
)    MCR_TOKEN_HELPER(x, y)

MCR_TOKEN(MyString, MyString2) => MyStringMyString2

Definition at line 170 of file defines.h.

§ mset_error

#define mset_error (   errorNumber)    mcr_error_set(errorNumber)

mcr_error_set

Definition at line 371 of file defines.h.

§ opt

#define opt

Optional parameter

Definition at line 76 of file defines.h.

§ retcmp

#define retcmp   int

Return 0 if comparison is equal, less than 0 if left < right, or greater than 0 if left > right.

Definition at line 70 of file defines.h.

§ reterr

#define reterr   int

Return 0 for success, otherwise standard error code from errno.h.

Definition at line 50 of file defines.h.

§ retid

#define retid   size_t

Return size_t id, or -1 on error.

Definition at line 62 of file defines.h.

§ retind

#define retind   size_t

Return size_t index, or -1 on error.

Definition at line 56 of file defines.h.

§ UNUSED

#define UNUSED (   x)    ((void)(x))

Remove compiler warning for unused variable.

Definition at line 186 of file defines.h.