Hazelnupp/docs/Hazelnupp_8cpp_source.html
2021-06-03 16:40:02 +02:00

531 lines
79 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Leonetienne/Hazelnupp: Hazelnupp/Hazelnupp.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="nupp_small.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Leonetienne/Hazelnupp
</div>
<div id="projectbrief">Simple, easy to use, command line parameter interface</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_0202e1e26df2e040f4dc3d434eecf04c.html">Hazelnupp</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Hazelnupp.cpp</div> </div>
</div><!--header-->
<div class="contents">
<a href="Hazelnupp_8cpp.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="preprocessor">#include &quot;<a class="code" href="Hazelnupp_8h.html">Hazelnupp.h</a>&quot;</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="VoidValue_8h.html">VoidValue.h</a>&quot;</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="IntValue_8h.html">IntValue.h</a>&quot;</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="FloatValue_8h.html">FloatValue.h</a>&quot;</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="StringValue_8h.html">StringValue.h</a>&quot;</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ListValue_8h.html">ListValue.h</a>&quot;</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="HazelnuppException_8h.html">HazelnuppException.h</a>&quot;</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="StringTools_8h.html">StringTools.h</a>&quot;</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceHazelnp.html">Hazelnp</a>;</div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#a20ac0ebcfd4df7f320a7bbcaeed6e54d"> 14</a></span>&#160;<a class="code" href="classHazelnp_1_1Hazelnupp.html#a20ac0ebcfd4df7f320a7bbcaeed6e54d">Hazelnupp::Hazelnupp</a>()</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;}</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#a6d14c60f03b571f5f794c3549e75e435"> 19</a></span>&#160;<a class="code" href="classHazelnp_1_1Hazelnupp.html#a20ac0ebcfd4df7f320a7bbcaeed6e54d">Hazelnupp::Hazelnupp</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> argc, <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>* argv)</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <a class="code" href="classHazelnp_1_1Hazelnupp.html#a1ccb88faca1a8deb77161888479c300b">Parse</a>(argc, argv);</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#a25f8810d24d647b6a57e2dd00ead42be"> 25</a></span>&#160;<a class="code" href="classHazelnp_1_1Hazelnupp.html#a25f8810d24d647b6a57e2dd00ead42be">Hazelnupp::~Hazelnupp</a>()</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;{</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; it : parameters)</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">delete</span> it.second;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; parameters.clear();</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;}</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"><a class="line" href="classHazelnp_1_1Hazelnupp.html#a1ccb88faca1a8deb77161888479c300b"> 35</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classHazelnp_1_1Hazelnupp.html#a1ccb88faca1a8deb77161888479c300b">Hazelnupp::Parse</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> argc, <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>* argv)</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="keywordflow">try</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// Populate raw arguments</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; PopulateRawArgs(argc, argv);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// Expand abbreviations</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; ExpandAbbreviations();</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; executableName = std::string(rawArgs[0]);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; std::size_t i = 1;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">while</span> (i &lt; rawArgs.size())</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> ((rawArgs[i].length() &gt; 2) &amp;&amp; (rawArgs[i].substr(0, 2) == <span class="stringliteral">&quot;--&quot;</span>))</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classHazelnp_1_1Parameter.html">Parameter</a>* param = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; i = ParseNextParameter(i, param);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; parameters.insert(std::pair&lt;std::string, Parameter*&gt;(param-&gt;<a class="code" href="classHazelnp_1_1Parameter.html#a7acd68ce06eec06ab286b1a062f9c8d6">Key</a>(), param));</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; i++;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">// Apply constraints such as default values, and required parameters.</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="comment">// Types have already been enforced.</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; ApplyConstraints();</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html">HazelnuppConstraintTypeMissmatch</a>&amp; hctm)</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">if</span> (crashOnFail)</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; std::cerr &lt;&lt; <span class="stringliteral">&quot;Fatal error: Command-line parameter value-type mismatch at \&quot;&quot;</span> &lt;&lt; hctm.<a class="code" href="classHazelnp_1_1HazelnuppException.html#aa86c415a0f2b4ea5f11892145d1ea83e">What</a>() &lt;&lt; <span class="stringliteral">&quot;\&quot;!&quot;</span>;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; quick_exit(-1009);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">throw</span> hctm; <span class="comment">// yeet</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classHazelnp_1_1HazelnuppConstraintMissingValue.html">HazelnuppConstraintMissingValue</a>&amp; hctm)</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span> (crashOnFail)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; std::cerr &lt;&lt; <span class="stringliteral">&quot;Fatal error: Missing required command-line parameter \&quot;&quot;</span> &lt;&lt; hctm.<a class="code" href="classHazelnp_1_1HazelnuppException.html#aa86c415a0f2b4ea5f11892145d1ea83e">What</a>() &lt;&lt; <span class="stringliteral">&quot;\&quot;!&quot;</span>;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; quick_exit(-1010);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">throw</span> hctm; <span class="comment">// yeet</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;}</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;std::size_t Hazelnupp::ParseNextParameter(<span class="keyword">const</span> std::size_t parIndex, <a class="code" href="classHazelnp_1_1Parameter.html">Parameter</a>*&amp; out_Par)</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;{</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; std::size_t i = parIndex;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">const</span> std::string key = rawArgs[parIndex];</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; std::vector&lt;std::string&gt; values;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// Get values</span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">for</span> (i++; i &lt; rawArgs.size(); i++)</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// If not another parameter</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">if</span> ((rawArgs[i].length() &lt; 2) || (rawArgs[i].substr(0, 2) != <span class="stringliteral">&quot;--&quot;</span>))</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; values.emplace_back(rawArgs[i]);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// Fetch constraint info</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">const</span> <a class="code" href="structHazelnp_1_1ParamConstraint.html">ParamConstraint</a>* pcn = GetConstraintForKey(key);</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="classHazelnp_1_1Value.html">Value</a>* parsedVal = ParseValue(values, pcn);</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">if</span> (parsedVal != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; out_Par = <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1Parameter.html">Parameter</a>(key, parsedVal);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">delete</span> parsedVal;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; parsedVal = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Unable to parse parameter!&quot;</span>);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">return</span> i;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;}</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; </div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="keywordtype">void</span> Hazelnupp::PopulateRawArgs(<span class="keyword">const</span> <span class="keywordtype">int</span> argc, <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>* argv)</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;{</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; rawArgs.clear();</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; rawArgs.reserve(argc);</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; argc; i++)</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; rawArgs.emplace_back(std::string(argv[i]));</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; </div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;}</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; </div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="keywordtype">void</span> Hazelnupp::ExpandAbbreviations()</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;{</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="comment">// Abort if no abbreviations</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (abbreviations.size() == 0)</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">for</span> (std::string&amp; arg : rawArgs)</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; {</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="comment">// Is arg registered as an abbreviation?</span></div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keyword">auto</span> abbr = abbreviations.find(arg);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">if</span> (abbr != abbreviations.end())</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// Yes: replace arg with the long form</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; arg = abbr-&gt;second;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;}</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#a8b79a79d40420ae748c108c691111040"> 153</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classHazelnp_1_1Hazelnupp.html#a8b79a79d40420ae748c108c691111040">Hazelnupp::HasParam</a>(<span class="keyword">const</span> std::string&amp; key)<span class="keyword"> const</span></div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">return</span> parameters.find(key) != parameters.end();</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;}</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<a class="code" href="classHazelnp_1_1Value.html">Value</a>* Hazelnupp::ParseValue(<span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; values, <span class="keyword">const</span> <a class="code" href="structHazelnp_1_1ParamConstraint.html">ParamConstraint</a>* constraint)</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;{</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="comment">// Constraint values</span></div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> constrainType = (constraint != <span class="keyword">nullptr</span>) &amp;&amp; (constraint-&gt;<a class="code" href="structHazelnp_1_1ParamConstraint.html#a88a4a4c215723259c71853992d09acac">constrainType</a>);</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; </div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="comment">// Void-type</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">if</span> (values.size() == 0)</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="comment">// Is a list forced via a constraint? If yes, return an empty list</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span> ((constrainType) &amp;&amp;</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; (constraint-&gt;<a class="code" href="structHazelnp_1_1ParamConstraint.html#ac07a0c0555431d4b1e0bc6afdba41329">wantedType</a> == <a class="code" href="namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa298cb25408234de02baf2085803a464a">DATA_TYPE::LIST</a>))</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1ListValue.html">ListValue</a>();</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; </div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1VoidValue.html">VoidValue</a>;</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="comment">// Force void type by constraint</span></div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span> ((constrainType) &amp;&amp;</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; (constraint-&gt;<a class="code" href="structHazelnp_1_1ParamConstraint.html#ac07a0c0555431d4b1e0bc6afdba41329">wantedType</a> == <a class="code" href="namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa6d0c9fc747131795e6e5d0c5119f12cb">DATA_TYPE::VOID</a>))</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; {</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1VoidValue.html">VoidValue</a>;</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="comment">// List-type</span></div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (values.size() &gt; 1)</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="comment">// Should the type be something other than list?</span></div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span> ((constrainType) &amp;&amp;</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; (constraint-&gt;<a class="code" href="structHazelnp_1_1ParamConstraint.html#ac07a0c0555431d4b1e0bc6afdba41329">wantedType</a> != <a class="code" href="namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa298cb25408234de02baf2085803a464a">DATA_TYPE::LIST</a>))</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html">HazelnuppConstraintTypeMissmatch</a>(values[0] + <span class="stringliteral">&quot; &quot;</span> + values[1]);</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; </div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="classHazelnp_1_1ListValue.html">ListValue</a>* newList = <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1ListValue.html">ListValue</a>();</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string&amp; val : values)</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="classHazelnp_1_1Value.html">Value</a>* tmp = ParseValue({ val });</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; newList-&gt;<a class="code" href="classHazelnp_1_1ListValue.html#af8787d266aa353d3f96e2c76cce76c41">AddValue</a>(tmp);</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keyword">delete</span> tmp;</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> newList;</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; </div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// Now we&#39;re only dealing with a single value</span></div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">const</span> std::string&amp; val = values[0];</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="comment">// String</span></div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classHazelnp_1_1StringTools.html#a6cd093feaca2d978c23774cf87d86e68">StringTools::IsNumeric</a>(val, <span class="keyword">true</span>))</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// Is the type not supposed to be a string?</span></div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="comment">// void and list are already sorted out</span></div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> ((constrainType) &amp;&amp;</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; (constraint-&gt;<a class="code" href="structHazelnp_1_1ParamConstraint.html#ac07a0c0555431d4b1e0bc6afdba41329">wantedType</a> != <a class="code" href="namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa63b588d5559f64f89a416e656880b949">DATA_TYPE::STRING</a>))</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// We can only force a list-value from here</span></div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (constraint-&gt;<a class="code" href="structHazelnp_1_1ParamConstraint.html#ac07a0c0555431d4b1e0bc6afdba41329">wantedType</a> == <a class="code" href="namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa298cb25408234de02baf2085803a464a">DATA_TYPE::LIST</a>)</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; {</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="classHazelnp_1_1ListValue.html">ListValue</a>* list = <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1ListValue.html">ListValue</a>();</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <a class="code" href="classHazelnp_1_1Value.html">Value</a>* tmp = ParseValue({ val });</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; list-&gt;<a class="code" href="classHazelnp_1_1ListValue.html#af8787d266aa353d3f96e2c76cce76c41">AddValue</a>(tmp);</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keyword">delete</span> tmp;</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; tmp = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">return</span> list;</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="comment">// Else it not possible to convert to a numeric</span></div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html">HazelnuppConstraintTypeMissmatch</a>(val);</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; </div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1StringValue.html">StringValue</a>(val);</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; }</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="comment">// In this case we have a numeric value.</span></div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="comment">// We should still produce a string if requested</span></div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">if</span> ((constrainType) &amp;&amp;</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; (constraint-&gt;<a class="code" href="structHazelnp_1_1ParamConstraint.html#ac07a0c0555431d4b1e0bc6afdba41329">wantedType</a> == <a class="code" href="namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa63b588d5559f64f89a416e656880b949">DATA_TYPE::STRING</a>))</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1StringValue.html">StringValue</a>(val);</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; </div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// Numeric</span></div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordtype">bool</span> isInt;</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordtype">long</span> <span class="keywordtype">double</span> num;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; </div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classHazelnp_1_1StringTools.html#ab661223da5bbbb75039e168409466c82">StringTools::ParseNumber</a>(val, isInt, num))</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; {</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// Is the type constrained?</span></div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// (only int and float left)</span></div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">if</span> (constrainType)</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; {</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// Must it be an integer?</span></div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">if</span> (constraint-&gt;<a class="code" href="structHazelnp_1_1ParamConstraint.html#ac07a0c0555431d4b1e0bc6afdba41329">wantedType</a> == <a class="code" href="namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa53f93baa3057821107c750323892fa92">DATA_TYPE::INT</a>)</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1IntValue.html">IntValue</a>((<span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span>)num);</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// Must it be a floating point?</span></div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (constraint-&gt;<a class="code" href="structHazelnp_1_1ParamConstraint.html#ac07a0c0555431d4b1e0bc6afdba41329">wantedType</a> == <a class="code" href="namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fae738c26bf4ce1037fa81b039a915cbf6">DATA_TYPE::FLOAT</a>)</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1FloatValue.html">FloatValue</a>(num);</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// Else it must be a List</span></div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; {</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <a class="code" href="classHazelnp_1_1ListValue.html">ListValue</a>* list = <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1ListValue.html">ListValue</a>();</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <a class="code" href="classHazelnp_1_1Value.html">Value</a>* tmp = ParseValue({ val });</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; list-&gt;<a class="code" href="classHazelnp_1_1ListValue.html#af8787d266aa353d3f96e2c76cce76c41">AddValue</a>(tmp);</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">delete</span> tmp;</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; tmp = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">return</span> list;</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; }</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// Type is not constrained</span></div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; {</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="comment">// Integer</span></div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span> (isInt)</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1IntValue.html">IntValue</a>((<span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span>)num);</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; </div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="comment">// Double</span></div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1FloatValue.html">FloatValue</a>(num);</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; }</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; </div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// Failed</span></div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;}</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; </div>
<div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#a1b810cc7db2cf64aecaa70c686b14bb7"> 279</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classHazelnp_1_1Hazelnupp.html#a1b810cc7db2cf64aecaa70c686b14bb7">Hazelnupp::GetCrashOnFail</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">return</span> crashOnFail;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;}</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; </div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="keywordtype">void</span> Hazelnupp::ApplyConstraints()</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;{</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="comment">// Enforce required parameters / default values</span></div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; pc : constraints)</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// Parameter in question is not supplied</span></div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classHazelnp_1_1Hazelnupp.html#a8b79a79d40420ae748c108c691111040">HasParam</a>(pc.second.key))</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; {</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="comment">// Do we have a default value?</span></div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">if</span> (pc.second.defaultValue.size() &gt; 0)</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="comment">// Then create it now, by its default value</span></div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; </div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="classHazelnp_1_1Value.html">Value</a>* tmp = ParseValue(pc.second.defaultValue, &amp;pc.second);</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; parameters.insert(std::pair&lt;std::string, Parameter*&gt;(</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; pc.second.key,</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keyword">new</span> <a class="code" href="classHazelnp_1_1Parameter.html">Parameter</a>(pc.second.key, tmp)</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; ));</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; </div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keyword">delete</span> tmp;</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; tmp = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// So we do not have a default value...</span></div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="comment">// Is it important to have the missing parameter?</span></div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">if</span> (pc.second.required)</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="comment">// Throw an error message then</span></div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classHazelnp_1_1HazelnuppConstraintMissingValue.html">HazelnuppConstraintMissingValue</a>(pc.second.key);</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; </div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;}</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; </div>
<div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#af6bb41fb079131f8b91fe981f63f7469"> 318</a></span>&#160;<span class="keyword">const</span> std::string&amp; <a class="code" href="classHazelnp_1_1Hazelnupp.html#af6bb41fb079131f8b91fe981f63f7469">Hazelnupp::GetExecutableName</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">return</span> executableName;</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;}</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; </div>
<div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#a419ccdc6bad00b0fc3e17ed9b41f5dc5"> 323</a></span>&#160;<span class="keyword">const</span> <a class="code" href="classHazelnp_1_1Value.html">Value</a>&amp; <a class="code" href="classHazelnp_1_1Hazelnupp.html#a419ccdc6bad00b0fc3e17ed9b41f5dc5">Hazelnupp::operator[]</a>(<span class="keyword">const</span> std::string&amp; key)<span class="keyword"> const</span></div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="comment">// Throw exception if param is unknown</span></div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classHazelnp_1_1Hazelnupp.html#a8b79a79d40420ae748c108c691111040">HasParam</a>(key))</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classHazelnp_1_1HazelnuppInvalidKeyException.html">HazelnuppInvalidKeyException</a>();</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; </div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span> *parameters.find(key)-&gt;second-&gt;GetValue();</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;}</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; </div>
<div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#abf1e0ebf0207ca2327fcde81f7372124"> 332</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classHazelnp_1_1Hazelnupp.html#abf1e0ebf0207ca2327fcde81f7372124">Hazelnupp::RegisterAbbreviation</a>(<span class="keyword">const</span> std::string&amp; abbrev, <span class="keyword">const</span> std::string&amp; target)</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;{</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; abbreviations.insert(std::pair&lt;std::string, std::string&gt;(abbrev, target));</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;}</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; </div>
<div class="line"><a name="l00338"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#a579e78129f19cb9f17a6075366ababe5"> 338</a></span>&#160;<span class="keyword">const</span> std::string&amp; <a class="code" href="classHazelnp_1_1Hazelnupp.html#a579e78129f19cb9f17a6075366ababe5">Hazelnupp::GetAbbreviation</a>(<span class="keyword">const</span> std::string&amp; abbrev)<span class="keyword"> const</span></div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">return</span> abbreviations.find(abbrev)-&gt;second;</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;}</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; </div>
<div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#a46df7d396fb56e30351c9a7308792200"> 343</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classHazelnp_1_1Hazelnupp.html#a46df7d396fb56e30351c9a7308792200">Hazelnupp::HasAbbreviation</a>(<span class="keyword">const</span> std::string&amp; abbrev)<span class="keyword"> const</span></div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">return</span> abbreviations.find(abbrev) != abbreviations.end();</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;}</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; </div>
<div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#a5175869b025468324cefad487081e91d"> 348</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classHazelnp_1_1Hazelnupp.html#a5175869b025468324cefad487081e91d">Hazelnupp::ClearAbbreviations</a>()</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;{</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; abbreviations.clear();</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;}</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; </div>
<div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#a8a3331836b9ea1f920e77f6d332019d5"> 354</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classHazelnp_1_1Hazelnupp.html#a8a3331836b9ea1f920e77f6d332019d5">Hazelnupp::RegisterConstraints</a>(<span class="keyword">const</span> std::vector&lt;ParamConstraint&gt;&amp; constraints)</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;{</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="structHazelnp_1_1ParamConstraint.html">ParamConstraint</a>&amp; pc : constraints)</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; {</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="comment">// Does this constraint already exist?</span></div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> constraint = this-&gt;constraints.find(pc.key);</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="comment">// If yes, replace it.</span></div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (constraint != this-&gt;constraints.end())</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; constraint-&gt;second = pc;</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; </div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="comment">// Else, create a new pair</span></div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; this-&gt;constraints.insert(std::pair&lt;std::string, ParamConstraint&gt;(</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; pc.key,</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; pc</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; ));</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; }</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; </div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;}</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; </div>
<div class="line"><a name="l00375"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#a3970b74583def49c6632fe08a4499809"> 375</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classHazelnp_1_1Hazelnupp.html#a3970b74583def49c6632fe08a4499809">Hazelnupp::ClearConstraints</a>()</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;{</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; constraints.clear();</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;}</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; </div>
<div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="classHazelnp_1_1Hazelnupp.html#a17845623ca686caa51f3c8254e85551e"> 381</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classHazelnp_1_1Hazelnupp.html#a17845623ca686caa51f3c8254e85551e">Hazelnupp::SetCrashOnFail</a>(<span class="keywordtype">bool</span> crashOnFail)</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;{</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; this-&gt;crashOnFail = crashOnFail;</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;}</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; </div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="keyword">const</span> <a class="code" href="structHazelnp_1_1ParamConstraint.html">ParamConstraint</a>* Hazelnupp::GetConstraintForKey(<span class="keyword">const</span> std::string&amp; key)<span class="keyword"> const</span></div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> constraint = constraints.find(key);</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; </div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">if</span> (constraint == constraints.end())</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; </div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">return</span> &amp;constraint-&gt;second;</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;}</div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aHazelnuppException_8h_html"><div class="ttname"><a href="HazelnuppException_8h.html">HazelnuppException.h</a></div></div>
<div class="ttc" id="anamespaceHazelnp_html"><div class="ttname"><a href="namespaceHazelnp.html">Hazelnp</a></div><div class="ttdef"><b>Definition:</b> <a href="DataType_8h_source.html#l00003">DataType.h:3</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1IntValue_html"><div class="ttname"><a href="classHazelnp_1_1IntValue.html">Hazelnp::IntValue</a></div><div class="ttdoc">Specializations for integer values (uses long long int)</div><div class="ttdef"><b>Definition:</b> <a href="IntValue_8h_source.html#l00008">IntValue.h:8</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1StringTools_html_a6cd093feaca2d978c23774cf87d86e68"><div class="ttname"><a href="classHazelnp_1_1StringTools.html#a6cd093feaca2d978c23774cf87d86e68">Hazelnp::StringTools::IsNumeric</a></div><div class="ttdeci">static bool IsNumeric(const std::string &amp;str, const bool allowDecimalPoint=false)</div><div class="ttdoc">Will return true if the given string consists only of digits (including signage)</div><div class="ttdef"><b>Definition:</b> <a href="StringTools_8cpp_source.html#l00056">StringTools.cpp:56</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1StringTools_html_ab661223da5bbbb75039e168409466c82"><div class="ttname"><a href="classHazelnp_1_1StringTools.html#ab661223da5bbbb75039e168409466c82">Hazelnp::StringTools::ParseNumber</a></div><div class="ttdeci">static bool ParseNumber(const std::string &amp;str, bool &amp;out_isInt, long double &amp;out_number)</div><div class="ttdoc">Will convert the number in str to a number.</div><div class="ttdef"><b>Definition:</b> <a href="StringTools_8cpp_source.html#l00082">StringTools.cpp:82</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_a3970b74583def49c6632fe08a4499809"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#a3970b74583def49c6632fe08a4499809">Hazelnp::Hazelnupp::ClearConstraints</a></div><div class="ttdeci">void ClearConstraints()</div><div class="ttdoc">Will delete all constraints.</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00375">Hazelnupp.cpp:375</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1HazelnuppInvalidKeyException_html"><div class="ttname"><a href="classHazelnp_1_1HazelnuppInvalidKeyException.html">Hazelnp::HazelnuppInvalidKeyException</a></div><div class="ttdoc">Gets thrown when an non-existent key gets dereferenced.</div><div class="ttdef"><b>Definition:</b> <a href="HazelnuppException_8h_source.html#l00026">HazelnuppException.h:26</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_af6bb41fb079131f8b91fe981f63f7469"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#af6bb41fb079131f8b91fe981f63f7469">Hazelnp::Hazelnupp::GetExecutableName</a></div><div class="ttdeci">const std::string &amp; GetExecutableName() const</div><div class="ttdoc">Will return argv[0], the name of the executable.</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00318">Hazelnupp.cpp:318</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_a25f8810d24d647b6a57e2dd00ead42be"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#a25f8810d24d647b6a57e2dd00ead42be">Hazelnp::Hazelnupp::~Hazelnupp</a></div><div class="ttdeci">~Hazelnupp()</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00025">Hazelnupp.cpp:25</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_a419ccdc6bad00b0fc3e17ed9b41f5dc5"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#a419ccdc6bad00b0fc3e17ed9b41f5dc5">Hazelnp::Hazelnupp::operator[]</a></div><div class="ttdeci">const Value &amp; operator[](const std::string &amp;key) const</div><div class="ttdoc">Will return the value given a key.</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00323">Hazelnupp.cpp:323</a></div></div>
<div class="ttc" id="aStringValue_8h_html"><div class="ttname"><a href="StringValue_8h.html">StringValue.h</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1HazelnuppException_html_aa86c415a0f2b4ea5f11892145d1ea83e"><div class="ttname"><a href="classHazelnp_1_1HazelnuppException.html#aa86c415a0f2b4ea5f11892145d1ea83e">Hazelnp::HazelnuppException::What</a></div><div class="ttdeci">const std::string &amp; What() const</div><div class="ttdoc">Will return an error message.</div><div class="ttdef"><b>Definition:</b> <a href="HazelnuppException_8h_source.html#l00015">HazelnuppException.h:15</a></div></div>
<div class="ttc" id="aIntValue_8h_html"><div class="ttname"><a href="IntValue_8h.html">IntValue.h</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_a20ac0ebcfd4df7f320a7bbcaeed6e54d"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#a20ac0ebcfd4df7f320a7bbcaeed6e54d">Hazelnp::Hazelnupp::Hazelnupp</a></div><div class="ttdeci">Hazelnupp()</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00014">Hazelnupp.cpp:14</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_a5175869b025468324cefad487081e91d"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#a5175869b025468324cefad487081e91d">Hazelnp::Hazelnupp::ClearAbbreviations</a></div><div class="ttdeci">void ClearAbbreviations()</div><div class="ttdoc">Will delete all abbreviations.</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00348">Hazelnupp.cpp:348</a></div></div>
<div class="ttc" id="anamespaceHazelnp_html_a07b61ac22ce9cd97eceebdf9487f803fa6d0c9fc747131795e6e5d0c5119f12cb"><div class="ttname"><a href="namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa6d0c9fc747131795e6e5d0c5119f12cb">Hazelnp::DATA_TYPE::VOID</a></div><div class="ttdeci">@ VOID</div></div>
<div class="ttc" id="aclassHazelnp_1_1FloatValue_html"><div class="ttname"><a href="classHazelnp_1_1FloatValue.html">Hazelnp::FloatValue</a></div><div class="ttdoc">Specializations for floating point values (uses long double)</div><div class="ttdef"><b>Definition:</b> <a href="FloatValue_8h_source.html#l00009">FloatValue.h:9</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Value_html"><div class="ttname"><a href="classHazelnp_1_1Value.html">Hazelnp::Value</a></div><div class="ttdoc">Abstract class for values.</div><div class="ttdef"><b>Definition:</b> <a href="Value_8h_source.html#l00010">Value.h:10</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_a1b810cc7db2cf64aecaa70c686b14bb7"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#a1b810cc7db2cf64aecaa70c686b14bb7">Hazelnp::Hazelnupp::GetCrashOnFail</a></div><div class="ttdeci">bool GetCrashOnFail() const</div><div class="ttdoc">Gets whether the application crashes on an exception whilst parsing, and prints to stderr.</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00279">Hazelnupp.cpp:279</a></div></div>
<div class="ttc" id="anamespaceHazelnp_html_a07b61ac22ce9cd97eceebdf9487f803fa298cb25408234de02baf2085803a464a"><div class="ttname"><a href="namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa298cb25408234de02baf2085803a464a">Hazelnp::DATA_TYPE::LIST</a></div><div class="ttdeci">@ LIST</div></div>
<div class="ttc" id="aclassHazelnp_1_1Parameter_html"><div class="ttname"><a href="classHazelnp_1_1Parameter.html">Hazelnp::Parameter</a></div><div class="ttdef"><b>Definition:</b> <a href="Parameter_8h_source.html#l00008">Parameter.h:8</a></div></div>
<div class="ttc" id="astructHazelnp_1_1ParamConstraint_html_ac07a0c0555431d4b1e0bc6afdba41329"><div class="ttname"><a href="structHazelnp_1_1ParamConstraint.html#ac07a0c0555431d4b1e0bc6afdba41329">Hazelnp::ParamConstraint::wantedType</a></div><div class="ttdeci">DATA_TYPE wantedType</div><div class="ttdoc">Constrain the parameter to this value. Requires constrainType to be set to true.</div><div class="ttdef"><b>Definition:</b> <a href="ParamConstraint_8h_source.html#l00057">ParamConstraint.h:57</a></div></div>
<div class="ttc" id="astructHazelnp_1_1ParamConstraint_html"><div class="ttname"><a href="structHazelnp_1_1ParamConstraint.html">Hazelnp::ParamConstraint</a></div><div class="ttdef"><b>Definition:</b> <a href="ParamConstraint_8h_source.html#l00008">ParamConstraint.h:8</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_a8b79a79d40420ae748c108c691111040"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#a8b79a79d40420ae748c108c691111040">Hazelnp::Hazelnupp::HasParam</a></div><div class="ttdeci">bool HasParam(const std::string &amp;key) const</div><div class="ttdoc">Will check wether a parameter exists given a key, or not.</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00153">Hazelnupp.cpp:153</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_a1ccb88faca1a8deb77161888479c300b"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#a1ccb88faca1a8deb77161888479c300b">Hazelnp::Hazelnupp::Parse</a></div><div class="ttdeci">void Parse(const int argc, const char *const *argv)</div><div class="ttdoc">Will parse command line arguments.</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00035">Hazelnupp.cpp:35</a></div></div>
<div class="ttc" id="aListValue_8h_html"><div class="ttname"><a href="ListValue_8h.html">ListValue.h</a></div></div>
<div class="ttc" id="astructHazelnp_1_1ParamConstraint_html_a88a4a4c215723259c71853992d09acac"><div class="ttname"><a href="structHazelnp_1_1ParamConstraint.html#a88a4a4c215723259c71853992d09acac">Hazelnp::ParamConstraint::constrainType</a></div><div class="ttdeci">bool constrainType</div><div class="ttdoc">Should this parameter be forced to be of a certain type? Remember to set constrainTo to the wanted ...</div><div class="ttdef"><b>Definition:</b> <a href="ParamConstraint_8h_source.html#l00054">ParamConstraint.h:54</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Parameter_html_a7acd68ce06eec06ab286b1a062f9c8d6"><div class="ttname"><a href="classHazelnp_1_1Parameter.html#a7acd68ce06eec06ab286b1a062f9c8d6">Hazelnp::Parameter::Key</a></div><div class="ttdeci">const std::string &amp; Key() const</div><div class="ttdoc">Will return the key of this parameter.</div><div class="ttdef"><b>Definition:</b> <a href="Parameter_8cpp_source.html#l00021">Parameter.cpp:21</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1HazelnuppConstraintMissingValue_html"><div class="ttname"><a href="classHazelnp_1_1HazelnuppConstraintMissingValue.html">Hazelnp::HazelnuppConstraintMissingValue</a></div><div class="ttdoc">Gets thrown when a parameter constrained to be required is not provided, and has no default value set...</div><div class="ttdef"><b>Definition:</b> <a href="HazelnuppException_8h_source.html#l00062">HazelnuppException.h:62</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_abf1e0ebf0207ca2327fcde81f7372124"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#abf1e0ebf0207ca2327fcde81f7372124">Hazelnp::Hazelnupp::RegisterAbbreviation</a></div><div class="ttdeci">void RegisterAbbreviation(const std::string &amp;abbrev, const std::string &amp;target)</div><div class="ttdoc">Will register an abbreviation (like -f for force)</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00332">Hazelnupp.cpp:332</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1HazelnuppConstraintTypeMissmatch_html"><div class="ttname"><a href="classHazelnp_1_1HazelnuppConstraintTypeMissmatch.html">Hazelnp::HazelnuppConstraintTypeMissmatch</a></div><div class="ttdoc">Gets thrown when a parameter is of a type that does not match the required type, and is not convertib...</div><div class="ttdef"><b>Definition:</b> <a href="HazelnuppException_8h_source.html#l00053">HazelnuppException.h:53</a></div></div>
<div class="ttc" id="aVoidValue_8h_html"><div class="ttname"><a href="VoidValue_8h.html">VoidValue.h</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_a8a3331836b9ea1f920e77f6d332019d5"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#a8a3331836b9ea1f920e77f6d332019d5">Hazelnp::Hazelnupp::RegisterConstraints</a></div><div class="ttdeci">void RegisterConstraints(const std::vector&lt; ParamConstraint &gt; &amp;constraints)</div><div class="ttdoc">Will register parameter constraints.</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00354">Hazelnupp.cpp:354</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_a579e78129f19cb9f17a6075366ababe5"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#a579e78129f19cb9f17a6075366ababe5">Hazelnp::Hazelnupp::GetAbbreviation</a></div><div class="ttdeci">const std::string &amp; GetAbbreviation(const std::string &amp;abbrev) const</div><div class="ttdoc">Will return the long form of an abbreviation (like force for -f)</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00338">Hazelnupp.cpp:338</a></div></div>
<div class="ttc" id="aHazelnupp_8h_html"><div class="ttname"><a href="Hazelnupp_8h.html">Hazelnupp.h</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1ListValue_html_af8787d266aa353d3f96e2c76cce76c41"><div class="ttname"><a href="classHazelnp_1_1ListValue.html#af8787d266aa353d3f96e2c76cce76c41">Hazelnp::ListValue::AddValue</a></div><div class="ttdeci">void AddValue(const Value *value)</div><div class="ttdoc">Will add this value to the list.</div><div class="ttdef"><b>Definition:</b> <a href="ListValue_8cpp_source.html#l00033">ListValue.cpp:33</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1VoidValue_html"><div class="ttname"><a href="classHazelnp_1_1VoidValue.html">Hazelnp::VoidValue</a></div><div class="ttdoc">Specializations for void values.</div><div class="ttdef"><b>Definition:</b> <a href="VoidValue_8h_source.html#l00008">VoidValue.h:8</a></div></div>
<div class="ttc" id="anamespaceHazelnp_html_a07b61ac22ce9cd97eceebdf9487f803fae738c26bf4ce1037fa81b039a915cbf6"><div class="ttname"><a href="namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fae738c26bf4ce1037fa81b039a915cbf6">Hazelnp::DATA_TYPE::FLOAT</a></div><div class="ttdeci">@ FLOAT</div></div>
<div class="ttc" id="anamespaceHazelnp_html_a07b61ac22ce9cd97eceebdf9487f803fa53f93baa3057821107c750323892fa92"><div class="ttname"><a href="namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa53f93baa3057821107c750323892fa92">Hazelnp::DATA_TYPE::INT</a></div><div class="ttdeci">@ INT</div></div>
<div class="ttc" id="aFloatValue_8h_html"><div class="ttname"><a href="FloatValue_8h.html">FloatValue.h</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_a46df7d396fb56e30351c9a7308792200"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#a46df7d396fb56e30351c9a7308792200">Hazelnp::Hazelnupp::HasAbbreviation</a></div><div class="ttdeci">bool HasAbbreviation(const std::string &amp;abbrev) const</div><div class="ttdoc">Will check wether or not an abbreviation is registered.</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00343">Hazelnupp.cpp:343</a></div></div>
<div class="ttc" id="anamespaceHazelnp_html_a07b61ac22ce9cd97eceebdf9487f803fa63b588d5559f64f89a416e656880b949"><div class="ttname"><a href="namespaceHazelnp.html#a07b61ac22ce9cd97eceebdf9487f803fa63b588d5559f64f89a416e656880b949">Hazelnp::DATA_TYPE::STRING</a></div><div class="ttdeci">@ STRING</div></div>
<div class="ttc" id="aclassHazelnp_1_1Hazelnupp_html_a17845623ca686caa51f3c8254e85551e"><div class="ttname"><a href="classHazelnp_1_1Hazelnupp.html#a17845623ca686caa51f3c8254e85551e">Hazelnp::Hazelnupp::SetCrashOnFail</a></div><div class="ttdeci">void SetCrashOnFail(bool crashOnFail)</div><div class="ttdoc">Sets whether to crash the application, and print to stderr, when an exception is raised whilst parsin...</div><div class="ttdef"><b>Definition:</b> <a href="Hazelnupp_8cpp_source.html#l00381">Hazelnupp.cpp:381</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1ListValue_html"><div class="ttname"><a href="classHazelnp_1_1ListValue.html">Hazelnp::ListValue</a></div><div class="ttdoc">Specializations for list values (uses std::vector&lt;Value*&gt;)</div><div class="ttdef"><b>Definition:</b> <a href="ListValue_8h_source.html#l00009">ListValue.h:9</a></div></div>
<div class="ttc" id="aclassHazelnp_1_1StringValue_html"><div class="ttname"><a href="classHazelnp_1_1StringValue.html">Hazelnp::StringValue</a></div><div class="ttdoc">Specializations for string values (uses std::string)</div><div class="ttdef"><b>Definition:</b> <a href="StringValue_8h_source.html#l00009">StringValue.h:9</a></div></div>
<div class="ttc" id="aStringTools_8h_html"><div class="ttname"><a href="StringTools_8h.html">StringTools.h</a></div></div>
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jun 3 2021 16:39:50 for Leonetienne/Hazelnupp by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.17
</small></address>
</body>
</html>