/* * Copyright (C) 2008-2012 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef TRINITYCORE_COMMON_H #define TRINITYCORE_COMMON_H // config.h needs to be included 1st // TODO this thingy looks like hack, but its not, need to // make separate header however, because It makes mess here. #ifdef HAVE_CONFIG_H // Remove Some things that we will define // This is in case including another config.h // before trinity config.h #ifdef PACKAGE #undef PACKAGE #endif //PACKAGE #ifdef PACKAGE_BUGREPORT #undef PACKAGE_BUGREPORT #endif //PACKAGE_BUGREPORT #ifdef PACKAGE_NAME #undef PACKAGE_NAME #endif //PACKAGE_NAME #ifdef PACKAGE_STRING #undef PACKAGE_STRING #endif //PACKAGE_STRING #ifdef PACKAGE_TARNAME #undef PACKAGE_TARNAME #endif //PACKAGE_TARNAME #ifdef PACKAGE_VERSION #undef PACKAGE_VERSION #endif //PACKAGE_VERSION #ifdef VERSION #undef VERSION #endif //VERSION # include "Config.h" #undef PACKAGE #undef PACKAGE_BUGREPORT #undef PACKAGE_NAME #undef PACKAGE_STRING #undef PACKAGE_TARNAME #undef PACKAGE_VERSION #undef VERSION #endif //HAVE_CONFIG_H #include "Define.h" #include "Dynamic/UnorderedMap.h" #include #include #include #include #include #include #include #include #if PLATFORM == PLATFORM_WINDOWS #define STRCASECMP stricmp #else #define STRCASECMP strcasecmp #endif #include #include #include #include #include #include #include #include "Threading/LockedQueue.h" #include "Threading/Threading.h" #include #include #include #include #if PLATFORM == PLATFORM_WINDOWS # include // XP winver - needed to compile with standard leak check in MemoryLeaks.h // uncomment later if needed //#define _WIN32_WINNT 0x0501 # include //#undef WIN32_WINNT #else # include # include # include # include # include # include #endif #if COMPILER == COMPILER_MICROSOFT #include #define I32FMT "%08I32X" #define I64FMT "%016I64X" #define snprintf _snprintf #define atoll __atoi64 #define vsnprintf _vsnprintf #define finite(X) _finite(X) #define llabs _abs64 #else #define stricmp strcasecmp #define strnicmp strncasecmp #define I32FMT "%08X" #define I64FMT "%016llX" #endif inline float finiteAlways(float f) { return finite(f) ? f : 0.0f; } #define atol(a) strtoul( a, NULL, 10) #define STRINGIZE(a) #a enum TimeConstants { MINUTE = 60, HOUR = MINUTE*60, DAY = HOUR*24, WEEK = DAY*7, MONTH = DAY*30, YEAR = MONTH*12, IN_MILLISECONDS = 1000 }; enum AccountTypes { SEC_PLAYER = 0, SEC_MODERATOR = 1, SEC_GAMEMASTER = 2, SEC_ADMINISTRATOR = 3, SEC_CONSOLE = 4 // must be always last in list, accounts must have less security level always also }; enum LocaleConstant { LOCALE_enUS = 0, LOCALE_koKR = 1, LOCALE_frFR = 2, LOCALE_deDE = 3, LOCALE_zhCN = 4, LOCALE_zhTW = 5, LOCALE_esES = 6, LOCALE_esMX = 7, LOCALE_ruRU = 8 }; const uint8 TOTAL_LOCALES = 9; const LocaleConstant DEFAULT_LOCALE = LOCALE_enUS; #define MAX_LOCALES 8 #define MAX_ACCOUNT_TUTORIAL_VALUES 8 extern char const* localeNames[TOTAL_LOCALES]; LocaleConstant GetLocaleByName(const std::string& name); typedef std::vector StringVector; // we always use stdlibc++ std::max/std::min, undefine some not C++ standard defines (Win API and some other platforms) #ifdef max #undef max #endif #ifdef min #undef min #endif #ifndef M_PI #define M_PI 3.14159265358979323846f #endif #define MAX_QUERY_LEN 32*1024 #define TRINITY_GUARD(MUTEX, LOCK) \ ACE_Guard< MUTEX > TRINITY_GUARD_OBJECT (LOCK); \ if (TRINITY_GUARD_OBJECT.locked() == 0) ASSERT(false); //! For proper implementation of multiple-read, single-write pattern, use //! ACE_RW_Mutex as underlying @MUTEX # define TRINITY_WRITE_GUARD(MUTEX, LOCK) \ ACE_Write_Guard< MUTEX > TRINITY_GUARD_OBJECT (LOCK); \ if (TRINITY_GUARD_OBJECT.locked() == 0) ASSERT(false); //! For proper implementation of multiple-read, single-write pattern, use //! ACE_RW_Mutex as underlying @MUTEX # define TRINITY_READ_GUARD(MUTEX, LOCK) \ ACE_Read_Guard< MUTEX > TRINITY_GUARD_OBJECT (LOCK); \ if (TRINITY_GUARD_OBJECT.locked() == 0) ASSERT(false); #endif