svf-tools 1.0.621 → 1.0.623

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +1 -1
  2. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +19 -19
  3. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +52 -52
  4. package/SVF-doxygen/html/html/IntervalValue_8h_source.html +17 -15
  5. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
  7. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -1
  8. package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +3 -3
  9. package/SVF-doxygen/html/html/PointsTo_8h_source.html +3 -3
  10. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +3 -3
  11. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +22 -22
  12. package/SVF-doxygen/html/html/SVFG_8h_source.html +37 -36
  13. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +1 -1
  14. package/SVF-doxygen/html/html/SVFValue_8h_source.html +1 -1
  15. package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +3 -3
  16. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
  17. package/SVF-doxygen/html/html/WTO_8h_source.html +1 -1
  18. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +83 -83
  19. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI_1_1Operation.html +17 -17
  20. package/SVF-doxygen/html/html/classSVF_1_1IntervalValue-members.html +5 -4
  21. package/SVF-doxygen/html/html/classSVF_1_1IntervalValue.html +32 -0
  22. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1 -1
  23. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +96 -95
  24. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +157 -121
  25. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +116 -115
  26. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +13 -10
  27. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +2 -2
  28. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +2 -2
  29. package/SVF-doxygen/html/html/fastcluster__dm_8cpp_8inc_source.html +1 -1
  30. package/SVF-doxygen/html/html/functions_c.html +6 -6
  31. package/SVF-doxygen/html/html/functions_func_h.html +7 -4
  32. package/SVF-doxygen/html/html/functions_func_i.html +2 -2
  33. package/SVF-doxygen/html/html/functions_func_t.html +1 -0
  34. package/SVF-doxygen/html/html/functions_h.html +5 -2
  35. package/SVF-doxygen/html/html/functions_i.html +4 -4
  36. package/SVF-doxygen/html/html/functions_l.html +3 -3
  37. package/SVF-doxygen/html/html/functions_o.html +3 -3
  38. package/SVF-doxygen/html/html/functions_p.html +9 -15
  39. package/SVF-doxygen/html/html/functions_s.html +15 -13
  40. package/SVF-doxygen/html/html/functions_t.html +7 -6
  41. package/SVF-doxygen/html/html/functions_v.html +3 -3
  42. package/SVF-doxygen/html/html/namespaceSVF.html +30 -30
  43. package/SVF-doxygen/html/html/search/all_10.js +5 -5
  44. package/SVF-doxygen/html/html/search/all_11.js +2 -2
  45. package/SVF-doxygen/html/html/search/all_12.js +8 -8
  46. package/SVF-doxygen/html/html/search/all_13.js +5 -5
  47. package/SVF-doxygen/html/html/search/all_15.js +2 -2
  48. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  49. package/SVF-doxygen/html/html/search/all_3.js +2 -2
  50. package/SVF-doxygen/html/html/search/all_7.js +1 -1
  51. package/SVF-doxygen/html/html/search/all_8.js +1 -0
  52. package/SVF-doxygen/html/html/search/all_9.js +3 -3
  53. package/SVF-doxygen/html/html/search/all_b.js +1 -1
  54. package/SVF-doxygen/html/html/search/all_c.js +1 -1
  55. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  56. package/SVF-doxygen/html/html/search/functions_11.js +1 -1
  57. package/SVF-doxygen/html/html/search/functions_12.js +1 -1
  58. package/SVF-doxygen/html/html/search/functions_7.js +1 -0
  59. package/SVF-doxygen/html/html/search/functions_8.js +1 -1
  60. package/SVF-doxygen/html/html/search/variables_13.js +3 -3
  61. package/SVF-doxygen/html/html/search/variables_7.js +1 -1
  62. package/SVF-doxygen/html/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1SVFG_01_5_01_4.html +2 -2
  63. package/include/AbstractExecution/IntervalValue.h +5 -0
  64. package/include/Graphs/SVFG.h +6 -0
  65. package/include/Util/ExtAPI.h +65 -40
  66. package/package.json +1 -1
