OSDN Git Service

Added project/solution files for VS2015 + some build fixes for VS2015.
[mutilities/MUtilities.git] / include / MUtils / Global.h
index 4b41eee..59b360c 100644 (file)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // MuldeR's Utilities for Qt
-// Copyright (C) 2004-2014 LoRd_MuldeR <MuldeR2@GMX.de>
+// Copyright (C) 2004-2015 LoRd_MuldeR <MuldeR2@GMX.de>
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -28,46 +28,104 @@ class QProcess;
 
 ///////////////////////////////////////////////////////////////////////////////
 
+//MUtils API
+#ifdef _MSC_VER
+#      ifdef MUTILS_DLL_EXPORT
+#              define MUTILS_API __declspec(dllexport)
+#      else
+#              ifndef MUTILS_STATIC_LIB
+#                      define MUTILS_API __declspec(dllimport)
+#              else
+#                      define MUTILS_API /*static lib*/
+#              endif
+#      endif
+#else
+#      define MUTILS_API
+#endif
+
+//Helper Macros
+#define MUTILS_MAKE_STRING_HELPER(X) #X
+#define MUTILS_MAKE_STRING(X) MUTILS_MAKE_STRING_HELPER(X)
+#define MUTILS_COMPILER_WARNING(TXT) __pragma(message(__FILE__ "(" MUTILS_MAKE_STRING(__LINE__) ") : warning: " TXT))
+
+//Check Debug Flags
+#if defined(_DEBUG) || defined(DEBUG) || (!defined(NDEBUG))
+#      define MUTILS_DEBUG (1)
+#      if defined(NDEBUG) || defined(QT_NO_DEBUG) || (!defined(QT_DEBUG))
+#              error Inconsistent DEBUG flags have been detected!
+#      endif
+#else
+#      define MUTILS_DEBUG (0)
+#      if (!defined(NDEBUG)) || (!defined(QT_NO_DEBUG)) || defined(QT_DEBUG)
+#              error Inconsistent DEBUG flags have been detected!
+#      endif
+#endif
+
+//Check CPU options
+#if defined(_MSC_VER) && (!defined(_M_X64)) && defined(_M_IX86_FP)
+       #if (_M_IX86_FP != 0)
+               #error We should not enabled SSE or SSE2 in release builds!
+       #endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+
 namespace MUtils
 {
        //Temp Folder
-       const QString &temp_folder(void);
+       MUTILS_API const QString& temp_folder(void);
 
        //Process Utils
-       void init_process(QProcess &process, const QString &wokringDir, const bool bReplaceTempDir = true);
+       MUTILS_API void init_process(QProcess &process, const QString &wokringDir, const bool bReplaceTempDir = true);
 
        //Random
-       void seed_rand(void);
-       QString rand_str(const bool &bLong = false);
-       quint32 next_rand32(void);
-       quint64 next_rand64(void);
+       MUTILS_API void seed_rand(void);
+       MUTILS_API QString rand_str(const bool &bLong = false);
+       MUTILS_API quint32 next_rand32(void);
+       MUTILS_API quint64 next_rand64(void);
+
+       //Parity
+       MUTILS_API bool parity(quint32 value);
+
+       //Remove File/Dir
+       MUTILS_API bool remove_file(const QString &fileName);
+       MUTILS_API bool remove_directory(const QString &folderPath, const bool &recursive);
 
-       //Version
-       const char* buildDate(void);
+       //String sorting
+       MUTILS_API void natural_string_sort(QStringList &list, const bool bIgnoreCase);
+
+       //Clean file path
+       MUTILS_API QString clean_file_name(const QString &name);
+       MUTILS_API QString clean_file_path(const QString &path);
+
+       //Regular expressions
+       MUTILS_API bool regexp_parse_uint32(const QRegExp &regexp, quint32 &value);
+       MUTILS_API bool regexp_parse_uint32(const QRegExp &regexp, quint32 *values, const size_t &count);
+
+       //Internationalization
+       MUTILS_API QStringList available_codepages(const bool &noAliases = true);
+
+       //Internal
+       namespace Internal
+       {
+               MUTILS_API int selfTest(const char *const buildKey, const bool debug);
+               static const int s_selfTest = selfTest(__DATE__ "@" __TIME__, MUTILS_DEBUG);
+       }
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 
-#define MUTILS_DELETE(PTR) do \
-{ \
-       if((PTR)) \
-       { \
-               delete (PTR); \
-               (PTR) = NULL; \
-       } \
-} \
-while(0)
-
-#define MUTILS_DELETE_ARRAY(PTR) do \
-{ \
-       if((PTR)) \
-       { \
-               delete [] (PTR); \
-               (PTR) = NULL; \
-       } \
-} \
-while(0)
-
-#define MUTILS_QUTF8(STR) ((STR).toUtf8().constData())
-#define MUTILS_QSTR2WCHAR(STR) (reinterpret_cast<const wchar_t*>((STR).utf16()))
-#define MUTILS_WCHAR2QSTR(STR) (QString::fromUtf16(reinterpret_cast<const unsigned short*>((STR))))
+//Delete helper
+#define MUTILS_DELETE(PTR) do { if((PTR)) { delete (PTR); (PTR) = NULL; } } while(0)
+#define MUTILS_DELETE_ARRAY(PTR) do { if((PTR)) { delete [] (PTR); (PTR) = NULL; } } while(0)
+
+//Zero memory
+#define MUTILS_ZERO_MEMORY(PTR) memset(&(PTR), 0, sizeof((PTR)))
+
+//String conversion macros
+#define MUTILS_WCHR(STR) (reinterpret_cast<const wchar_t*>((STR).utf16()))
+#define MUTILS_UTF8(STR) ((STR).toUtf8().constData())
+#define MUTILS_QSTR(STR) (QString::fromUtf16(reinterpret_cast<const unsigned short*>((STR))))
+
+//Boolean helper
+#define MUTILS_BOOL2STR(X) ((X) ? "1" : "0")