/* [<][>][^][v][top][bottom][index][help] */
// util.h
#ifndef UTIL_H
#define UTIL_H
// includes
#include <cstdio>
// constants
#undef FALSE
#define FALSE 0
#undef TRUE
#define TRUE 1
#ifdef DEBUG
# undef DEBUG
# define DEBUG TRUE
#else
# define DEBUG FALSE
#endif
#ifdef _MSC_VER
# define S64_FORMAT "%I64d"
# define U64_FORMAT "%016I64X"
#else
# define S64_FORMAT "%lld"
# define U64_FORMAT "%016llX"
#endif
// macros
#ifdef _MSC_VER
# define S64(u) (u##i64)
# define U64(u) (u##ui64)
#else
# define S64(u) (u##LL)
# define U64(u) (u##ULL)
#endif
#undef ASSERT
#if DEBUG
# define ASSERT(a) { if (!(a)) my_fatal("file \"%s\", line %d, assertion \"" #a "\" failed\n",__FILE__,__LINE__); }
#else
# define ASSERT(a)
#endif
// types
typedef signed char sint8;
typedef unsigned char uint8;
typedef signed short sint16;
typedef unsigned short uint16;
typedef signed int sint32;
typedef unsigned int uint32;
#ifdef _MSC_VER
typedef signed __int64 sint64;
typedef unsigned __int64 uint64;
#else
typedef signed long long int sint64;
typedef unsigned long long int uint64;
#endif
struct my_timer_t {
double start_real;
double start_cpu;
double elapsed_real;
double elapsed_cpu;
bool running;
};
// functions
extern void util_init ();
extern void my_random_init ();
extern int my_random (int n);
extern sint64 my_atoll (const char string[]);
extern int my_round (double x);
extern void * my_malloc (int size);
extern void my_free (void * address);
extern void my_fatal (const char format[], ...);
extern bool my_file_read_line (FILE * file, char string[], int size);
extern bool my_string_empty (const char string[]);
extern bool my_string_equal (const char string_1[], const char string_2[]);
extern char * my_strdup (const char string[]);
extern void my_string_clear (const char * * variable);
extern void my_string_set (const char * * variable, const char string[]);
extern void my_timer_reset (my_timer_t * timer);
extern void my_timer_start (my_timer_t * timer);
extern void my_timer_stop (my_timer_t * timer);
extern double my_timer_elapsed_real (const my_timer_t * timer);
extern double my_timer_elapsed_cpu (const my_timer_t * timer);
extern double my_timer_cpu_usage (const my_timer_t * timer);
#endif // !defined UTIL_H
// end of util.h