#ifndef __COMMON_H__
#define __COMMON_H__

#ifdef __cplusplus
#ifndef BEGIN_DECLS
#define BEGIN_DECLS extern "C" {
#endif
#ifndef END_DECLS
#define END_DECLS }
#endif
#else
#ifndef BEGIN_DECLS
#define BEGIN_DECLS
#endif
#ifndef END_DECLS
#define END_DECLS
#endif
#endif

BEGIN_DECLS

#include <linux/limits.h>

#ifndef UNICODE
 #undef _UNICODE
#else
 #ifndef _UNICODE
  #define _UNICODE
 #endif
#endif

#define MAX_STRING_SIZE     2048
#define UUID_STRING_SIZE    36

//#if !defined(UNICODE) && defined(_WIN32)
////#define printf wprintf
//#endif


// Countable enum macro
#define M_CONC(A, B) M_CONC_(A, B)
#define M_CONC_(A, B) A##B

#define enum_count_suffix   _count
#define enum_count(tag) M_CONC(tag, enum_count_suffix)
#define countable_enum(tag, ...)    \
    enum tag {__VA_ARGS__};         \
    const size_t enum_count(tag) = sizeof((int []) {__VA_ARGS__}) / sizeof(int)

// main 함수에서 프로세스 명을 저장하는 변수(변수 정의는 main이 있는 파일의 소스 코드)
extern char g_szProcessname[MAX_STRING_SIZE + 1];
extern char g_szProcessPath[PATH_MAX + 1];


#define YEAR_OFFSET         1900
#define MONTH_OFFSET        1

#ifdef _WIN32
#define PATH_SEPERATOR      '\\'
#else
#define PATH_SEPERATOR      '/'
#endif

END_DECLS
    
#endif
