Skip to content

Commit

Permalink
Some improvements to library initialization code.
Browse files Browse the repository at this point in the history
  • Loading branch information
lordmulder committed May 10, 2019
1 parent a71ae33 commit 7b01ea5
Show file tree
Hide file tree
Showing 8 changed files with 43 additions and 31 deletions.
2 changes: 1 addition & 1 deletion docs/d2/dad/_hash_8h_source.html
Expand Up @@ -73,7 +73,7 @@
<div class="ttc" id="_hash_8h_html_aa9e34ac422f4e52061cb8908f922fe17"><div class="ttname"><a href="../../d2/dad/_hash_8h.html#aa9e34ac422f4e52061cb8908f922fe17">MUtils::Hash::HASH_BLAKE2_512</a></div><div class="ttdeci">static const quint16 HASH_BLAKE2_512</div><div class="ttdoc">Hash algorithm identifier. </div><div class="ttdef"><b>Definition:</b> Hash.h:42</div></div>
<div class="ttc" id="_hash_8h_html_af80dfb1569816fab7ab5ed32e6386458"><div class="ttname"><a href="../../d2/dad/_hash_8h.html#af80dfb1569816fab7ab5ed32e6386458">MUtils::Hash::HASH_KECCAK_384</a></div><div class="ttdeci">static const quint16 HASH_KECCAK_384</div><div class="ttdoc">Hash algorithm identifier. </div><div class="ttdef"><b>Definition:</b> Hash.h:45</div></div>
<div class="ttc" id="namespace_m_utils_html"><div class="ttname"><a href="../../d3/da6/namespace_m_utils.html">MUtils</a></div><div class="ttdoc">Global MUtils namespace. </div><div class="ttdef"><b>Definition:</b> CPUFeatures.h:37</div></div>
<div class="ttc" id="_global_8h_html_a8e7b4857b78f9749233e5abc96534ca8"><div class="ttname"><a href="../../d5/d3b/_global_8h.html#a8e7b4857b78f9749233e5abc96534ca8">MUTILS_NO_COPY</a></div><div class="ttdeci">#define MUTILS_NO_COPY(CLASS)</div><div class="ttdoc">Disables copy constructor and assignment operator in the specified class. This macro should be used i...</div><div class="ttdef"><b>Definition:</b> Global.h:405</div></div>
<div class="ttc" id="_global_8h_html_a8e7b4857b78f9749233e5abc96534ca8"><div class="ttname"><a href="../../d5/d3b/_global_8h.html#a8e7b4857b78f9749233e5abc96534ca8">MUTILS_NO_COPY</a></div><div class="ttdeci">#define MUTILS_NO_COPY(CLASS)</div><div class="ttdoc">Disables copy constructor and assignment operator in the specified class. This macro should be used i...</div><div class="ttdef"><b>Definition:</b> Global.h:416</div></div>
<div class="ttc" id="_hash_8h_html_a330b73d6927d6cd95892712f9396f40e"><div class="ttname"><a href="../../d2/dad/_hash_8h.html#a330b73d6927d6cd95892712f9396f40e">MUtils::Hash::create</a></div><div class="ttdeci">MUTILS_API Hash * create(const quint16 &amp;hashId, const char *const key=NULL)</div><div class="ttdoc">Create instance of a hash function. </div></div>
<div class="ttc" id="class_m_utils_1_1_hash_1_1_hash_html"><div class="ttname"><a href="../../da/db0/class_m_utils_1_1_hash_1_1_hash.html">MUtils::Hash::Hash</a></div><div class="ttdoc">This abstract class specifies the generic interface for all support hash algorithms. </div><div class="ttdef"><b>Definition:</b> Hash.h:57</div></div>
<div class="ttc" id="_hash_8h_html_ae38cda07e425eb7c745492215a48ae08"><div class="ttname"><a href="../../d2/dad/_hash_8h.html#ae38cda07e425eb7c745492215a48ae08">MUtils::Hash::HASH_KECCAK_256</a></div><div class="ttdeci">static const quint16 HASH_KECCAK_256</div><div class="ttdoc">Hash algorithm identifier. </div><div class="ttdef"><b>Definition:</b> Hash.h:44</div></div>
Expand Down
12 changes: 6 additions & 6 deletions docs/d2/df4/namespace_m_utils_1_1_o_s.html
Expand Up @@ -249,12 +249,12 @@
<tr class="memitem:a77d68a73d43e70a6c63b100f8e8258cb"><td class="memItemLeft" align="right" valign="top"><a id="a77d68a73d43e70a6c63b100f8e8258cb"></a>
MUTILS_API QString&#160;</td><td class="memItemRight" valign="bottom"><b>get_file_path</b> (const int &amp;fd)</td></tr>
<tr class="separator:a77d68a73d43e70a6c63b100f8e8258cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a42625342563665f192985e498538dca1"><td class="memItemLeft" align="right" valign="top"><a id="a42625342563665f192985e498538dca1"></a>
MUTILS_API bool&#160;</td><td class="memItemRight" valign="bottom"><b>wow64fsredir_disable</b> (void *oldValue)</td></tr>
<tr class="separator:a42625342563665f192985e498538dca1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb3f90b82e5496f5c92abf66c8769869"><td class="memItemLeft" align="right" valign="top"><a id="abb3f90b82e5496f5c92abf66c8769869"></a>
MUTILS_API bool&#160;</td><td class="memItemRight" valign="bottom"><b>wow64fsredir_revert</b> (void *oldValue)</td></tr>
<tr class="separator:abb3f90b82e5496f5c92abf66c8769869"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace80386117d27524e685492843ff36d7"><td class="memItemLeft" align="right" valign="top"><a id="ace80386117d27524e685492843ff36d7"></a>
MUTILS_API bool&#160;</td><td class="memItemRight" valign="bottom"><b>wow64fsredir_disable</b> (uintptr_t &amp;oldValue)</td></tr>
<tr class="separator:ace80386117d27524e685492843ff36d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a210a8cb1ce11048d08bf8b359dd2459b"><td class="memItemLeft" align="right" valign="top"><a id="a210a8cb1ce11048d08bf8b359dd2459b"></a>
MUTILS_API bool&#160;</td><td class="memItemRight" valign="bottom"><b>wow64fsredir_revert</b> (const uintptr_t oldValue)</td></tr>
<tr class="separator:a210a8cb1ce11048d08bf8b359dd2459b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a33d06cfc9ed30f660685ab15188d23f2"><td class="memItemLeft" align="right" valign="top"><a id="a33d06cfc9ed30f660685ab15188d23f2"></a>
MUTILS_API QString&#160;</td><td class="memItemRight" valign="bottom"><b>get_envvar</b> (const QString &amp;name)</td></tr>
<tr class="separator:a33d06cfc9ed30f660685ab15188d23f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
Expand Down
12 changes: 6 additions & 6 deletions docs/d3/dc1/_o_s_support_8h.html
Expand Up @@ -279,12 +279,12 @@
<tr class="memitem:a77d68a73d43e70a6c63b100f8e8258cb"><td class="memItemLeft" align="right" valign="top"><a id="a77d68a73d43e70a6c63b100f8e8258cb"></a>
MUTILS_API QString&#160;</td><td class="memItemRight" valign="bottom"><b>MUtils::OS::get_file_path</b> (const int &amp;fd)</td></tr>
<tr class="separator:a77d68a73d43e70a6c63b100f8e8258cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a42625342563665f192985e498538dca1"><td class="memItemLeft" align="right" valign="top"><a id="a42625342563665f192985e498538dca1"></a>
MUTILS_API bool&#160;</td><td class="memItemRight" valign="bottom"><b>MUtils::OS::wow64fsredir_disable</b> (void *oldValue)</td></tr>
<tr class="separator:a42625342563665f192985e498538dca1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb3f90b82e5496f5c92abf66c8769869"><td class="memItemLeft" align="right" valign="top"><a id="abb3f90b82e5496f5c92abf66c8769869"></a>
MUTILS_API bool&#160;</td><td class="memItemRight" valign="bottom"><b>MUtils::OS::wow64fsredir_revert</b> (void *oldValue)</td></tr>
<tr class="separator:abb3f90b82e5496f5c92abf66c8769869"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace80386117d27524e685492843ff36d7"><td class="memItemLeft" align="right" valign="top"><a id="ace80386117d27524e685492843ff36d7"></a>
MUTILS_API bool&#160;</td><td class="memItemRight" valign="bottom"><b>MUtils::OS::wow64fsredir_disable</b> (uintptr_t &amp;oldValue)</td></tr>
<tr class="separator:ace80386117d27524e685492843ff36d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a210a8cb1ce11048d08bf8b359dd2459b"><td class="memItemLeft" align="right" valign="top"><a id="a210a8cb1ce11048d08bf8b359dd2459b"></a>
MUTILS_API bool&#160;</td><td class="memItemRight" valign="bottom"><b>MUtils::OS::wow64fsredir_revert</b> (const uintptr_t oldValue)</td></tr>
<tr class="separator:a210a8cb1ce11048d08bf8b359dd2459b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a33d06cfc9ed30f660685ab15188d23f2"><td class="memItemLeft" align="right" valign="top"><a id="a33d06cfc9ed30f660685ab15188d23f2"></a>
MUTILS_API QString&#160;</td><td class="memItemRight" valign="bottom"><b>MUtils::OS::get_envvar</b> (const QString &amp;name)</td></tr>
<tr class="separator:a33d06cfc9ed30f660685ab15188d23f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
Expand Down
2 changes: 1 addition & 1 deletion docs/d3/dc1/_o_s_support_8h_source.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/d4/d85/_job_object_8h_source.html
Expand Up @@ -70,7 +70,7 @@
<a href="../../d4/d85/_job_object_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// MuldeR&#39;s Utilities for Qt</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2004-2019 LoRd_MuldeR &lt;MuldeR2@GMX.de&gt;</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// This library is free software; you can redistribute it and/or</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// modify it under the terms of the GNU Lesser General Public</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">// License as published by the Free Software Foundation; either</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// version 2.1 of the License, or (at your option) any later version.</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// This library is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// Lesser General Public License for more details.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// You should have received a copy of the GNU Lesser General Public</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// License along with this library; if not, write to the Free Software</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// http://www.gnu.org/licenses/lgpl-2.1.txt</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="../../d5/d3b/_global_8h.html">MUtils/Global.h</a>&gt;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">class </span>QProcess;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">namespace </span><a class="code" href="../../d3/da6/namespace_m_utils.html">MUtils</a></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="../../dc/dd3/class_m_utils_1_1_job_object.html"> 46</a></span>&#160; <span class="keyword">class </span>MUTILS_API <a class="code" href="../../dc/dd3/class_m_utils_1_1_job_object.html">JobObject</a></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="../../dc/dd3/class_m_utils_1_1_job_object.html">JobObject</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; ~<a class="code" href="../../dc/dd3/class_m_utils_1_1_job_object.html">JobObject</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">bool</span> isObjectCreated(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordtype">bool</span> addProcessToJob(<span class="keyword">const</span> QProcess *<span class="keyword">const</span> process);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordtype">bool</span> terminateJob(<span class="keyword">const</span> quint32 &amp;exitCode);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; uintptr_t m_jobPtr;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="../../d5/d3b/_global_8h.html#a8e7b4857b78f9749233e5abc96534ca8">MUTILS_NO_COPY</a>(<a class="code" href="../../dc/dd3/class_m_utils_1_1_job_object.html">JobObject</a>)</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; };</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;}</div><div class="ttc" id="_global_8h_html"><div class="ttname"><a href="../../d5/d3b/_global_8h.html">Global.h</a></div><div class="ttdoc">This file contains miscellaneous functions that are generally useful for Qt-based applications...</div></div>
<div class="ttc" id="class_m_utils_1_1_job_object_html"><div class="ttname"><a href="../../dc/dd3/class_m_utils_1_1_job_object.html">MUtils::JobObject</a></div><div class="ttdoc">This class represents a job object. </div><div class="ttdef"><b>Definition:</b> JobObject.h:46</div></div>
<div class="ttc" id="namespace_m_utils_html"><div class="ttname"><a href="../../d3/da6/namespace_m_utils.html">MUtils</a></div><div class="ttdoc">Global MUtils namespace. </div><div class="ttdef"><b>Definition:</b> CPUFeatures.h:37</div></div>
<div class="ttc" id="_global_8h_html_a8e7b4857b78f9749233e5abc96534ca8"><div class="ttname"><a href="../../d5/d3b/_global_8h.html#a8e7b4857b78f9749233e5abc96534ca8">MUTILS_NO_COPY</a></div><div class="ttdeci">#define MUTILS_NO_COPY(CLASS)</div><div class="ttdoc">Disables copy constructor and assignment operator in the specified class. This macro should be used i...</div><div class="ttdef"><b>Definition:</b> Global.h:405</div></div>
<div class="ttc" id="_global_8h_html_a8e7b4857b78f9749233e5abc96534ca8"><div class="ttname"><a href="../../d5/d3b/_global_8h.html#a8e7b4857b78f9749233e5abc96534ca8">MUTILS_NO_COPY</a></div><div class="ttdeci">#define MUTILS_NO_COPY(CLASS)</div><div class="ttdoc">Disables copy constructor and assignment operator in the specified class. This macro should be used i...</div><div class="ttdef"><b>Definition:</b> Global.h:416</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Expand Down
4 changes: 2 additions & 2 deletions docs/d5/d3b/_global_8h_source.html

