00001
00002
00003
00004 #ifndef _UTIL_H
00005 #define _UTIL_H
00006
00007 #include <stdio.h>
00008 #include <assert.h>
00009 #include <stdlib.h>
00010 #include <stddef.h>
00011 #include <stdarg.h>
00012 #include <sys/types.h>
00013 #include <sys/stat.h>
00014 #include <sys/wait.h>
00015 #include <memory.h>
00016 #include <errno.h>
00017
00018 #include <string>
00019
00020 #ifndef NDEBUG
00021 #define _DEBUG
00022
00023 #define dbglog(fmt, ...) \
00024 do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0)
00025
00026 #define dbgerr(fmt, ...) \
00027 do { fprintf(stderr, "Error: %s(%d): " fmt, __FILE__, __LINE__, ## __VA_ARGS__); } while (0)
00028
00029 #define dbgtrc(fmt, ...) \
00030 do { if (jvar::enable_dbgtrc) fprintf(stderr, "%s(%d): " fmt, __func__, __LINE__, ## __VA_ARGS__); } while (0)
00031
00032 #define dbgfnc() \
00033 do { fprintf(stderr, "%s in %s(%d)\n", __PRETTY_FUNCTION__, __FILE__, __LINE__); } while (0)
00034
00035 namespace jvar
00036 {
00037 void dbghex(const char* label, const void* ptr, int len);
00038 }
00039
00040 #else
00041 #undef _DEBUG
00042
00043 #define dbglog(fmt, ...)
00044
00045 #define dbgerr(fmt, ...) \
00046 do { fprintf(stderr, "Error: " fmt, ## __VA_ARGS__); } while (0)
00047
00048 #define dbgtrc(fmt, ...)
00049
00050 #define dbgfnc()
00051
00052 #define dbghex(label, ptr, len)
00053
00054
00055
00056
00057
00058
00059
00060
00061 #endif
00062
00063 #define isFlagSet(value, flag) ( ((value) & (flag)) != 0 )
00064 #define isFlagClear(value, flag) ( ((value) & (flag)) == 0 )
00065 #define setFlag(value, flag) { (value) |= (flag); }
00066 #define clearFlag(value, flag) { (value) &= ~(flag); }
00067
00068 #define countof(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))
00069
00070
00071 namespace jvar
00072 {
00073
00074 typedef unsigned char uchar;
00075 typedef short int shortint;
00076 typedef unsigned short int ushortint;
00077 typedef unsigned int uint;
00078 typedef long int longint;
00079 typedef unsigned long int ulongint;
00080
00081 extern bool enable_dbgtrc;
00082
00088 class Buffer
00089 {
00090 public:
00091 Buffer() :
00092 mMemory(NULL),
00093 mSize(0)
00094 {
00095 }
00096
00097 ~Buffer()
00098 {
00099 free();
00100 }
00101
00105 inline void* ptr()
00106 {
00107 return mMemory;
00108 }
00109
00113 inline const void* cptr()
00114 {
00115 return mMemory;
00116 }
00117
00123 inline size_t size() const
00124 {
00125 return mSize;
00126 }
00127
00133 void alloc(size_t size);
00134
00140 void reAlloc(size_t size);
00141
00145 void free();
00146
00152 void copyFrom(Buffer& src);
00153
00160 void moveFrom(Buffer& src);
00161
00170 bool readFile(const char* filename, bool nullterm);
00171
00172 private:
00173 void* mMemory;
00174 size_t mSize;
00175 };
00176
00177
00178 class InterfaceImpl
00179 {
00180 public:
00181 virtual ~InterfaceImpl()
00182 {
00183 }
00184 virtual InterfaceImpl* newImpl() = 0;
00185 };
00186
00192 ulongint getTickCount();
00193
00194
00195 }
00196
00197 #endif // _UTIL_H
00198