///////////////////////////////////////////////////////////////////////////////
// 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
///////////////////////////////////////////////////////////////////////////////
+//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 ®exp, quint32 &value);
+ MUTILS_API bool regexp_parse_uint32(const QRegExp ®exp, 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")