Large diffs are not rendered by default.

23 changes: 17 additions & 6 deletions include/MUtils/Global.h
Expand Up @@ -38,6 +38,13 @@ template<typename K, typename V> class QHash;
/** \cond INTERNAL
*/

//Interface version
#define MUTILS_INTERFACE 2

//Build key
#define MUTILS_BUILD_KEY_HELPER(X,Y) X##" "##Y
#define MUTILS_BUILD_KEY MUTILS_BUILD_KEY_HELPER(__DATE__, __TIME__)

//MUtils API
#ifdef _MSC_VER
# ifdef MUTILS_DLL_EXPORT
Expand All @@ -53,10 +60,6 @@ template<typename K, typename V> class QHash;
# define MUTILS_API
#endif

#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)
Expand All @@ -77,6 +80,14 @@ template<typename K, typename V> class QHash;
#endif
#endif

#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))

#define MUTILS_INIT_GLUE_HELPER(X,Y) X##Y
#define MUTILS_INIT_GLUE(X,Y) MUTILS_INIT_GLUE_HELPER(X,Y)
#define MUTILS_INITIALIZER MUTILS_INIT_GLUE(initialize_, MUTILS_INTERFACE)

/** \endcond INTERNAL
*/

Expand Down Expand Up @@ -353,8 +364,8 @@ namespace MUtils
//Internal
namespace Internal
{
MUTILS_API int selfTest(const char *const buildKey, const bool debug);
static const int s_selfTest = selfTest(__DATE__ "@" __TIME__, MUTILS_DEBUG);
MUTILS_API int MUTILS_INITIALIZER(const char *const buildKey, const bool debug);
static const int s_initializedFlag = MUTILS_INITIALIZER(MUTILS_BUILD_KEY, MUTILS_DEBUG);
}
}

