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.
- package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +19 -19
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +52 -52
- package/SVF-doxygen/html/html/IntervalValue_8h_source.html +17 -15
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PointsTo_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +22 -22
- package/SVF-doxygen/html/html/SVFG_8h_source.html +37 -36
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFValue_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +3 -3
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/WTO_8h_source.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +83 -83
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI_1_1Operation.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1IntervalValue-members.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1IntervalValue.html +32 -0
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +96 -95
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +157 -121
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +116 -115
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +13 -10
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +2 -2
- package/SVF-doxygen/html/html/fastcluster__dm_8cpp_8inc_source.html +1 -1
- package/SVF-doxygen/html/html/functions_c.html +6 -6
- package/SVF-doxygen/html/html/functions_func_h.html +7 -4
- package/SVF-doxygen/html/html/functions_func_i.html +2 -2
- package/SVF-doxygen/html/html/functions_func_t.html +1 -0
- package/SVF-doxygen/html/html/functions_h.html +5 -2
- package/SVF-doxygen/html/html/functions_i.html +4 -4
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_o.html +3 -3
- package/SVF-doxygen/html/html/functions_p.html +9 -15
- package/SVF-doxygen/html/html/functions_s.html +15 -13
- package/SVF-doxygen/html/html/functions_t.html +7 -6
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/namespaceSVF.html +30 -30
- package/SVF-doxygen/html/html/search/all_10.js +5 -5
- package/SVF-doxygen/html/html/search/all_11.js +2 -2
- package/SVF-doxygen/html/html/search/all_12.js +8 -8
- package/SVF-doxygen/html/html/search/all_13.js +5 -5
- package/SVF-doxygen/html/html/search/all_15.js +2 -2
- package/SVF-doxygen/html/html/search/all_16.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +2 -2
- package/SVF-doxygen/html/html/search/all_7.js +1 -1
- package/SVF-doxygen/html/html/search/all_8.js +1 -0
- package/SVF-doxygen/html/html/search/all_9.js +3 -3
- package/SVF-doxygen/html/html/search/all_b.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +1 -1
- package/SVF-doxygen/html/html/search/all_f.js +1 -1
- package/SVF-doxygen/html/html/search/functions_11.js +1 -1
- package/SVF-doxygen/html/html/search/functions_12.js +1 -1
- package/SVF-doxygen/html/html/search/functions_7.js +1 -0
- package/SVF-doxygen/html/html/search/functions_8.js +1 -1
- package/SVF-doxygen/html/html/search/variables_13.js +3 -3
- package/SVF-doxygen/html/html/search/variables_7.js +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1SVFG_01_5_01_4.html +2 -2
- package/include/AbstractExecution/IntervalValue.h +5 -0
- package/include/Graphs/SVFG.h +6 -0
- package/include/Util/ExtAPI.h +65 -40
- package/package.json +1 -1
|
@@ -5277,8 +5277,8 @@ template<class GraphType > </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#
|
|
5281
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.is_numeral() && rhs.is_numeral())</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  {</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <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="l00782"></a><span class="lineno"> 782</span>  }</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() >= 0 && rhs.lb().getNumeral() >= 0)</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  {</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <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>  }</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() >= 0)</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  {</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <span class="keywordflow">return</span> IntervalValue(0.0, lhs.ub().getNumeral());</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  }</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs.lb().getNumeral() >= 0)</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  {</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <span class="keywordflow">return</span> IntervalValue(0.0, rhs.ub().getNumeral());</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  }</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  {</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  }</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span> }</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<unsigned ElementSize> </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#
|
|
5362
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  }</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <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>  {</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <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>  }</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.is_numeral() && rhs.is_numeral())</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  {</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <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>  }</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  {</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <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>  <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>  <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> </div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keywordflow">if</span> (lhs.lb().getNumeral() < 0)</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  {</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">if</span> (lhs.ub().getNumeral() > 0)</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  {</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">return</span> IntervalValue(-ub, ub);</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  }</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <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>  }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <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>  }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  }</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> }</div></div><!-- fragment -->
|
|
5363
5363
|
</div>
|
|
5364
5364
|
</div>
|
|
5365
5365
|
<a id="a9d6c986a34096a3552a6385ccbb724e4"></a>
|
|
@@ -5478,8 +5478,8 @@ template<unsigned ElementSize> </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#
|
|
5482
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  }</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  NumericLiteral ll = lhs.lb() * rhs.lb();</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  NumericLiteral lu = lhs.lb() * rhs.ub();</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  NumericLiteral ul = lhs.ub() * rhs.lb();</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  NumericLiteral uu = lhs.ub() * rhs.ub();</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <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>  std::max({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}));</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> }</div></div><!-- fragment -->
|
|
5483
5483
|
</div>
|
|
5484
5484
|
</div>
|
|
5485
5485
|
<a id="ad9d56b31ab074c813b48da4c2e0742aa"></a>
|
|
@@ -5518,8 +5518,8 @@ template<unsigned ElementSize> </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#
|
|
5522
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  }</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <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>  {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  {</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <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>  }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> }</div></div><!-- fragment -->
|
|
5523
5523
|
</div>
|
|
5524
5524
|
</div>
|
|
5525
5525
|
<a id="a6c2f7ce4908d39a17b29830a2e4bd781"></a>
|
|
@@ -5590,8 +5590,8 @@ template<unsigned ElementSize> </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#
|
|
5594
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  {</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <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>  {</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <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>  }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> }</div></div><!-- fragment -->
|
|
5595
5595
|
</div>
|
|
5596
5596
|
</div>
|
|
5597
5597
|
<a id="a1b6662f895cfd942996ac4d578960eed"></a>
|
|
@@ -5670,8 +5670,8 @@ template<unsigned ElementSize> </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#
|
|
5674
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  }</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <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>  {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <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>  }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <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>  NumericLiteral ll = lhs.lb() / rhs.lb();</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  NumericLiteral lu = lhs.lb() / rhs.ub();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  NumericLiteral ul = lhs.ub() / rhs.lb();</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  NumericLiteral uu = lhs.ub() / rhs.ub();</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <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>  std::max({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}));</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  }</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> }</div></div><!-- fragment -->
|
|
5675
5675
|
</div>
|
|
5676
5676
|
</div>
|
|
5677
5677
|
<a id="adeb418bb692b6b0c3498a24927e1068b"></a>
|
|
@@ -5710,8 +5710,8 @@ template<unsigned ElementSize> </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#
|
|
5714
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  }</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <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>  {</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  }</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  {</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keywordflow">if</span> (lhs.is_numeral() && rhs.is_numeral())</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  {</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <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>  }</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  {</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="comment">// lhs [1,2] rhs [3,4]</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordflow">if</span> (lhs.ub().getNumeral() < rhs.lb().getNumeral())</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="comment">// lhs [3,4] rhs [1,2]</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() > rhs.ub().getNumeral())</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  {</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">return</span> IntervalValue(0, 0);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="comment">// lhs [1,3] rhs [2,4]</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  }</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  {</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keywordflow">return</span> IntervalValue(0, 1);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  }</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  }</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> }</div></div><!-- fragment -->
|
|
5715
5715
|
</div>
|
|
5716
5716
|
</div>
|
|
5717
5717
|
<a id="af95793adab8fb9aa19e19027e73372a6"></a>
|
|
@@ -5750,8 +5750,8 @@ template<unsigned ElementSize> </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#
|
|
5754
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="comment">//TODO: implement <<</span></div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="keywordflow">if</span> (lhs.isTop() && rhs.isTop())</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  {</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  IntervalValue shift = rhs;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  shift.meet_with(IntervalValue(0, IntervalValue::plus_infinity()));</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="keywordflow">if</span> (shift.isBottom())</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  IntervalValue coeff(1 << (<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>  shift.ub().is_infinity() ? IntervalValue::plus_infinity() : 1</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  << (<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>  <span class="keywordflow">return</span> lhs * coeff;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  }</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span> }</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<unsigned ElementSize> </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#
|
|
5832
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  IntervalValue.dump(o);</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="keywordflow">return</span> o;</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span> }</div></div><!-- fragment -->
|
|
5833
5833
|
</div>
|
|
5834
5834
|
</div>
|
|
5835
5835
|
<a id="af83f5c5c68cdb80576cdc1d62c01b207"></a>
|
|
@@ -5900,8 +5900,8 @@ template<typename F , typename S > </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#
|
|
5904
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  {</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <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>  {</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  {</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keywordflow">if</span> (lhs.is_numeral() && rhs.is_numeral())</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  {</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <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>  }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  {</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="comment">// lhs [1,2] rhs [2,3]</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keywordflow">if</span> (lhs.ub().getNumeral() <= rhs.lb().getNumeral())</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  {</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="comment">// lhs [3,4] rhs[1,2]</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  }</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() > rhs.ub().getNumeral())</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  {</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="keywordflow">return</span> IntervalValue(0, 0);</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="comment">// lhs [1,3] rhs [2,4]</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  {</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <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>  <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>  }</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  }</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> }</div></div><!-- fragment -->
|
|
5905
5905
|
</div>
|
|
5906
5906
|
</div>
|
|
5907
5907
|
<a id="aedd9d023a68dddd66314be63bb8e48d2"></a>
|
|
@@ -5940,8 +5940,8 @@ template<typename F , typename S > </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#
|
|
5944
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  }</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <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>  {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  }</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">if</span> (lhs.is_numeral() && rhs.is_numeral())</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  {</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <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>  }</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="comment">// lhs[3,4] rhs[1,2]</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="keywordflow">if</span> (lhs.lb().getNumeral() > rhs.ub().getNumeral())</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="comment">// lhs[1,2] rhs[3,4]</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.ub().getNumeral() < rhs.lb().getNumeral())</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  {</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="keywordflow">return</span> IntervalValue(0, 0);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  }</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  {</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="comment">// lhs[1,3] rhs[2,4]</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordflow">return</span> IntervalValue(0, 1);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  }</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> }</div></div><!-- fragment -->
|
|
5945
5945
|
</div>
|
|
5946
5946
|
</div>
|
|
5947
5947
|
<a id="a08938c05911dac4ebd102adfafd14d24"></a>
|
|
@@ -5980,8 +5980,8 @@ template<typename F , typename S > </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#
|
|
5984
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  {</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  }</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <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>  {</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  }</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  {</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <span class="keywordflow">if</span> (lhs.is_numeral() && rhs.is_numeral())</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  {</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <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>  }</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  {</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="comment">// lhs [2,3] rhs [1,2]</span></div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keywordflow">if</span> (lhs.lb().getNumeral() >= rhs.ub().getNumeral())</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordflow">return</span> IntervalValue(1, 1);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="comment">// lhs [1,2] rhs[3,4]</span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.ub().getNumeral() < rhs.lb().getNumeral())</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">return</span> IntervalValue(0, 0);</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <span class="comment">// lhs [1,3] rhs [2,4]</span></div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  }</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  {</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <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>  <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>  }</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  }</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span> }</div></div><!-- fragment -->
|
|
5985
5985
|
</div>
|
|
5986
5986
|
</div>
|
|
5987
5987
|
<a id="a4b2b5d8755b9f0c4f82a9f82b4631fee"></a>
|
|
@@ -6020,8 +6020,8 @@ template<typename F , typename S > </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#
|
|
6024
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <span class="comment">//TODO: implement >></span></div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.isTop() && rhs.isTop())</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  {</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  IntervalValue shift = rhs;</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  shift.meet_with(IntervalValue(0, IntervalValue::plus_infinity()));</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keywordflow">if</span> (shift.isBottom())</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">if</span> (lhs.contains(0))</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  {</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  IntervalValue l(lhs.lb(), -1);</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  IntervalValue u(1, lhs.ub());</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  IntervalValue tmp = l >> rhs;</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  tmp.join_with(u >> rhs);</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  tmp.join_with(IntervalValue(0));</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">return</span> tmp;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  }</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  {</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  NumericLiteral ll = lhs.lb() >> shift.lb();</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  NumericLiteral lu = lhs.lb() >> shift.ub();</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  NumericLiteral ul = lhs.ub() >> shift.lb();</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  NumericLiteral uu = lhs.ub() >> shift.ub();</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <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>  std::max({ll.getNumeral(), lu.getNumeral(), ul.getNumeral(), uu.getNumeral()}));</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  }</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  }</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span> }</div></div><!-- fragment -->
|
|
6025
6025
|
</div>
|
|
6026
6026
|
</div>
|
|
6027
6027
|
<a id="a8803e977797624599af5b0a84fe1de3d"></a>
|
|
@@ -6060,8 +6060,8 @@ template<typename F , typename S > </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#
|
|
6064
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <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>  {</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <span class="keywordtype">int</span> i = 1;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="keywordflow">while</span> ((num >> i) != 0)</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  {</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  ++i;</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  }</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="keywordflow">return</span> 1 << i;</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  };</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.is_numeral() && rhs.is_numeral())</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() >= 0 && !lhs.ub().is_infinity() &&</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  rhs.lb().getNumeral() >= 0 && !rhs.ub().is_infinity())</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  {</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <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>  <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>  <span class="keywordflow">return</span> IntervalValue(0.0, ub);</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  }</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  {</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  }</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span> }</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<typename F , typename S > </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#
|
|
6138
|
-
<div class="fragment"><div class="line"><a name="
|
|
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> {</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <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>  {</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordtype">int</span> i = 1;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordflow">while</span> ((num >> i) != 0)</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  {</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  ++i;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  }</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <span class="keywordflow">return</span> 1 << i;</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  };</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="keywordflow">if</span> (lhs.isBottom() || rhs.isBottom())</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="keywordflow">return</span> IntervalValue::bottom();</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.is_numeral() && rhs.is_numeral())</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs.lb().getNumeral() >= 0 && !lhs.ub().is_infinity() &&</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  rhs.lb().getNumeral() >= 0 && !rhs.ub().is_infinity())</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  {</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <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>  <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>  <span class="keywordflow">return</span> IntervalValue(0.0, ub);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  }</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  {</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="keywordflow">return</span> IntervalValue::top();</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  }</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span> }</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>
|