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