@@ -5277,8 +5277,8 @@ template&lt;class GraphType &gt; </div>
5277
5277
 
5278
5278
  <p>Bitwise AND of IntervalValues. </p>
5279
5279
 
5280
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00770">770</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5281
- <div class="fragment"><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;{</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; {</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keywordflow">return</span> IntervalValue((<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)lhs.getNumeral() &amp; (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)rhs.getNumeral());</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; }</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt;= 0 &amp;&amp; rhs.lb().getNumeral() &gt;= 0)</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; {</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="keywordflow">return</span> IntervalValue(0.0, std::min(lhs.ub().getNumeral(), rhs.ub().getNumeral()));</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; }</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt;= 0)</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; {</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keywordflow">return</span> IntervalValue(0.0, lhs.ub().getNumeral());</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; }</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs.lb().getNumeral() &gt;= 0)</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; {</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordflow">return</span> IntervalValue(0.0, rhs.ub().getNumeral());</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; }</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; {</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; }</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
5280
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00775">775</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5281
+ <div class="fragment"><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;{</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; {</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="keywordflow">return</span> IntervalValue((<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)lhs.getNumeral() &amp; (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)rhs.getNumeral());</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; }</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt;= 0 &amp;&amp; rhs.lb().getNumeral() &gt;= 0)</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; {</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="keywordflow">return</span> IntervalValue(0.0, std::min(lhs.ub().getNumeral(), rhs.ub().getNumeral()));</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; }</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt;= 0)</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; {</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">return</span> IntervalValue(0.0, lhs.ub().getNumeral());</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; }</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs.lb().getNumeral() &gt;= 0)</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; {</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordflow">return</span> IntervalValue(0.0, rhs.ub().getNumeral());</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; }</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; {</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; }</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
5282
5282
  </div><!-- fragment -->
5283
5283
  </div>
5284
5284
  </div>
@@ -5358,8 +5358,8 @@ template&lt;unsigned ElementSize&gt; </div>
5358
5358
 
5359
5359
  <p>Divide IntervalValues. </p>
5360
5360
 
