jvar
JS inspired Variant and Json
util.h
00001 // Copyright (c) 2014 Yasser Asmi
00002 // Released under the MIT License (http://opensource.org/licenses/MIT)
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 //namespace jvar
00055 //{
00056 //    void dbghex(const char* label, const void* ptr, int len)
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 } // jvar
00196 
00197 #endif // _UTIL_H
00198 
 All Classes Functions Variables Enumerator