iceWing
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
Macros | Typedefs | Functions | Variables
tools.h File Reference
#include <sys/types.h>
#include <limits.h>
#include <glib.h>

Go to the source code of this file.

Macros

#define ICEWING_NAME_D   "iceWing"
#define IW_TIME_MESSURE
#define __FUNCTION__   __FILE__
#define FALSE   0
#define TRUE   1
#define false   FALSE
#define true   TRUE
#define PATH_MAX   256
#define IW_TIME_DIFF(t1, t2)
#define MIN(a, b)   ((a) < (b) ? (a) : (b))
#define MAX(a, b)   ((a) > (b) ? (a) : (b))
#define CLAMP(x, low, high)   (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
#define G_PI   3.14159265358979323846
#define G_PI_2   1.57079632679489661923
#define G_PI_4   0.78539816339744830962
#define G_GINT64_FORMAT   "li"
#define GINT64_PRINTTYPE   long
#define IW_ARG_NO_NUMBER   ((void*)G_MININT)
#define iw_error_1(a1)   iw_error_x (__FUNCTION__,__LINE__,a1)
#define iw_error_2(a1, a2)   iw_error_x (__FUNCTION__,__LINE__,a1,a2)
#define iw_error_3(a1, a2, a3)   iw_error_x (__FUNCTION__,__LINE__,a1,a2,a3)
#define iw_error_4(a1, a2, a3, a4)   iw_error_x (__FUNCTION__,__LINE__,a1,a2,a3,a4)
#define iw_error_5(a1, a2, a3, a4, a5)   iw_error_x (__FUNCTION__,__LINE__,a1,a2,a3,a4,a5)
#define iw_error_6(a1, a2, a3, a4, a5, a6)   iw_error_x (__FUNCTION__,__LINE__,a1,a2,a3,a4,a5,a6)
#define iw_warning_1(a1)   iw_warning_x (__FUNCTION__,__LINE__,a1)
#define iw_warning_2(a1, a2)   iw_warning_x (__FUNCTION__,__LINE__,a1,a2)
#define iw_warning_3(a1, a2, a3)   iw_warning_x (__FUNCTION__,__LINE__,a1,a2,a3)
#define iw_warning_4(a1, a2, a3, a4)   iw_warning_x (__FUNCTION__,__LINE__,a1,a2,a3,a4)
#define iw_warning_5(a1, a2, a3, a4, a5)   iw_warning_x (__FUNCTION__,__LINE__,a1,a2,a3,a4,a5)
#define iw_warning_6(a1, a2, a3, a4, a5, a6)   iw_warning_x (__FUNCTION__,__LINE__,a1,a2,a3,a4,a5,a6)
#define iw_debug_1(t, a1)
#define iw_debug_2(t, a1, a2)
#define iw_debug_3(t, a1, a2, a3)
#define iw_debug_4(t, a1, a2, a3, a4)
#define iw_debug_5(t, a1, a2, a3, a4, a5)
#define iw_debug_6(t, a1, a2, a3, a4, a5, a6)
#define iw_debug_7(t, a1, a2, a3, a4, a5, a6, a7)
#define iw_debug_8(t, a1, a2, a3, a4, a5, a6, a7, a8)
#define iw_debug_9(t, a1, a2, a3, a4, a5, a6, a7, a8, a9)
#define iw_debug_10(t, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
#define iw_assert_1(ex, a1)
#define iw_assert_2(ex, a1, a2)
#define iw_assert_3(ex, a1, a2, a3)
#define iw_assert_4(ex, a1, a2, a3, a4)
#define iw_assert_5(ex, a1, a2, a3, a4, a5)
#define iw_time_add_static(number, name)
#define iw_time_add_static2(number, name, number2, name2)
#define iw_time_add_static3(number, name, number2, name2, number3, name3)

Typedefs

typedef int BOOL

Functions