Expand Down
17 changes: 9 additions & 8 deletions src/Global.cpp
Expand Up @@ -902,19 +902,20 @@ MUtils::fp_parts_t MUtils::break_fp(const double value)
}

///////////////////////////////////////////////////////////////////////////////
// SELF-TEST
// INITIALIZER
///////////////////////////////////////////////////////////////////////////////

int MUtils::Internal::selfTest(const char *const buildKey, const bool debug)
int MUtils::Internal::MUTILS_INITIALIZER(const char *const buildKey, const bool debug)
{
static const bool MY_DEBUG_FLAG = MUTILS_DEBUG;
static const char *const MY_BUILD_KEY = __DATE__ "@" __TIME__;
static const bool INTERNAL_DEBUG_FLAG = MUTILS_DEBUG;
static const char *const INTERNAL_BUILD_KEY = MUTILS_BUILD_KEY;

if(strncmp(buildKey, MY_BUILD_KEY, 13) || (MY_DEBUG_FLAG != debug))
if((debug != INTERNAL_DEBUG_FLAG) || strncmp(buildKey, INTERNAL_BUILD_KEY, 11))
{
MUtils::OS::system_message_err(L"MUtils", L"FATAL ERROR: MUtils library version mismatch detected!");
MUtils::OS::system_message_wrn(L"MUtils", L"Perform a clean(!) re-install of the application to fix the problem!");
MUtils::OS::system_message_err(L"MUtils", L"FATAL ERROR: MUtils library initialization has failed");
abort();
}
return 0;

volatile int _result = MUTILS_INTERFACE;
return _result;
}

0 comments on commit 7b01ea5

Please sign in to comment.