version 1.4.46b
[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 \r
95 \r
96 // types\r
97 \r
98 typedef signed char sint8;\r
99 typedef unsigned char uint8;\r
100 \r
101 typedef signed short sint16;\r
102 typedef unsigned short uint16;\r
103 \r
104 typedef signed int sint32;\r
105 typedef unsigned int uint32;\r
106 \r
107 typedef int bool;\r
108 \r
109 #ifdef _MSC_VER\r
110   typedef signed __int64 sint64;\r
111   typedef unsigned __int64 uint64;\r
112 #else\r
113   typedef signed long long int sint64;\r
114   typedef unsigned long long int uint64;\r
115 #endif\r
116 \r
117 typedef struct {\r
118    double start_real;\r
119    double elapsed_real;\r
120    bool running;\r
121 } my_timer_t;\r
122 \r
123 \r
124 // functions\r
125 \r
126 extern void   util_init             ();\r
127 \r
128 extern void   my_random_init        ();\r
129 extern int    my_random_int         (int n);\r
130 extern double my_random_double      ();\r
131 \r
132 extern sint64 my_atoll              (const char string[]);\r
133 \r
134 extern int    my_round              (double x);\r
135 \r
136 extern void * my_malloc             (size_t size);\r
137 extern void * my_realloc            (void * address, size_t size);\r
138 extern void   my_free               (void * address);\r
139 \r
140 extern void   my_log_open           (const char file_name[]);\r
141 extern void   my_log_close          ();\r
142 \r
143 extern void   my_log                (const char format[], ...);\r
144 extern void   my_fatal              (const char format[], ...);\r
145 \r
146 extern bool   my_file_read_line     (FILE * file, char string[], int size);\r
147 extern void   my_path_join          (char *join_path, const char *path, const char *file);\r
148 \r
149 extern int    my_mkdir              (const char *path);\r
150 \r
151 extern bool   my_string_empty       (const char string[]);\r
152 extern bool   my_string_whitespace  (const char string[]);\r
153 extern bool   my_string_equal       (const char string_1[], const char string_2[]);\r
154 extern bool   my_string_case_equal  (const char string_1[], const char string_2[]);\r
155 extern const char* my_string_case_contains(const char haystack[], \r
156                                            const char needle[]);\r
157 \r
158 \r
159 extern bool   my_string_to_lower    (char dst[], const char src[]);\r
160 \r
161 extern char * my_strdup             (const char string[]);\r
162 \r
163 extern void   my_string_clear       (const char * * variable);\r
164 extern void   my_string_set         (const char * * variable, const char string[]);\r
165 \r
166 extern double now_real              ();\r
167 \r
168 extern void   my_timer_reset        (my_timer_t * timer);\r
169 extern void   my_timer_start        (my_timer_t * timer);\r
170 extern void   my_timer_stop         (my_timer_t * timer);\r
171 \r
172 extern double my_timer_elapsed_real (const my_timer_t * timer);\r
173 \r
174 extern char * my_error();\r
175 \r
176 #endif // !defined UTIL_H\r
177 \r
178 // end of util.h\r