void iw_error (const char *str,...)
void iw_warning (const char *str,...)
void iw_error_errno (const char *str,...)
void iw_warning_errno (const char *str,...)
void * iw_malloc (size_t size, const char *err)
void * iw_malloc0 (size_t size, const char *err)
void * iw_realloc (void *ptr, size_t size, const char *err)
void * iw_malloc_align (size_t size, const char *err)
void iw_free_align (void *ptr)
void iw_string_split (char *str, int *array_len, char ***array)
char iw_parse_args (int argc, char **argv, int *nr, void **arg, const char *pattern)
BOOL iw_load_args (char *args, int argc, char **argv, int *nargc, char ***nargv)
void iw_usleep (unsigned long usec)
void iw_showtid (int level, const char *str)
int iw_time_add (const char *name)
void iw_time_set_enabled (BOOL enabled)
void iw_time_init (int nr)
void iw_time_init_all (void)
void iw_time_start (int nr)
long iw_time_stop (int nr, BOOL show)
void iw_time_show (void)
void iw_error_x (const char *proc, int line, const char *str,...) G_GNUC_PRINTF(3
void void iw_warning_x (const char *proc, int line, const char *str,...) G_GNUC_PRINTF(3
void void void iw_error_errno_x (const char *proc, int line, const char *str,...) G_GNUC_PRINTF(3
void void void void iw_warning_errno_x (const char *proc, int line, const char *str,...) G_GNUC_PRINTF(3
void void void void void iw_debug_set_level (int level)

Variables

char * ICEWING_NAME
char * ICEWING_VERSION

Macro Definition Documentation

#define ICEWING_NAME_D   "iceWing"
#define IW_TIME_MESSURE

Should the time measurement be performed ?

#define __FUNCTION__   __FILE__
#define FALSE   0
#define TRUE   1
#define false   FALSE
#define true   TRUE
#define PATH_MAX   256
#define IW_TIME_DIFF (   t1,
  t2 
)
Value:
(((t1).tv_sec-(t2).tv_sec) * 1000 \
+ ((t1).tv_usec - (t2).tv_usec) / 1000)

Return the difference in ms between the timeval's t1 and t2

#define MIN (   a,
 
)    ((a) < (b) ? (a) : (b))
#define MAX (   a,
 
)    ((a) > (b) ? (a) : (b))
#define CLAMP (   x,
  low,
  high 
)    (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
#define G_PI   3.14159265358979323846

Somehow in the wrong file ...

#define G_PI_2   1.57079632679489661923
#define G_PI_4   0.78539816339744830962
#define G_GINT64_FORMAT   "li"
#define GINT64_PRINTTYPE   long
#define IW_ARG_NO_NUMBER   ((void*)G_MININT)

Indicator for "no number given" for optional options in parse_args()

#define iw_error_1 (   a1)    iw_error_x (__FUNCTION__,__LINE__,a1)
#define iw_error_2 (   a1,
  a2 
)    iw_error_x (__FUNCTION__,__LINE__,a1,a2)
#define iw_error_3 (   a1,
  a2,
  a3 
)    iw_error_x (__FUNCTION__,__LINE__,a1,a2,a3)
#define iw_error_4 (   a1,
  a2,
  a3,
  a4 
)    iw_error_x (__FUNCTION__,__LINE__,a1,a2,a3,a4)
#define iw_error_5 (   a1,
  a2,
  a3,
  a4,
  a5 
)    iw_error_x (__FUNCTION__,__LINE__,a1,a2,a3,a4,a5)
#define iw_error_6 (   a1,
  a2,
  a3,
  a4,
  a5,
  a6 
)    iw_error_x (__FUNCTION__,__LINE__,a1,a2,a3,a4,a5,a6)
#define iw_warning_1 (   a1)    iw_warning_x (__FUNCTION__,__LINE__,a1)
#define iw_warning_2 (   a1,
  a2 
)    iw_warning_x (__FUNCTION__,__LINE__,a1,a2)
#define iw_warning_3 (   a1,
  a2,
  a3 
)    iw_warning_x (__FUNCTION__,__LINE__,a1,a2,a3)
#define iw_warning_4 (   a1,
  a2,
  a3,
  a4 
)    iw_warning_x (__FUNCTION__,__LINE__,a1,a2,a3,a4)
#define iw_warning_5 (   a1,
  a2,
  a3,
  a4,
  a5 
)    iw_warning_x (__FUNCTION__,__LINE__,a1,a2,a3,a4,a5)
#define iw_warning_6 (   a1,
  a2,
  a3,
  a4,
  a5,
  a6 
)    iw_warning_x (__FUNCTION__,__LINE__,a1,a2,a3,a4,a5,a6)
#define iw_debug_1 (   t,
  a1 
)
#define iw_debug_2 (   t,
  a1,
  a2 
)
#define iw_debug_3 (   t,
  a1,
  a2,
  a3 
)
#define iw_debug_4 (   t,
  a1,
  a2,
  a3,
  a4 
)
#define iw_debug_5 (   t,
  a1,
  a2,
  a3,
  a4,
  a5 
)
#define iw_debug_6 (   t,
  a1,
  a2,
  a3,
  a4,
  a5,
  a6 
)
#define iw_debug_7 (   t,
  a1,
  a2,
  a3,
  a4,
  a5,
  a6,
  a7 
)
#define iw_debug_8 (   t,
  a1,
  a2,
  a3,
  a4,
  a5,
  a6,
  a7,
  a8 
)
#define iw_debug_9 (   t,
  a1,
  a2,
  a3,
  a4,
  a5,
  a6,
  a7,
  a8,
  a9 
)
#define iw_debug_10 (   t,
  a1,
  a2,
  a3,
  a4,
  a5,
  a6,
  a7,
  a8,
  a9,
  a10 
)
#define iw_assert_1 (   ex,
  a1 
)
#define iw_assert_2 (   ex,
  a1,
  a2 
)
#define iw_assert_3 (   ex,
  a1,
  a2,
  a3 
)
#define iw_assert_4 (   ex,
  a1,
  a2,
  a3,
  a4 
)
#define iw_assert_5 (   ex,
  a1,
  a2,
  a3,
  a4,
  a5 
)
#define iw_time_add_static (   number,
  name 
)
Value:
static int number = -1; \
if (number<0) number = iw_time_add (name);
#define iw_time_add_static2 (   number,
  name,
  number2,
  name2 
)
Value:
static int number = -1, number2 = -1; \
if (number<0) { \
number = iw_time_add (name); \
number2 = iw_time_add (name2); \
}
#define iw_time_add_static3 (   number,
  name,
  number2,
  name2,
  number3,
  name3 
)
Value:
static int number = -1, number2 = -1, number3 = -1; \
if (number<0) { \
number = iw_time_add (name); \
number2 = iw_time_add (name2); \
number3 = iw_time_add (name3); \
}