5361
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00519">519</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5362
- <div class="fragment"><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;{</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; {</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs.contains(0))</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; {</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">return</span> lhs.is_zero() ? IntervalValue(0, 0) : IntervalValue::top();</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">return</span> IntervalValue(lhs.lb() % rhs.lb(), lhs.lb() % rhs.lb());</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; }</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; {</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordtype">double</span> n_ub = std::max(std::abs(lhs.lb().getNumeral()), std::abs(lhs.ub().getNumeral()));</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordtype">double</span> d_ub = std::max(std::abs(rhs.lb().getNumeral()), std::abs(rhs.ub().getNumeral())) - 1;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordtype">double</span> ub = std::min(n_ub, d_ub);</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">if</span> (lhs.lb().getNumeral() &lt; 0)</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; {</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">if</span> (lhs.ub().getNumeral() &gt; 0)</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">return</span> IntervalValue(-ub, ub);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; {</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">return</span> IntervalValue(-ub, <span class="keywordtype">double</span>(0));</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; }</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; }</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">return</span> IntervalValue(<span class="keywordtype">double</span>(0), ub);</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;}</div></div><!-- fragment -->
5361
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00524">524</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5362
+ <div class="fragment"><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;{</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; }</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs.contains(0))</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; {</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">return</span> lhs.is_zero() ? IntervalValue(0, 0) : IntervalValue::top();</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; }</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; {</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordflow">return</span> IntervalValue(lhs.lb() % rhs.lb(), lhs.lb() % rhs.lb());</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; {</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keywordtype">double</span> n_ub = std::max(std::abs(lhs.lb().getNumeral()), std::abs(lhs.ub().getNumeral()));</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordtype">double</span> d_ub = std::max(std::abs(rhs.lb().getNumeral()), std::abs(rhs.ub().getNumeral())) - 1;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordtype">double</span> ub = std::min(n_ub, d_ub);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keywordflow">if</span> (lhs.lb().getNumeral() &lt; 0)</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; {</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">if</span> (lhs.ub().getNumeral() &gt; 0)</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; {</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">return</span> IntervalValue(-ub, ub);</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; }</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">return</span> IntervalValue(-ub, <span class="keywordtype">double</span>(0));</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordflow">return</span> IntervalValue(<span class="keywordtype">double</span>(0), ub);</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; }</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;}</div></div><!-- fragment -->
5363
5363
  </div>
5364
5364
  </div>
5365
5365
  <a id="a9d6c986a34096a3552a6385ccbb724e4"></a>
@@ -5478,8 +5478,8 @@ template&lt;unsigned ElementSize&gt; </div>
5478
5478
 
5479
5479
  <p>Multiply IntervalValues. </p>
5480
5480
 
5481
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00476">476</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5482
- <div class="fragment"><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;{</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; }</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; {</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; NumericLiteral ll = lhs.lb() * rhs.lb();</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; NumericLiteral lu = lhs.lb() * rhs.ub();</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; NumericLiteral ul = lhs.ub() * rhs.lb();</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; NumericLiteral uu = lhs.ub() * rhs.ub();</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">return</span> IntervalValue(std::min({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}),</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; std::max({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}));</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;}</div></div><!-- fragment -->
5481
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00481">481</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5482
+ <div class="fragment"><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;{</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; }</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; NumericLiteral ll = lhs.lb() * rhs.lb();</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; NumericLiteral lu = lhs.lb() * rhs.ub();</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; NumericLiteral ul = lhs.ub() * rhs.lb();</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; NumericLiteral uu = lhs.ub() * rhs.ub();</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">return</span> IntervalValue(std::min({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}),</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; std::max({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}));</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;}</div></div><!-- fragment -->
5483
5483
  </div>
5484
5484
  </div>
5485
5485
  <a id="ad9d56b31ab074c813b48da4c2e0742aa"></a>
@@ -5518,8 +5518,8 @@ template&lt;unsigned ElementSize&gt; </div>
5518
5518
 
5519
5519
  <p>Add IntervalValues. </p>
5520
5520
 
5521
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00440">440</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5522
- <div class="fragment"><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;{</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; {</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() || rhs.isTop())</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; {</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; {</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">return</span> IntervalValue(lhs.lb() + rhs.lb(), lhs.ub() + rhs.ub());</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;}</div></div><!-- fragment -->
5521
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00445">445</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5522
+ <div class="fragment"><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;{</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() || rhs.isTop())</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; {</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">return</span> IntervalValue(lhs.lb() + rhs.lb(), lhs.ub() + rhs.ub());</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;}</div></div><!-- fragment -->
5523
5523
  </div>
5524
5524
  </div>
5525
5525
  <a id="a6c2f7ce4908d39a17b29830a2e4bd781"></a>
@@ -5590,8 +5590,8 @@ template&lt;unsigned ElementSize&gt; </div>
5590
5590
 
5591
5591
  <p>Substract IntervalValues. </p>
5592
5592
 
5593
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00458">458</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5594
- <div class="fragment"><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;{</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; }</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() || rhs.isTop())</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; {</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; }</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> IntervalValue(lhs.lb() - rhs.ub(), lhs.ub() - rhs.lb());</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;}</div></div><!-- fragment -->
5593
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00463">463</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5594
+ <div class="fragment"><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;{</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; {</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() || rhs.isTop())</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; {</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">return</span> IntervalValue(lhs.lb() - rhs.ub(), lhs.ub() - rhs.lb());</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;}</div></div><!-- fragment -->
5595
5595
  </div>
5596
5596
  </div>
5597
5597
  <a id="a1b6662f895cfd942996ac4d578960eed"></a>
@@ -5670,8 +5670,8 @@ template&lt;unsigned ElementSize&gt; </div>
5670
5670
 
5671
5671
  <p>Divide IntervalValues. </p>
5672
5672
 
5673
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00495">495</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5674
- <div class="fragment"><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;{</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs.contains(0))</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; {</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">return</span> lhs.is_zero() ? IntervalValue(0, 0) : IntervalValue::top();</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="comment">// Neither the dividend nor the divisor contains 0</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; NumericLiteral ll = lhs.lb() / rhs.lb();</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; NumericLiteral lu = lhs.lb() / rhs.ub();</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; NumericLiteral ul = lhs.ub() / rhs.lb();</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; NumericLiteral uu = lhs.ub() / rhs.ub();</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">return</span> IntervalValue(std::min({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}),</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; std::max({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}));</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; }</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;}</div></div><!-- fragment -->
5673
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00500">500</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5674
+ <div class="fragment"><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;{</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; }</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs.contains(0))</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordflow">return</span> lhs.is_zero() ? IntervalValue(0, 0) : IntervalValue::top();</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="comment">// Neither the dividend nor the divisor contains 0</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; NumericLiteral ll = lhs.lb() / rhs.lb();</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; NumericLiteral lu = lhs.lb() / rhs.ub();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; NumericLiteral ul = lhs.ub() / rhs.lb();</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; NumericLiteral uu = lhs.ub() / rhs.ub();</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">return</span> IntervalValue(std::min({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}),</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; std::max({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}));</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;}</div></div><!-- fragment -->
5675
5675
  </div>
5676
5676
  </div>
5677
5677
  <a id="adeb418bb692b6b0c3498a24927e1068b"></a>
@@ -5710,8 +5710,8 @@ template&lt;unsigned ElementSize&gt; </div>
5710
5710
 
5711
5711
  <p>Greater than IntervalValues. </p>
5712
5712
 
5713
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00597">597</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5714
- <div class="fragment"><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;{</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; {</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; }</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() || lhs.isTop())</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; {</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; }</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; {</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; {</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordflow">return</span> lhs.lb().geq(rhs.lb()) ? IntervalValue(0, 0) : IntervalValue(1, 1);</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; }</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; {</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="comment">// lhs [1,2] rhs [3,4]</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="keywordflow">if</span> (lhs.ub().getNumeral() &lt; rhs.lb().getNumeral())</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; {</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="comment">// lhs [3,4] rhs [1,2]</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; }</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt; rhs.ub().getNumeral())</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keywordflow">return</span> IntervalValue(0, 0);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// lhs [1,3] rhs [2,4]</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; {</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">return</span> IntervalValue(0, 1);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; }</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; }</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;}</div></div><!-- fragment -->
5713
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00602">602</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5714
+ <div class="fragment"><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;{</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; }</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() || lhs.isTop())</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; {</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; }</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; {</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; {</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="keywordflow">return</span> lhs.lb().geq(rhs.lb()) ? IntervalValue(0, 0) : IntervalValue(1, 1);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; }</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; {</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="comment">// lhs [1,2] rhs [3,4]</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">if</span> (lhs.ub().getNumeral() &lt; rhs.lb().getNumeral())</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// lhs [3,4] rhs [1,2]</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt; rhs.ub().getNumeral())</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; {</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">return</span> IntervalValue(0, 0);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="comment">// lhs [1,3] rhs [2,4]</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; }</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; {</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">return</span> IntervalValue(0, 1);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; }</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; }</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;}</div></div><!-- fragment -->
5715
5715
  </div>
5716
5716
  </div>
5717
5717
  <a id="af95793adab8fb9aa19e19027e73372a6"></a>
@@ -5750,8 +5750,8 @@ template&lt;unsigned ElementSize&gt; </div>
5750
5750
 
5751
5751
  <p>Left binary shift of IntervalValues. </p>
5752
5752
 
5753
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00714">714</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5754
- <div class="fragment"><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;{</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="comment">//TODO: implement &lt;&lt;</span></div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">if</span> (lhs.isTop() &amp;&amp; rhs.isTop())</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; IntervalValue shift = rhs;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; shift.meet_with(IntervalValue(0, IntervalValue::plus_infinity()));</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">if</span> (shift.isBottom())</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; IntervalValue coeff(1 &lt;&lt; (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>) shift.lb().getNumeral(),</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; shift.ub().is_infinity() ? IntervalValue::plus_infinity() : 1</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; &lt;&lt; (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>) shift.ub().getNumeral());</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">return</span> lhs * coeff;</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; }</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
5753
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00719">719</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5754
+ <div class="fragment"><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;{</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="comment">//TODO: implement &lt;&lt;</span></div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keywordflow">if</span> (lhs.isTop() &amp;&amp; rhs.isTop())</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; {</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; IntervalValue shift = rhs;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; shift.meet_with(IntervalValue(0, IntervalValue::plus_infinity()));</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">if</span> (shift.isBottom())</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; IntervalValue coeff(1 &lt;&lt; (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>) shift.lb().getNumeral(),</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; shift.ub().is_infinity() ? IntervalValue::plus_infinity() : 1</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; &lt;&lt; (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>) shift.ub().getNumeral());</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">return</span> lhs * coeff;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; }</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
5755
5755
  </div><!-- fragment -->
5756
5756
  </div>
5757
5757
  </div>
@@ -5828,8 +5828,8 @@ template&lt;unsigned ElementSize&gt; </div>
5828
5828
 
5829
5829
  <p>Write an <a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a> on a stream. </p>
5830
5830
 
5831
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00855">855</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5832
- <div class="fragment"><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;{</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; IntervalValue.dump(o);</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="keywordflow">return</span> o;</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;}</div></div><!-- fragment -->
5831
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00860">860</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5832
+ <div class="fragment"><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;{</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; IntervalValue.dump(o);</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <span class="keywordflow">return</span> o;</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;}</div></div><!-- fragment -->
5833
5833
  </div>
5834
5834
  </div>
5835
5835
  <a id="af83f5c5c68cdb80576cdc1d62c01b207"></a>
@@ -5900,8 +5900,8 @@ template&lt;typename F , typename S &gt; </div>
5900
5900
 
5901
5901
  <p>Greater than IntervalValues. </p>
5902
5902
 
5903
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00675">675</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5904
- <div class="fragment"><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;{</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; }</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() || lhs.isTop())</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; {</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordflow">return</span> lhs.lb().leq(rhs.lb()) ? IntervalValue(1, 1) : IntervalValue(0, 0);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; }</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; {</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="comment">// lhs [1,2] rhs [2,3]</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">if</span> (lhs.ub().getNumeral() &lt;= rhs.lb().getNumeral())</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="comment">// lhs [3,4] rhs[1,2]</span></div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; }</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt; rhs.ub().getNumeral())</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; {</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">return</span> IntervalValue(0, 0);</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="comment">// lhs [1,3] rhs [2,4]</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; }</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; {</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">if</span> (lhs.equals(rhs)) <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">return</span> IntervalValue(0, 1);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; }</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; }</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;}</div></div><!-- fragment -->
5903
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00680">680</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5904
+ <div class="fragment"><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;{</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; {</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() || lhs.isTop())</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; {</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; {</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; {</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">return</span> lhs.lb().leq(rhs.lb()) ? IntervalValue(1, 1) : IntervalValue(0, 0);</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; {</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="comment">// lhs [1,2] rhs [2,3]</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordflow">if</span> (lhs.ub().getNumeral() &lt;= rhs.lb().getNumeral())</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; {</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="comment">// lhs [3,4] rhs[1,2]</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; }</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt; rhs.ub().getNumeral())</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; {</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">return</span> IntervalValue(0, 0);</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="comment">// lhs [1,3] rhs [2,4]</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; {</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keywordflow">if</span> (lhs.equals(rhs)) <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">return</span> IntervalValue(0, 1);</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; }</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; }</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;}</div></div><!-- fragment -->
5905
5905
  </div>
5906
5906
  </div>
5907
5907
  <a id="aedd9d023a68dddd66314be63bb8e48d2"></a>
@@ -5940,8 +5940,8 @@ template&lt;typename F , typename S &gt; </div>
5940
5940
 
5941
5941
  <p>Greater than IntervalValues. </p>
5942
5942
 
5943
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00559">559</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5944
- <div class="fragment"><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;{</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; }</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() || lhs.isTop())</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; }</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; {</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">return</span> lhs.lb().leq(rhs.lb()) ? IntervalValue(0, 0) : IntervalValue(1, 1);</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; {</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="comment">// lhs[3,4] rhs[1,2]</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt; rhs.ub().getNumeral())</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; {</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="comment">// lhs[1,2] rhs[3,4]</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; }</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.ub().getNumeral() &lt; rhs.lb().getNumeral())</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">return</span> IntervalValue(0, 0);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; }</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="comment">// lhs[1,3] rhs[2,4]</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">return</span> IntervalValue(0, 1);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; }</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; }</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;}</div></div><!-- fragment -->
5943
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00564">564</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5944
+ <div class="fragment"><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;{</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; }</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() || lhs.isTop())</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; }</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; {</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">return</span> lhs.lb().leq(rhs.lb()) ? IntervalValue(0, 0) : IntervalValue(1, 1);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; }</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="comment">// lhs[3,4] rhs[1,2]</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt; rhs.ub().getNumeral())</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="comment">// lhs[1,2] rhs[3,4]</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.ub().getNumeral() &lt; rhs.lb().getNumeral())</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; {</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">return</span> IntervalValue(0, 0);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; }</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; {</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="comment">// lhs[1,3] rhs[2,4]</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">return</span> IntervalValue(0, 1);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; }</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;}</div></div><!-- fragment -->
5945
5945
  </div>
5946
5946
  </div>
5947
5947
  <a id="a08938c05911dac4ebd102adfafd14d24"></a>
@@ -5980,8 +5980,8 @@ template&lt;typename F , typename S &gt; </div>
5980
5980
 
5981
5981
  <p>Greater than IntervalValues. </p>
5982
5982
 
5983
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00636">636</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5984
- <div class="fragment"><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;{</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; }</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() || lhs.isTop())</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; }</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">return</span> lhs.lb().geq(rhs.lb()) ? IntervalValue(1, 1) : IntervalValue(0, 0);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; }</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; {</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="comment">// lhs [2,3] rhs [1,2]</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt;= rhs.ub().getNumeral())</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; {</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="comment">// lhs [1,2] rhs[3,4]</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.ub().getNumeral() &lt; rhs.lb().getNumeral())</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">return</span> IntervalValue(0, 0);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="comment">// lhs [1,3] rhs [2,4]</span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">if</span> (lhs.equals(rhs)) <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">return</span> IntervalValue(0, 1);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; }</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160;}</div></div><!-- fragment -->
5983
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00641">641</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
5984
+ <div class="fragment"><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;{</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; {</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; }</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() || lhs.isTop())</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; {</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; }</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; {</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; {</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">return</span> lhs.lb().geq(rhs.lb()) ? IntervalValue(1, 1) : IntervalValue(0, 0);</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; }</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; {</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="comment">// lhs [2,3] rhs [1,2]</span></div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt;= rhs.ub().getNumeral())</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="comment">// lhs [1,2] rhs[3,4]</span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.ub().getNumeral() &lt; rhs.lb().getNumeral())</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">return</span> IntervalValue(0, 0);</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="comment">// lhs [1,3] rhs [2,4]</span></div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; {</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">if</span> (lhs.equals(rhs)) <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">return</span> IntervalValue(0, 1);</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; }</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; }</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160;}</div></div><!-- fragment -->
5985
5985
  </div>
5986
5986
  </div>
5987
5987
  <a id="a4b2b5d8755b9f0c4f82a9f82b4631fee"></a>
@@ -6020,8 +6020,8 @@ template&lt;typename F , typename S &gt; </div>
6020
6020
 
6021
6021
  <p>Left binary shift of IntervalValues. </p>
6022
6022
 
6023
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00735">735</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
6024
- <div class="fragment"><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160;{</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="comment">//TODO: implement &gt;&gt;</span></div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() &amp;&amp; rhs.isTop())</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; IntervalValue shift = rhs;</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; shift.meet_with(IntervalValue(0, IntervalValue::plus_infinity()));</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">if</span> (shift.isBottom())</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keywordflow">if</span> (lhs.contains(0))</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; {</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; IntervalValue l(lhs.lb(), -1);</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; IntervalValue u(1, lhs.ub());</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; IntervalValue tmp = l &gt;&gt; rhs;</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; tmp.join_with(u &gt;&gt; rhs);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; tmp.join_with(IntervalValue(0));</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keywordflow">return</span> tmp;</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; }</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; {</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; NumericLiteral ll = lhs.lb() &gt;&gt; shift.lb();</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; NumericLiteral lu = lhs.lb() &gt;&gt; shift.ub();</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; NumericLiteral ul = lhs.ub() &gt;&gt; shift.lb();</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; NumericLiteral uu = lhs.ub() &gt;&gt; shift.ub();</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">return</span> IntervalValue(std::min({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}),</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; std::max({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}));</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; }</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; }</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160;}</div></div><!-- fragment -->
6023
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00740">740</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
6024
+ <div class="fragment"><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;{</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="comment">//TODO: implement &gt;&gt;</span></div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() &amp;&amp; rhs.isTop())</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; {</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; IntervalValue shift = rhs;</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; shift.meet_with(IntervalValue(0, IntervalValue::plus_infinity()));</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">if</span> (shift.isBottom())</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keywordflow">if</span> (lhs.contains(0))</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; {</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; IntervalValue l(lhs.lb(), -1);</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; IntervalValue u(1, lhs.ub());</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; IntervalValue tmp = l &gt;&gt; rhs;</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; tmp.join_with(u &gt;&gt; rhs);</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; tmp.join_with(IntervalValue(0));</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">return</span> tmp;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; }</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; {</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; NumericLiteral ll = lhs.lb() &gt;&gt; shift.lb();</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; NumericLiteral lu = lhs.lb() &gt;&gt; shift.ub();</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; NumericLiteral ul = lhs.ub() &gt;&gt; shift.lb();</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; NumericLiteral uu = lhs.ub() &gt;&gt; shift.ub();</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">return</span> IntervalValue(std::min({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}),</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; std::max({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}));</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; }</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; }</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;}</div></div><!-- fragment -->
6025
6025
  </div>
6026
6026
  </div>
6027
6027
  <a id="a8803e977797624599af5b0a84fe1de3d"></a>
@@ -6060,8 +6060,8 @@ template&lt;typename F , typename S &gt; </div>
6060
6060
 
6061
6061
  <p>Bitwise XOR of IntervalValues. </p>
6062
6062
 
6063
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00826">826</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
6064
- <div class="fragment"><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;{</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keyword">auto</span> next_power_of_2 = [](<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> num)</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; {</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordtype">int</span> i = 1;</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">while</span> ((num &gt;&gt; i) != 0)</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; {</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; ++i;</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; }</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="keywordflow">return</span> 1 &lt;&lt; i;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; };</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keywordflow">return</span> IntervalValue((<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)lhs.getNumeral() ^ (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)rhs.getNumeral());</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt;= 0 &amp;&amp; !lhs.ub().is_infinity() &amp;&amp;</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; rhs.lb().getNumeral() &gt;= 0 &amp;&amp; !rhs.ub().is_infinity())</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; {</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordtype">double</span> m = std::max(lhs.ub().getNumeral(), rhs.ub().getNumeral());</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordtype">double</span> ub = next_power_of_2(<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>(m+1));</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="keywordflow">return</span> IntervalValue(0.0, ub);</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; }</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; {</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; }</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
6063
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00831">831</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
6064
+ <div class="fragment"><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160;{</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="keyword">auto</span> next_power_of_2 = [](<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> num)</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; {</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="keywordtype">int</span> i = 1;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">while</span> ((num &gt;&gt; i) != 0)</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; {</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; ++i;</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; }</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keywordflow">return</span> 1 &lt;&lt; i;</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; };</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordflow">return</span> IntervalValue((<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)lhs.getNumeral() ^ (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)rhs.getNumeral());</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt;= 0 &amp;&amp; !lhs.ub().is_infinity() &amp;&amp;</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; rhs.lb().getNumeral() &gt;= 0 &amp;&amp; !rhs.ub().is_infinity())</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; {</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keywordtype">double</span> m = std::max(lhs.ub().getNumeral(), rhs.ub().getNumeral());</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordtype">double</span> ub = next_power_of_2(<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>(m+1));</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <span class="keywordflow">return</span> IntervalValue(0.0, ub);</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; }</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; {</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; }</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
6065
6065
  <div class="ttc" id="namespaceSVF_html_ad781b0b14e89773e774072b280658ef3"><div class="ttname"><a href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">SVF::s64_t</a></div><div class="ttdeci">signed long long s64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00053">SVFType.h:53</a></div></div>
6066
6066
  </div><!-- fragment -->
6067
6067
  </div>
@@ -6134,8 +6134,8 @@ template&lt;typename F , typename S &gt; </div>
6134
6134
 
6135
6135
  <p>Bitwise OR of IntervalValues. </p>
6136
6136
 
6137
- <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00797">797</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
6138
- <div class="fragment"><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;{</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keyword">auto</span> next_power_of_2 = [](<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> num)</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; {</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keywordtype">int</span> i = 1;</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keywordflow">while</span> ((num &gt;&gt; i) != 0)</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; {</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; ++i;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; }</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">return</span> 1 &lt;&lt; i;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; };</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordflow">return</span> IntervalValue((<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)lhs.getNumeral() | (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)rhs.getNumeral());</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt;= 0 &amp;&amp; !lhs.ub().is_infinity() &amp;&amp;</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; rhs.lb().getNumeral() &gt;= 0 &amp;&amp; !rhs.ub().is_infinity())</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; {</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordtype">double</span> m = std::max(lhs.ub().getNumeral(), rhs.ub().getNumeral());</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordtype">double</span> ub = next_power_of_2(<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>(m+1));</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordflow">return</span> IntervalValue(0.0, ub);</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; }</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; {</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; }</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
6137
+ <p class="definition">Definition at line <a class="el" href="IntervalValue_8h_source.html#l00802">802</a> of file <a class="el" href="IntervalValue_8h_source.html">IntervalValue.h</a>.</p>
6138
+ <div class="fragment"><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;{</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keyword">auto</span> next_power_of_2 = [](<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> num)</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; {</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordtype">int</span> i = 1;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">while</span> ((num &gt;&gt; i) != 0)</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; {</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; ++i;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; }</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordflow">return</span> 1 &lt;&lt; i;</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; };</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.is_numeral() &amp;&amp; rhs.is_numeral())</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">return</span> IntervalValue((<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)lhs.getNumeral() | (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)rhs.getNumeral());</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() &gt;= 0 &amp;&amp; !lhs.ub().is_infinity() &amp;&amp;</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; rhs.lb().getNumeral() &gt;= 0 &amp;&amp; !rhs.ub().is_infinity())</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; {</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordtype">double</span> m = std::max(lhs.ub().getNumeral(), rhs.ub().getNumeral());</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="keywordtype">double</span> ub = next_power_of_2(<a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a>(m+1));</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keywordflow">return</span> IntervalValue(0.0, ub);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; }</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; {</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; }</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
6139
6139
  <div class="ttc" id="namespaceSVF_html_ad781b0b14e89773e774072b280658ef3"><div class="ttname"><a href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">SVF::s64_t</a></div><div class="ttdeci">signed long long s64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00053">SVFType.h:53</a></div></div>
6140
6140
  </div><!-- fragment -->
6141
6141
  </div>