version 1.4.39b
[polyglot.git] / util.h
1 \r
2 // util.h\r
3 \r
4 #ifndef UTIL_H\r
5 #define UTIL_H\r
6 \r
7 // includes\r
8 \r
9 #include <stdio.h>\r
10 #include <sys/types.h>\r
11 #include <sys/timeb.h>\r
12 \r
13 // defines\r
14 \r
15 #ifndef EXIT_SUCCES\r
16 #define EXIT_SUCCES 0\r
17 #endif\r
18 \r
19 #ifndef STDIN_FILENO\r
20 #define STDIN_FILENO 0\r
21 #endif\r
22 \r
23 #ifndef STDOUT_FILENO\r
24 #define STDOUT_FILENO 1\r
25 #endif\r
26 \r
27 \r
28 #undef FALSE\r
29 #define FALSE 0\r
30 \r
31 #undef TRUE\r
32 #define TRUE 1\r
33 \r
34 #ifdef DEBUG\r
35 #  undef DEBUG\r
36 #  define DEBUG TRUE\r
37 #else\r
38 #  define DEBUG FALSE\r
39 #endif\r
40 \r
41 #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__)\r
42 #  define S64_FORMAT "%I64d"\r
43 #  define U64_FORMAT "%016I64X"\r
44 #else\r
45 #  define S64_FORMAT "%lld"\r
46 #  define U64_FORMAT "%016llX"\r
47 #endif\r
48 \r
49 // macros\r
50 \r
51 #ifdef _MSC_VER\r
52 #  define S64(u) (u##i64)\r
53 #  define U64(u) (u##ui64)\r
54 #else\r
55 #  define S64(u) (u##LL)\r
56 #  define U64(u) (u##ULL)\r
57 #endif\r
58 \r
59 #undef ASSERT\r
60 #if DEBUG\r
61 #  define ASSERT(a) { if (!(a)) my_fatal("file \"%s\", line %d, assertion \"" #a "\" failed\n",__FILE__,__LINE__); }\r
62 #else\r
63 #  define ASSERT(a)\r
64 #endif\r
65 \r
66 #ifdef _WIN32\r
67 #define snprintf _snprintf\r
68 #endif\r
69 \r
70 #define FormatBufferSize 4096\r
71 \r
72 #ifdef _MSC_VER\r
73 #define vsnprintf _vsnprintf\r
74 #endif\r
75 \r
76 #define CONSTRUCT_ARG_STRING(format,buf)                                 \\r
77     {                                                                    \\r
78         va_list arg_list;                                                \\r
79         int written;                                                     \\r
80         va_start(arg_list,format);                                       \\r
81         written=vsnprintf(buf,                                           \\r
82                           sizeof(buf),                                   \\r
83                           format,                                        \\r
84                           arg_list);                                     \\r
85         va_end(arg_list);                                                \\r
86         buf[sizeof(buf)-1]='\0';                                         \\r
87         if(written>=sizeof(buf) || written<0){                           \\r
88            my_fatal("write_buffer overflow: file \"%s\", line %d\n",     \\r
89                    __FILE__,__LINE__);                                   \\r
90         }                                                                \\r
91     }                                                                    \\r
92 \r
93 // types\r
94 \r
95 typedef signed char sint8;\r
96 typedef unsigned char uint8;\r
97 \r
98 typedef signed short sint16;\r
99 typedef unsigned short uint16;\r
100 \r
101 typedef signed int sint32;\r
102 typedef unsigned int uint32;\r
103 \r
104 typedef int bool;\r
105 \r
106 #ifdef _MSC_VER\r
107   typedef signed __int64 sint64;\r
108   typedef unsigned __int64 uint64;\r
109 #else\r
110   typedef signed long long int sint64;\r
111   typedef unsigned long long int uint64;\r
112 #endif\r
113 \r
114 typedef struct {\r
115    double start_real;\r
116    double elapsed_real;\r
117    bool running;\r
118 } my_timer_t;\r
119 \r
120 \r
121 // functions\r
122 \r
123 extern void   util_init             ();\r
124 \r
125 extern void   my_random_init        ();\r
126 extern int    my_random_int         (int n);\r
127 extern double my_random_double      ();\r
128 \r
129 extern sint64 my_atoll              (const char string[]);\r
130 \r
131 extern int    my_round              (double x);\r
132 \r
133 extern void * my_malloc             (size_t size);\r
134 extern void * my_realloc            (void * address, size_t size);\r
135 extern void   my_free               (void * address);\r
136 \r
137 extern void   my_log_open           (const char file_name[]);\r
138 extern void   my_log_close          ();\r
139 \r
140 extern void   my_log                (const char format[], ...);\r
141 extern void   my_fatal              (const char format[], ...);\r
142 \r
143 extern bool   my_file_read_line     (FILE * file, char string[], int size);\r
144 \r
145 extern bool   my_string_empty       (const char string[]);\r
146 extern bool   my_string_whitespace  (const char string[]);\r
147 extern bool   my_string_equal       (const char string_1[], const char string_2[]);\r
148 extern bool   my_string_case_equal  (const char string_1[], const char string_2[]);\r
149 extern char * my_strdup             (const char string[]);\r
150 \r
151 extern void   my_string_clear       (const char * * variable);\r
152 extern void   my_string_set         (const char * * variable, const char string[]);\r
153 \r
154 extern double now_real              ();\r
155 \r
156 extern void   my_timer_reset        (my_timer_t * timer);\r
157 extern void   my_timer_start        (my_timer_t * timer);\r
158 extern void   my_timer_stop         (my_timer_t * timer);\r
159 \r
160 extern double my_timer_elapsed_real (const my_timer_t * timer);\r
161 \r
162 extern char * my_error();\r
163 \r
164 #endif // !defined UTIL_H\r
165 \r
166 // end of util.h\r