Typedef Documentation

typedef int BOOL

Function Documentation

void iw_error ( const char *  str,
  ... 
)
void iw_warning ( const char *  str,
  ... 
)
void iw_error_errno ( const char *  str,
  ... 
)
void iw_warning_errno ( const char *  str,
  ... 
)
void* iw_malloc ( size_t  size,
const char *  err 
)

  Call malloc() / calloc() / realloc().
  If err!=NULL and memory could not be allocated, exit with
  'out of memory: "err"' by calling iw_error().

void* iw_malloc0 ( size_t  size,
const char *  err 
)
void* iw_realloc ( void *  ptr,
size_t  size,
const char *  err 
)
void* iw_malloc_align ( size_t  size,
const char *  err 
)

  Allocate 16 byte aligned memory. Must be freed with iw_free_align().
  If err!=NULL and memory could not be allocated, exit with
  'out of memory: "err"' by calling iw_error().

void iw_free_align ( void *  ptr)
void iw_string_split ( char *  str,
int *  array_len,
char ***  array 
)

  Return in 'array' a NULL terminated array of strings pointing to
  the parts of 'str', which are separated by spaces. In 'str' '\0'
  are inserted. In 'array_len' the number of entries in 'array' is
  returned.

char iw_parse_args ( int  argc,
char **  argv,
int *  nr,
void **  arg,
const char *  pattern 
)

  Checks if argv[nr] can be found in pattern, the check is case
  insensitive. Increment nr afterwards. Format of pattern in EBNF:
    { "-" token ":" ch ["r"|"ro"|"i"|"io"|"f"|"fo"|"c"] " " }
    token: string without " " and without ":"
    ch  : Any character, given back if -token is found
    "r"  : Argument is required -> returned in *arg
    "i"  : Int argument is required -> returned in *arg
    "f"  : Float argument is required -> returned in *arg
    "c"  : Token can be continued in any way -> returned in *arg
    "o"  : Argument is optional
  Example: "-i:Ii -s:Sr -h:H -help:H --help:H"
  On error, print an error message on stderr and return '\0'.

BOOL iw_load_args ( char *  args,
int  argc,
char **  argv,
int *  nargc,
char ***  nargv 
)

  PRIVATE: If args, split args, otherwise use argv. Check for any
  '@file', load the file, exchange '@file' with the args from the
  file, and expand any vars, commands, and wildcards. nargv is newly
  allocated.

void iw_usleep ( unsigned long  usec)

  Wrapper for usleep() for enhanced portability (the OSF alpha
  version is really strange).

void iw_showtid ( int  level,
const char *  str 
)

  On linux: Show the thread ID as a debug output via gettid().

int iw_time_add ( const char *  name)

  Add a new timer and return its number (must be passed to the other
  time_...() functions). 'name' describes the new timer.

void iw_time_set_enabled ( BOOL  enabled)

  Enable/Disable time_start(), time_stop(), and time_show().

void iw_time_init ( int  nr)

  Reset time measurement number nr (-> set mean value, count to 0).

void iw_time_init_all ( void  )

  Reset all timer, i.e. call iw_time_init() for all added timers.

void iw_time_start ( int  nr)

  Start the timer nr (which was added before with iw_time_add()).

long iw_time_stop ( int  nr,
BOOL  show 
)

  Stop the timer number nr.
  show==TRUE: Print time and average time for number nr on stdout.
  Return the elapsed real time in ms.

void iw_time_show ( void  )

  Print average time for all registered timers on stdout, for which
  at least one time time_stop() was called.

void iw_error_x ( const char *  proc,
int  line,
const char *  str,
  ... 
)

  Output passed arguments (including a short header) on stderr and
  terminate the program.

void void iw_warning_x ( const char *  proc,
int  line,
const char *  str,
  ... 
)

  Output passed arguments (including a short header) on stderr.

void void void iw_error_errno_x ( const char *  proc,
int  line,
const char *  str,
  ... 
)

  Output passed arguments (including a short header) on stderr,
  append ': 'strerror(errno) and terminate the program.

void void void void iw_warning_errno_x ( const char *  proc,
int  line,
const char *  str,
  ... 
)

  Output passed arguments (including a short header) on stderr and
  append ': 'strerror(errno).

void void void void void iw_debug_set_level ( int  level)

  Initialize the talklevel for following debug() calls. Debug
  messages are only given out if there level < talklevel.


Variable Documentation

char* ICEWING_NAME

== "iceWing"

char* ICEWING_VERSION

iceWing version string