svf-tools 1.0.623 → 1.0.624

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.
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">PointsTo.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="PointsTo_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- PointsTo.cpp -- Wrapper of set-like data structures ------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * PointsTo.cpp</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * Abstracts away data structures to be used as points-to sets (implementation).</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * Created on: Feb 01, 2021</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Author: Mohamad Barbar</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;new&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>&quot;</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFValue_8h.html">SVFIR/SVFValue.h</a>&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> <a class="code" href="classSVF_1_1PointsTo.html#a98781dd444ada40af7eef9aefe76123d">PointsTo::currentBestNodeMapping</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> <a class="code" href="classSVF_1_1PointsTo.html#a53e1230c87912d26604990eb8b0cbc0c">PointsTo::currentBestReverseNodeMapping</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#aca4e7e88f2e1ec87a9576cc6c866adde"> 25</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#aca4e7e88f2e1ec87a9576cc6c866adde">PointsTo::PointsTo</a>()</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; : <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>(<a class="code" href="classSVF_1_1Options.html">Options</a>::PtType()), nodeMapping(currentBestNodeMapping),</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; reverseNodeMapping(currentBestReverseNodeMapping)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>) <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector&lt;&gt;</a>();</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>) <a class="code" href="classSVF_1_1CoreBitVector.html">CoreBitVector</a>();</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>) <a class="code" href="classSVF_1_1BitVector.html">BitVector</a>();</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::PointsTo: unknown type&quot;</span>);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;}</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#acef2d3e41263aef641c3411e28ad445c"> 35</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#aca4e7e88f2e1ec87a9576cc6c866adde">PointsTo::PointsTo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pt)</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; : <a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a>(pt.<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a>), <a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a>(pt.<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a>),</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a>(pt.<a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a>)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;{</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>) <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector&lt;&gt;</a>(pt.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>) <a class="code" href="classSVF_1_1CoreBitVector.html">CoreBitVector</a>(pt.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>) <a class="code" href="classSVF_1_1BitVector.html">BitVector</a>(pt.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::PointsTo&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;}</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a57e22bb2a181ccb56908130204d801a2"> 45</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#aca4e7e88f2e1ec87a9576cc6c866adde">PointsTo::PointsTo</a>(<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;&amp;pt)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;noexcept : <a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a>(pt.type), <a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(pt.nodeMapping)),</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(pt.reverseNodeMapping))</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>) <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector&lt;&gt;</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(pt.sbv));</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>) <a class="code" href="classSVF_1_1CoreBitVector.html">CoreBitVector</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(pt.cbv));</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>) <a class="code" href="classSVF_1_1BitVector.html">BitVector</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(pt.bv));</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::PointsTo&amp;&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a21bc5e2236fdd3cb8c185d8eb142fdac"> 55</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#a21bc5e2236fdd3cb8c185d8eb142fdac">PointsTo::~PointsTo</a>()</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;{</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.~SparseBitVector&lt;&gt;();</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.~CoreBitVector();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.~BitVector();</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::~PointsTo: unknown type&quot;</span>);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a269d334618e4acc7e739317fd58d7fe7"> 66</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;<a class="code" href="classSVF_1_1PointsTo.html#a269d334618e4acc7e739317fd58d7fe7">PointsTo::operator=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">this</span> == &amp;rhs)</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> = rhs.<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> = rhs.<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a> = rhs.<a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// Placement new because if type has changed, we have</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// not constructed the new type yet.</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>) <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector&lt;&gt;</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>) <a class="code" href="classSVF_1_1CoreBitVector.html">CoreBitVector</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>) <a class="code" href="classSVF_1_1BitVector.html">BitVector</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::PointsTo=&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a615411a2d8909668271782398814bc9f"> 83</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;<a class="code" href="classSVF_1_1PointsTo.html#a269d334618e4acc7e739317fd58d7fe7">PointsTo::operator=</a>(<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;&amp;rhs)</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;noexcept</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;{</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> = rhs.type;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> = rhs.nodeMapping;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a> = rhs.reverseNodeMapping;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// See comment in copy assignment.</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>) <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector&lt;&gt;</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(rhs.sbv));</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>) <a class="code" href="classSVF_1_1CoreBitVector.html">CoreBitVector</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(rhs.cbv));</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>) <a class="code" href="classSVF_1_1BitVector.html">BitVector</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(rhs.bv));</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::PointsTo=&amp;&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;}</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8"> 98</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8">PointsTo::empty</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a98b9795b4fdc74d9d2efa9a3f2ecb62f">empty</a>();</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#aea5389ad7e5fe4c8bef686940a1a6056">empty</a>();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a98b9795b4fdc74d9d2efa9a3f2ecb62f">empty</a>();</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::empty: unknown type&quot;</span>);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; abort();</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;}</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#aa0d4ee196b91fce626f3f15bcc5599e4"> 111</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1PointsTo.html#aa0d4ee196b91fce626f3f15bcc5599e4">PointsTo::count</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#abfed2e7daf2407e11cade625ac19a6ce">count</a>();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a9f96e6a886fa69e07cda5dbfaed8b7c9">count</a>();</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#abfed2e7daf2407e11cade625ac19a6ce">count</a>();</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::count: unknown type&quot;</span>);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; abort();</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;}</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a14ce3ef70959f10e777e1090fd697116"> 123</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointsTo.html#a14ce3ef70959f10e777e1090fd697116">PointsTo::clear</a>()</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;{</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a1e523bab1013a9f3e9eaea56e53afa58">clear</a>();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a5afe3e74412a1f3f728d7e0eaae70c13">clear</a>();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a1e523bab1013a9f3e9eaea56e53afa58">clear</a>();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::clear: unknown type&quot;</span>);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;}</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f"> 131</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">PointsTo::test</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)<span class="keyword"> const</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; n = <a class="code" href="classSVF_1_1PointsTo.html#aeda7466cdd9f77978981e2a518baa863">getInternalNode</a>(n);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a7b20ffd3cd4a0ffc48a1348f657deaa0">test</a>(n);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">test</a>(n);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a7b20ffd3cd4a0ffc48a1348f657deaa0">test</a>(n);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::test: unknown type&quot;</span>);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; abort();</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;}</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a1161d97df5ffc8f11d1a34df9a4d5bdf"> 144</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a1161d97df5ffc8f11d1a34df9a4d5bdf">PointsTo::test_and_set</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;{</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; n = <a class="code" href="classSVF_1_1PointsTo.html#aeda7466cdd9f77978981e2a518baa863">getInternalNode</a>(n);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a3299b296d20d2b76c6538ba51a684972">test_and_set</a>(n);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a355247d17d1c17b857b4ee572e19b91f">test_and_set</a>(n);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a3299b296d20d2b76c6538ba51a684972">test_and_set</a>(n);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::test_and_set: unknown type&quot;</span>);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; abort();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;}</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa"> 157</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">PointsTo::set</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;{</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; n = <a class="code" href="classSVF_1_1PointsTo.html#aeda7466cdd9f77978981e2a518baa863">getInternalNode</a>(n);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a553e3e51bffe1aab04adc047e0fd3f24">set</a>(n);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(n);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a553e3e51bffe1aab04adc047e0fd3f24">set</a>(n);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::set: unknown type&quot;</span>);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a1ef805e714cfc29f0f3fa56c5ee964f6"> 166</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointsTo.html#a1ef805e714cfc29f0f3fa56c5ee964f6">PointsTo::reset</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; n = <a class="code" href="classSVF_1_1PointsTo.html#aeda7466cdd9f77978981e2a518baa863">getInternalNode</a>(n);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a42fc777d574db4ef23b02308b944a85b">reset</a>(n);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#ad5337b5aeed50f8b7ffd56b14ee25c9f">reset</a>(n);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a42fc777d574db4ef23b02308b944a85b">reset</a>(n);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::reset: unknown type&quot;</span>);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;}</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#ab31a53693fe070767b8de74e88091cd8"> 175</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#ab31a53693fe070767b8de74e88091cd8">PointsTo::contains</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::contains: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#af08c16aed45dfa65472f0b5ae518add2">contains</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#abbd0e0cf759fad7858224ed8a63aade8">contains</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#af08c16aed45dfa65472f0b5ae518add2">contains</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::contains: unknown type&quot;</span>);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; abort();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;}</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d"> 189</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">PointsTo::intersects</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersects: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a15be4ce7e9a07d9b01da0c60d51b22de">intersects</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a16756e0545fd3d50ab89f45a2e83bb79">intersects</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a15be4ce7e9a07d9b01da0c60d51b22de">intersects</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersects: unknown type&quot;</span>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; abort();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;}</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a17c66a466bbea93598bca73d82c95479"> 203</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classSVF_1_1PointsTo.html#a17c66a466bbea93598bca73d82c95479">PointsTo::find_first</a>()</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;{</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aa0d4ee196b91fce626f3f15bcc5599e4">count</a>() == 0) <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">return</span> *<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>();</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;}</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a6b29626e4e4298943d2ad839f06db83e"> 209</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a6b29626e4e4298943d2ad839f06db83e">PointsTo::operator==</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::==: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a> == rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a> == rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a> == rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; {</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::==: unknown type&quot;</span>);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; abort();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;}</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a888f05fe8da4b95c44226f3c69469c75"> 223</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a888f05fe8da4b95c44226f3c69469c75">PointsTo::operator!=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">// TODO: we&#39;re asserting and checking twice... should be okay...</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::!=: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == rhs);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;}</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#aa8644057ec182382e3c34e90d7d61ade"> 231</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#aa8644057ec182382e3c34e90d7d61ade">PointsTo::operator|=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;{</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::|=: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a> |= rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a> |= rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a> |= rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::|=: unknown type&quot;</span>);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; abort();</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;}</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a687b34cac3c43dd957b86a4833a24871"> 245</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#aa8644057ec182382e3c34e90d7d61ade">PointsTo::operator|=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> &amp;rhs)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;{</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// TODO:</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> : rhs)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">if</span> (changed) <span class="keyword">set</span>(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">else</span> changed = <a class="code" href="classSVF_1_1PointsTo.html#a1161d97df5ffc8f11d1a34df9a4d5bdf">test_and_set</a>(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;}</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a164aced0d6a19dd7ba8124ec2e77674c">PointsTo::operator&amp;=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;{</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::&amp;=: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a> &amp;= rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a> &amp;= rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a> &amp;= rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::&amp;=: unknown type&quot;</span>);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; abort();</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;}</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a21244b7b04d6aa01787a11d116bc9952"> 272</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a21244b7b04d6aa01787a11d116bc9952">PointsTo::operator-=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;{</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::-=: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a8ba857b68282055e485c441892e39b9b">intersectWithComplement</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a8b481ef53a27a351affecab90310b1ef">intersectWithComplement</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a8ba857b68282055e485c441892e39b9b">intersectWithComplement</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::-=: unknown type&quot;</span>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; abort();</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;}</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#af81f9e91eec4bf82ccfb867c2415f9bd"> 286</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#af81f9e91eec4bf82ccfb867c2415f9bd">PointsTo::intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;{</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersectWithComplement: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a8ba857b68282055e485c441892e39b9b">intersectWithComplement</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a8b481ef53a27a351affecab90310b1ef">intersectWithComplement</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a8ba857b68282055e485c441892e39b9b">intersectWithComplement</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersectWithComplement(PT): unknown type&quot;</span>);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; abort();</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;}</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;</div><div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#adec2e2fc87c2bb9b3ff8873b04abf31d"> 298</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointsTo.html#af81f9e91eec4bf82ccfb867c2415f9bd">PointsTo::intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;lhs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;{</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersectWithComplement: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(lhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersectWithComplement: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a8ba857b68282055e485c441892e39b9b">intersectWithComplement</a>(lhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>, rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a8b481ef53a27a351affecab90310b1ef">intersectWithComplement</a>(lhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>, rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a8ba857b68282055e485c441892e39b9b">intersectWithComplement</a>(lhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>, rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersectWithComplement(PT, PT): unknown type&quot;</span>);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; abort();</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;}</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div><div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#ad1d19d52800341484a136c6d5e0112ea"> 313</a></span>&#160;<a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1PointsTo.html#ad1d19d52800341484a136c6d5e0112ea">PointsTo::toNodeBS</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nbs;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> o : *<span class="keyword">this</span>) nbs.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(o);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> nbs;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;}</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a32b52339998976ec5bdd9f2cc7ed9e3f"> 320</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classSVF_1_1PointsTo.html#a32b52339998976ec5bdd9f2cc7ed9e3f">PointsTo::hash</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#af979ecb48d3d5296bce5bd0b4676e359">hash</a>();</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>)</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; std::hash&lt;SparseBitVector&lt;&gt;&gt; h;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">return</span> h(<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#af979ecb48d3d5296bce5bd0b4676e359">hash</a>();</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::hash: unknown type&quot;</span>);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; abort();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;}</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a5fd783872908d85e9192f4348ac0b493"> 337</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> <a class="code" href="classSVF_1_1PointsTo.html#a5fd783872908d85e9192f4348ac0b493">PointsTo::getNodeMapping</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a>;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;}</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#aeda7466cdd9f77978981e2a518baa863"> 342</a></span>&#160;<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="classSVF_1_1PointsTo.html#aeda7466cdd9f77978981e2a518baa863">PointsTo::getInternalNode</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)<span class="keyword"> const</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> == <span class="keyword">nullptr</span>) <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; assert(n &lt; nodeMapping-&gt;size());</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a>-&gt;at(n);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;}</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a80a3caf74c138b3833c79622fef7b626"> 349</a></span>&#160;<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="classSVF_1_1PointsTo.html#a80a3caf74c138b3833c79622fef7b626">PointsTo::getExternalNode</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)<span class="keyword"> const</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a> == <span class="keyword">nullptr</span>) <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; assert(n &lt; reverseNodeMapping-&gt;size());</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a>-&gt;at(n);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;}</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec"> 356</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">PointsTo::metaSame</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pt)<span class="keyword"> const</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> == pt.<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> &amp;&amp; <a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a> == pt.<a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a>;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;}</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;</div><div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#ae349a9ce6a8739925baffd83d1878b0e"> 361</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> <a class="code" href="classSVF_1_1PointsTo.html#ae349a9ce6a8739925baffd83d1878b0e">PointsTo::getCurrentBestNodeMapping</a>()</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;{</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a98781dd444ada40af7eef9aefe76123d">currentBestNodeMapping</a>;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;}</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a19b84abf5e9c85e82ae18b77083467e9"> 366</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> <a class="code" href="classSVF_1_1PointsTo.html#a19b84abf5e9c85e82ae18b77083467e9">PointsTo::getCurrentBestReverseNodeMapping</a>()</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;{</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a53e1230c87912d26604990eb8b0cbc0c">currentBestReverseNodeMapping</a>;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;}</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;</div><div class="line"><a name="l00371"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a84eca4c7fc833f8ca4d119cd4da08ca8"> 371</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointsTo.html#a84eca4c7fc833f8ca4d119cd4da08ca8">PointsTo::setCurrentBestNodeMapping</a>(<a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">MappingPtr</a> newCurrentBestNodeMapping,</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">MappingPtr</a> newCurrentBestReverseNodeMapping)</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;{</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a98781dd444ada40af7eef9aefe76123d">currentBestNodeMapping</a> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(newCurrentBestNodeMapping);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a53e1230c87912d26604990eb8b0cbc0c">currentBestReverseNodeMapping</a> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(newCurrentBestReverseNodeMapping);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;}</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a731a028a2a4ed30e86992652ad71a63f"> 378</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointsTo.html#a731a028a2a4ed30e86992652ad71a63f">PointsTo::checkAndRemap</a>()</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;{</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> != <a class="code" href="classSVF_1_1PointsTo.html#a98781dd444ada40af7eef9aefe76123d">currentBestNodeMapping</a>)</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">// newPt constructed with correct node mapping.</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> newPt;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> o : *<span class="keyword">this</span>) newPt.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; *<span class="keyword">this</span> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(newPt);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; }</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;}</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#ad9efcd9fb0c8201b9166a1560d06a71b"> 389</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#abd2c3366cbb4f24b2e0bc30ea282b752">PointsTo::PointsToIterator::PointsToIterator</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> *pt, <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>)</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; : pt(pt)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;{</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">if</span> (pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::CBV)</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector_1_1CoreBitVectorIterator.html">CoreBitVector::iterator</a>(end ? pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a93cdd9890522cc9fee2451567e0b1f0d">end</a>() : pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a835bf11a1f698942db8e6bdadbbfd1f3">begin</a>());</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; }</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::SBV)</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>) <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVector&lt;&gt;::iterator</a>(end ? pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>() : pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>());</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::BV)</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector.html#a624ebc80d138fbf2b015bf557d2891a6">BitVector::iterator</a>(end ? pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a93cdd9890522cc9fee2451567e0b1f0d">end</a>() : pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a835bf11a1f698942db8e6bdadbbfd1f3">begin</a>());</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::PointsToIterator: unknown type&quot;</span>);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; abort();</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;}</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a19f371ccb5b1c84fb4adfd5b0c8a3eec"> 411</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#abd2c3366cbb4f24b2e0bc30ea282b752">PointsTo::PointsToIterator::PointsToIterator</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> &amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; : pt(pt.pt)</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;{</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">if</span> (this-&gt;pt-&gt;type == PointsTo::Type::SBV)</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; {</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>) <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVector&lt;&gt;::iterator</a>(pt.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this-&gt;pt-&gt;type == PointsTo::Type::CBV)</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; {</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector_1_1CoreBitVectorIterator.html">CoreBitVector::iterator</a>(pt.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this-&gt;pt-&gt;type == PointsTo::Type::BV)</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector.html#a624ebc80d138fbf2b015bf557d2891a6">BitVector::iterator</a>(pt.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::PointsToIterator&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; abort();</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;}</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;</div><div class="line"><a name="l00433"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a1a0dac39cfd8321d8b24502e6a6068f7"> 433</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#abd2c3366cbb4f24b2e0bc30ea282b752">PointsTo::PointsToIterator::PointsToIterator</a>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> &amp;&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>)</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;noexcept : <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>.pt)</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;{</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::SBV)</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>) <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVector&lt;&gt;::iterator</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>.sbvIt));</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::CBV)</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector_1_1CoreBitVectorIterator.html">CoreBitVector::iterator</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>.cbvIt));</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; }</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::BV)</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; {</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector.html#a624ebc80d138fbf2b015bf557d2891a6">BitVector::iterator</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>.bvIt));</div><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">else</span></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; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::PointsToIterator&amp;&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; abort();</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;}</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"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#acbbcff746f7f0dc37815e688e9172f21"> 455</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::PointsToIterator</a> &amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#acbbcff746f7f0dc37815e688e9172f21">PointsTo::PointsToIterator::operator=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> &amp;rhs)</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;{</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a> = rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::SBV)</div><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="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>) <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVector&lt;&gt;::iterator</a>(rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>);</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">else</span> <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::CBV)</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="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector_1_1CoreBitVectorIterator.html">CoreBitVector::iterator</a>(rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>);</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">else</span> <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::BV)</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="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector.html#a624ebc80d138fbf2b015bf557d2891a6">BitVector::iterator</a>(rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>);</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">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::PointsToIterator&amp;: unknown type&quot;</span>);</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; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;}</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"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a16f92fffe8aba3ba9bd80a880e93b056"> 476</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::PointsToIterator</a> &amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#acbbcff746f7f0dc37815e688e9172f21">PointsTo::PointsToIterator::operator=</a>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> &amp;&amp;rhs)</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; this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a> = rhs.pt;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::SBV)</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>) <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVector&lt;&gt;::iterator</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(rhs.sbvIt));</div><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">else</span> <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::CBV)</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="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector_1_1CoreBitVectorIterator.html">CoreBitVector::iterator</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(rhs.cbvIt));</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> <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::BV)</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; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector.html#a624ebc80d138fbf2b015bf557d2891a6">BitVector::iterator</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(rhs.bvIt));</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; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::PointsToIterator&amp;&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;}</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"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#ac426e75680a2dce9c9185e83af749d51"> 497</a></span>&#160;<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::PointsToIterator</a> &amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#ac426e75680a2dce9c9185e83af749d51">PointsTo::PointsToIterator::operator++</a>()</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;{</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; assert(!<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aea5c1fe642e6cc0ac3243f8a7b3fe613">atEnd</a>() &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::++(pre): incrementing past end!&quot;</span>);</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::CBV) ++<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::SBV) ++<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::BV) ++<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::++(void): unknown type&quot;</span>);</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> *<span class="keyword">this</span>;</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;</div><div class="line"><a name="l00508"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a94a195a13777028d5af16985e3fd5b73"> 508</a></span>&#160;<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::PointsToIterator</a> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#ac426e75680a2dce9c9185e83af749d51">PointsTo::PointsToIterator::operator++</a>(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;{</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; assert(!<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aea5c1fe642e6cc0ac3243f8a7b3fe613">atEnd</a>() &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::++(pre): incrementing past end!&quot;</span>);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> old = *<span class="keyword">this</span>;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; ++*<span class="keyword">this</span>;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">return</span> old;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;}</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"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a0fc3ebfd1990d09cc1b7c26bd94fb57a"> 516</a></span>&#160;<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a0fc3ebfd1990d09cc1b7c26bd94fb57a">PointsTo::PointsToIterator::operator*</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; assert(!<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aea5c1fe642e6cc0ac3243f8a7b3fe613">atEnd</a>() &amp;&amp; <span class="stringliteral">&quot;PointsToIterator: dereferencing end!&quot;</span>);</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::CBV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a80a3caf74c138b3833c79622fef7b626">getExternalNode</a>(*<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::SBV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a80a3caf74c138b3833c79622fef7b626">getExternalNode</a>(*<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::BV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a80a3caf74c138b3833c79622fef7b626">getExternalNode</a>(*<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">else</span></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; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::*: unknown type&quot;</span>);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; abort();</div><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;}</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"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aef4e1b40faa327f8bbf42a82df29c7b4"> 529</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aef4e1b40faa327f8bbf42a82df29c7b4">PointsTo::PointsToIterator::operator==</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> &amp;rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a> == rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::==: comparing iterators from different PointsTos!&quot;</span>);</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="comment">// Handles end implicitly.</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::CBV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a> == rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::SBV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a> == rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::BV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a> == rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">else</span></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; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::==: unknown type&quot;</span>);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; abort();</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; }</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;</div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa90476b4c0e75a256f8ff855f99ca970"> 545</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa90476b4c0e75a256f8ff855f99ca970">PointsTo::PointsToIterator::operator!=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> &amp;rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a> == rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::!=: comparing iterators from different PointsTos!&quot;</span>);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == rhs);</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;</div><div class="line"><a name="l00552"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aea5c1fe642e6cc0ac3243f8a7b3fe613"> 552</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aea5c1fe642e6cc0ac3243f8a7b3fe613">PointsTo::PointsToIterator::atEnd</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a> != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::atEnd: iterator iterating over nothing!&quot;</span>);</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::CBV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a> == <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a93cdd9890522cc9fee2451567e0b1f0d">end</a>();</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::SBV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a> == <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>();</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::BV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a> == <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a93cdd9890522cc9fee2451567e0b1f0d">end</a>();</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordflow">else</span></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; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::atEnd: unknown type&quot;</span>);</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; abort();</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;}</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"><a class="line" href="namespaceSVF.html#aa01b96d5bc6c3930b0bfca789acf75c4"> 565</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> <a class="code" href="namespaceSVF.html#abed4354cf0282ae30b8330c0e91008d8">operator|</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;lhs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</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="comment">// TODO: optimise.</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> result = lhs;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; result |= rhs;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l00573"></a><span class="lineno"><a class="line" href="namespaceSVF.html#aaa21ff095e66a18937f29246e213f69d"> 573</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> <a class="code" href="namespaceSVF.html#aeb5348e052254496cad4e036073c3941">operator&amp;</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;lhs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</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="comment">// TODO: optimise.</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> result = lhs;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; result &amp;= rhs;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a6c2f7ce4908d39a17b29830a2e4bd781"> 581</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> <a class="code" href="namespaceSVF.html#a4bddb7dbd28d3c0deb3cd35e48179a36">operator-</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;lhs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</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="comment">// TODO: optimise.</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> result = lhs;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; result -= rhs;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;}; <span class="comment">// namespace SVF</span></div><div class="ttc" id="classSVF_1_1PointsTo_html_a1161d97df5ffc8f11d1a34df9a4d5bdf"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a1161d97df5ffc8f11d1a34df9a4d5bdf">SVF::PointsTo::test_and_set</a></div><div class="ttdeci">bool test_and_set(u32_t n)</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00144">PointsTo.cpp:144</a></div></div>
69
+ <a href="PointsTo_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- PointsTo.cpp -- Wrapper of set-like data structures ------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * PointsTo.cpp</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * Abstracts away data structures to be used as points-to sets (implementation).</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * Created on: Feb 01, 2021</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Author: Mohamad Barbar</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;new&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>&quot;</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFValue_8h.html">SVFIR/SVFValue.h</a>&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> <a class="code" href="classSVF_1_1PointsTo.html#a98781dd444ada40af7eef9aefe76123d">PointsTo::currentBestNodeMapping</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> <a class="code" href="classSVF_1_1PointsTo.html#a53e1230c87912d26604990eb8b0cbc0c">PointsTo::currentBestReverseNodeMapping</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#aca4e7e88f2e1ec87a9576cc6c866adde"> 25</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#aca4e7e88f2e1ec87a9576cc6c866adde">PointsTo::PointsTo</a>()</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; : <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>(<a class="code" href="classSVF_1_1Options.html">Options</a>::PtType()), nodeMapping(currentBestNodeMapping),</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; reverseNodeMapping(currentBestReverseNodeMapping)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>) <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector&lt;&gt;</a>();</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>) <a class="code" href="classSVF_1_1CoreBitVector.html">CoreBitVector</a>();</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>) <a class="code" href="classSVF_1_1BitVector.html">BitVector</a>();</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::PointsTo: unknown type&quot;</span>);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;}</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#acef2d3e41263aef641c3411e28ad445c"> 35</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#aca4e7e88f2e1ec87a9576cc6c866adde">PointsTo::PointsTo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pt)</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; : <a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a>(pt.<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a>), <a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a>(pt.<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a>),</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a>(pt.<a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a>)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;{</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>) <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector&lt;&gt;</a>(pt.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>) <a class="code" href="classSVF_1_1CoreBitVector.html">CoreBitVector</a>(pt.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>) <a class="code" href="classSVF_1_1BitVector.html">BitVector</a>(pt.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::PointsTo&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;}</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a57e22bb2a181ccb56908130204d801a2"> 45</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#aca4e7e88f2e1ec87a9576cc6c866adde">PointsTo::PointsTo</a>(<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;&amp;pt)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;noexcept : <a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a>(pt.type), <a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(pt.nodeMapping)),</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(pt.reverseNodeMapping))</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>) <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector&lt;&gt;</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(pt.sbv));</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>) <a class="code" href="classSVF_1_1CoreBitVector.html">CoreBitVector</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(pt.cbv));</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>) <a class="code" href="classSVF_1_1BitVector.html">BitVector</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(pt.bv));</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::PointsTo&amp;&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a21bc5e2236fdd3cb8c185d8eb142fdac"> 55</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#a21bc5e2236fdd3cb8c185d8eb142fdac">PointsTo::~PointsTo</a>()</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;{</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.~SparseBitVector&lt;&gt;();</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.~CoreBitVector();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.~BitVector();</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::~PointsTo: unknown type&quot;</span>);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a269d334618e4acc7e739317fd58d7fe7"> 66</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;<a class="code" href="classSVF_1_1PointsTo.html#a269d334618e4acc7e739317fd58d7fe7">PointsTo::operator=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">this</span> == &amp;rhs)</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> = rhs.<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> = rhs.<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a> = rhs.<a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// Placement new because if type has changed, we have</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// not constructed the new type yet.</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>) <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector&lt;&gt;</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>) <a class="code" href="classSVF_1_1CoreBitVector.html">CoreBitVector</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>) <a class="code" href="classSVF_1_1BitVector.html">BitVector</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::PointsTo=&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a615411a2d8909668271782398814bc9f"> 83</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;<a class="code" href="classSVF_1_1PointsTo.html#a269d334618e4acc7e739317fd58d7fe7">PointsTo::operator=</a>(<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;&amp;rhs)</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;noexcept</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;{</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> = rhs.type;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> = rhs.nodeMapping;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a> = rhs.reverseNodeMapping;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// See comment in copy assignment.</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>) <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector&lt;&gt;</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(rhs.sbv));</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>) <a class="code" href="classSVF_1_1CoreBitVector.html">CoreBitVector</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(rhs.cbv));</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>) <a class="code" href="classSVF_1_1BitVector.html">BitVector</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(rhs.bv));</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::PointsTo=&amp;&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;}</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8"> 98</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8">PointsTo::empty</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a98b9795b4fdc74d9d2efa9a3f2ecb62f">empty</a>();</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#aea5389ad7e5fe4c8bef686940a1a6056">empty</a>();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a98b9795b4fdc74d9d2efa9a3f2ecb62f">empty</a>();</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::empty: unknown type&quot;</span>);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; abort();</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;}</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#aa0d4ee196b91fce626f3f15bcc5599e4"> 111</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1PointsTo.html#aa0d4ee196b91fce626f3f15bcc5599e4">PointsTo::count</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#abfed2e7daf2407e11cade625ac19a6ce">count</a>();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a9f96e6a886fa69e07cda5dbfaed8b7c9">count</a>();</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#abfed2e7daf2407e11cade625ac19a6ce">count</a>();</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::count: unknown type&quot;</span>);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; abort();</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;}</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a14ce3ef70959f10e777e1090fd697116"> 123</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointsTo.html#a14ce3ef70959f10e777e1090fd697116">PointsTo::clear</a>()</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;{</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a1e523bab1013a9f3e9eaea56e53afa58">clear</a>();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a5afe3e74412a1f3f728d7e0eaae70c13">clear</a>();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a1e523bab1013a9f3e9eaea56e53afa58">clear</a>();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::clear: unknown type&quot;</span>);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;}</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f"> 131</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">PointsTo::test</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)<span class="keyword"> const</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; n = <a class="code" href="classSVF_1_1PointsTo.html#aeda7466cdd9f77978981e2a518baa863">getInternalNode</a>(n);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a7b20ffd3cd4a0ffc48a1348f657deaa0">test</a>(n);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">test</a>(n);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a7b20ffd3cd4a0ffc48a1348f657deaa0">test</a>(n);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::test: unknown type&quot;</span>);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; abort();</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;}</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a1161d97df5ffc8f11d1a34df9a4d5bdf"> 144</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a1161d97df5ffc8f11d1a34df9a4d5bdf">PointsTo::test_and_set</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;{</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; n = <a class="code" href="classSVF_1_1PointsTo.html#aeda7466cdd9f77978981e2a518baa863">getInternalNode</a>(n);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a3299b296d20d2b76c6538ba51a684972">test_and_set</a>(n);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a355247d17d1c17b857b4ee572e19b91f">test_and_set</a>(n);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a3299b296d20d2b76c6538ba51a684972">test_and_set</a>(n);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::test_and_set: unknown type&quot;</span>);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; abort();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;}</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa"> 157</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">PointsTo::set</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;{</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; n = <a class="code" href="classSVF_1_1PointsTo.html#aeda7466cdd9f77978981e2a518baa863">getInternalNode</a>(n);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a553e3e51bffe1aab04adc047e0fd3f24">set</a>(n);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(n);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a553e3e51bffe1aab04adc047e0fd3f24">set</a>(n);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::set: unknown type&quot;</span>);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a1ef805e714cfc29f0f3fa56c5ee964f6"> 166</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointsTo.html#a1ef805e714cfc29f0f3fa56c5ee964f6">PointsTo::reset</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; n = <a class="code" href="classSVF_1_1PointsTo.html#aeda7466cdd9f77978981e2a518baa863">getInternalNode</a>(n);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a42fc777d574db4ef23b02308b944a85b">reset</a>(n);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#ad5337b5aeed50f8b7ffd56b14ee25c9f">reset</a>(n);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a42fc777d574db4ef23b02308b944a85b">reset</a>(n);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::reset: unknown type&quot;</span>);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;}</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#ab31a53693fe070767b8de74e88091cd8"> 175</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#ab31a53693fe070767b8de74e88091cd8">PointsTo::contains</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::contains: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#af08c16aed45dfa65472f0b5ae518add2">contains</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#abbd0e0cf759fad7858224ed8a63aade8">contains</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#af08c16aed45dfa65472f0b5ae518add2">contains</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::contains: unknown type&quot;</span>);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; abort();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;}</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d"> 189</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">PointsTo::intersects</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersects: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a15be4ce7e9a07d9b01da0c60d51b22de">intersects</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a16756e0545fd3d50ab89f45a2e83bb79">intersects</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a15be4ce7e9a07d9b01da0c60d51b22de">intersects</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersects: unknown type&quot;</span>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; abort();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;}</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a17c66a466bbea93598bca73d82c95479"> 203</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classSVF_1_1PointsTo.html#a17c66a466bbea93598bca73d82c95479">PointsTo::find_first</a>()</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;{</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aa0d4ee196b91fce626f3f15bcc5599e4">count</a>() == 0) <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">return</span> *<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>();</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;}</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a6b29626e4e4298943d2ad839f06db83e"> 209</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a6b29626e4e4298943d2ad839f06db83e">PointsTo::operator==</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::==: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a> == rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a> == rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a> == rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; {</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::==: unknown type&quot;</span>);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; abort();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;}</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a888f05fe8da4b95c44226f3c69469c75"> 223</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a888f05fe8da4b95c44226f3c69469c75">PointsTo::operator!=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">// TODO: we&#39;re asserting and checking twice... should be okay...</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::!=: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == rhs);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;}</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#aa8644057ec182382e3c34e90d7d61ade"> 231</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#aa8644057ec182382e3c34e90d7d61ade">PointsTo::operator|=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;{</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::|=: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a> |= rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a> |= rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a> |= rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::|=: unknown type&quot;</span>);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; abort();</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;}</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a687b34cac3c43dd957b86a4833a24871"> 245</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#aa8644057ec182382e3c34e90d7d61ade">PointsTo::operator|=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> &amp;rhs)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;{</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// TODO:</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> : rhs)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">if</span> (changed) <span class="keyword">set</span>(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">else</span> changed = <a class="code" href="classSVF_1_1PointsTo.html#a1161d97df5ffc8f11d1a34df9a4d5bdf">test_and_set</a>(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;}</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a164aced0d6a19dd7ba8124ec2e77674c">PointsTo::operator&amp;=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;{</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::&amp;=: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a> &amp;= rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a> &amp;= rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a> &amp;= rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::&amp;=: unknown type&quot;</span>);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; abort();</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;}</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a21244b7b04d6aa01787a11d116bc9952"> 272</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a21244b7b04d6aa01787a11d116bc9952">PointsTo::operator-=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;{</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::-=: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a8ba857b68282055e485c441892e39b9b">intersectWithComplement</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a8b481ef53a27a351affecab90310b1ef">intersectWithComplement</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a8ba857b68282055e485c441892e39b9b">intersectWithComplement</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::-=: unknown type&quot;</span>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; abort();</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;}</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#af81f9e91eec4bf82ccfb867c2415f9bd"> 286</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#af81f9e91eec4bf82ccfb867c2415f9bd">PointsTo::intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;{</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersectWithComplement: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a8ba857b68282055e485c441892e39b9b">intersectWithComplement</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a8b481ef53a27a351affecab90310b1ef">intersectWithComplement</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a8ba857b68282055e485c441892e39b9b">intersectWithComplement</a>(rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersectWithComplement(PT): unknown type&quot;</span>);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; abort();</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;}</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;</div><div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#adec2e2fc87c2bb9b3ff8873b04abf31d"> 298</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointsTo.html#af81f9e91eec4bf82ccfb867c2415f9bd">PointsTo::intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;lhs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;{</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(rhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersectWithComplement: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">metaSame</a>(lhs) &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersectWithComplement: mappings of operands do not match!&quot;</span>);</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a8ba857b68282055e485c441892e39b9b">intersectWithComplement</a>(lhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>, rhs.<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>) <a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a8b481ef53a27a351affecab90310b1ef">intersectWithComplement</a>(lhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>, rhs.<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a8ba857b68282055e485c441892e39b9b">intersectWithComplement</a>(lhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>, rhs.<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::intersectWithComplement(PT, PT): unknown type&quot;</span>);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; abort();</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;}</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div><div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#ad1d19d52800341484a136c6d5e0112ea"> 313</a></span>&#160;<a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1PointsTo.html#ad1d19d52800341484a136c6d5e0112ea">PointsTo::toNodeBS</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nbs;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> o : *<span class="keyword">this</span>) nbs.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(o);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> nbs;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;}</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a32b52339998976ec5bdd9f2cc7ed9e3f"> 320</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classSVF_1_1PointsTo.html#a32b52339998976ec5bdd9f2cc7ed9e3f">PointsTo::hash</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">CBV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#af979ecb48d3d5296bce5bd0b4676e359">hash</a>();</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SBV</a>)</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; std::hash&lt;SparseBitVector&lt;&gt;&gt; h;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">return</span> h(<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eafd6e0658d0eb4cdba368fa8e77d4d892">BV</a>) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#af979ecb48d3d5296bce5bd0b4676e359">hash</a>();</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsTo::hash: unknown type&quot;</span>);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; abort();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;}</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a5fd783872908d85e9192f4348ac0b493"> 337</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> <a class="code" href="classSVF_1_1PointsTo.html#a5fd783872908d85e9192f4348ac0b493">PointsTo::getNodeMapping</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a>;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;}</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#aeda7466cdd9f77978981e2a518baa863"> 342</a></span>&#160;<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="classSVF_1_1PointsTo.html#aeda7466cdd9f77978981e2a518baa863">PointsTo::getInternalNode</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)<span class="keyword"> const</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> == <span class="keyword">nullptr</span>) <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; assert(n &lt; nodeMapping-&gt;size());</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a>-&gt;at(n);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;}</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a80a3caf74c138b3833c79622fef7b626"> 349</a></span>&#160;<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="classSVF_1_1PointsTo.html#a80a3caf74c138b3833c79622fef7b626">PointsTo::getExternalNode</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>)<span class="keyword"> const</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a> == <span class="keyword">nullptr</span>) <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; assert(n &lt; reverseNodeMapping-&gt;size());</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a>-&gt;at(n);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;}</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec"> 356</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#aa1e773b7abda97441d6ffe39c668d4ec">PointsTo::metaSame</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pt)<span class="keyword"> const</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> == pt.<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> &amp;&amp; <a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a> == pt.<a class="code" href="classSVF_1_1PointsTo.html#a1ae4abe690d21eb5aaf2154243b604c1">reverseNodeMapping</a>;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;}</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;</div><div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#ae349a9ce6a8739925baffd83d1878b0e"> 361</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> <a class="code" href="classSVF_1_1PointsTo.html#ae349a9ce6a8739925baffd83d1878b0e">PointsTo::getCurrentBestNodeMapping</a>()</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;{</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a98781dd444ada40af7eef9aefe76123d">currentBestNodeMapping</a>;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;}</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a19b84abf5e9c85e82ae18b77083467e9"> 366</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> <a class="code" href="classSVF_1_1PointsTo.html#a19b84abf5e9c85e82ae18b77083467e9">PointsTo::getCurrentBestReverseNodeMapping</a>()</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;{</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo.html#a53e1230c87912d26604990eb8b0cbc0c">currentBestReverseNodeMapping</a>;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;}</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;</div><div class="line"><a name="l00371"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a84eca4c7fc833f8ca4d119cd4da08ca8"> 371</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointsTo.html#a84eca4c7fc833f8ca4d119cd4da08ca8">PointsTo::setCurrentBestNodeMapping</a>(<a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">MappingPtr</a> newCurrentBestNodeMapping,</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">MappingPtr</a> newCurrentBestReverseNodeMapping)</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;{</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a98781dd444ada40af7eef9aefe76123d">currentBestNodeMapping</a> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(newCurrentBestNodeMapping);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a53e1230c87912d26604990eb8b0cbc0c">currentBestReverseNodeMapping</a> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(newCurrentBestReverseNodeMapping);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;}</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo.html#a731a028a2a4ed30e86992652ad71a63f"> 378</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PointsTo.html#a731a028a2a4ed30e86992652ad71a63f">PointsTo::checkAndRemap</a>()</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;{</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo.html#acd7eab32125de90020c55c757d6adfda">nodeMapping</a> != <a class="code" href="classSVF_1_1PointsTo.html#a98781dd444ada40af7eef9aefe76123d">currentBestNodeMapping</a>)</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">// newPt constructed with correct node mapping.</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> newPt;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> o : *<span class="keyword">this</span>) newPt.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; *<span class="keyword">this</span> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(newPt);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; }</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;}</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#ad9efcd9fb0c8201b9166a1560d06a71b"> 389</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#abd2c3366cbb4f24b2e0bc30ea282b752">PointsTo::PointsToIterator::PointsToIterator</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> *pt, <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>)</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; : pt(pt)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;{</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">if</span> (pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::CBV)</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector_1_1CoreBitVectorIterator.html">CoreBitVector::iterator</a>(end ? pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a93cdd9890522cc9fee2451567e0b1f0d">end</a>() : pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a835bf11a1f698942db8e6bdadbbfd1f3">begin</a>());</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; }</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::SBV)</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>) <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVector&lt;&gt;::iterator</a>(end ? pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>() : pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>());</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::BV)</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector.html#a624ebc80d138fbf2b015bf557d2891a6">BitVector::iterator</a>(end ? pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a93cdd9890522cc9fee2451567e0b1f0d">end</a>() : pt-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a835bf11a1f698942db8e6bdadbbfd1f3">begin</a>());</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::PointsToIterator: unknown type&quot;</span>);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; abort();</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;}</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a19f371ccb5b1c84fb4adfd5b0c8a3eec"> 411</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#abd2c3366cbb4f24b2e0bc30ea282b752">PointsTo::PointsToIterator::PointsToIterator</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> &amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; : pt(pt.pt)</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;{</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">if</span> (this-&gt;pt-&gt;type == PointsTo::Type::SBV)</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; {</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>) <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVector&lt;&gt;::iterator</a>(pt.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this-&gt;pt-&gt;type == PointsTo::Type::CBV)</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; {</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector_1_1CoreBitVectorIterator.html">CoreBitVector::iterator</a>(pt.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this-&gt;pt-&gt;type == PointsTo::Type::BV)</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector.html#a624ebc80d138fbf2b015bf557d2891a6">BitVector::iterator</a>(pt.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::PointsToIterator&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; abort();</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;}</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;</div><div class="line"><a name="l00433"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a1a0dac39cfd8321d8b24502e6a6068f7"> 433</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#abd2c3366cbb4f24b2e0bc30ea282b752">PointsTo::PointsToIterator::PointsToIterator</a>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> &amp;&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>)</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;noexcept : <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>.pt)</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;{</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::SBV)</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>) <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVector&lt;&gt;::iterator</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>.sbvIt));</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::CBV)</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector_1_1CoreBitVectorIterator.html">CoreBitVector::iterator</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>.cbvIt));</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; }</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::BV)</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; {</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector.html#a624ebc80d138fbf2b015bf557d2891a6">BitVector::iterator</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>.bvIt));</div><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">else</span></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; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::PointsToIterator&amp;&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; abort();</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;}</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"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#acbbcff746f7f0dc37815e688e9172f21"> 455</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::PointsToIterator</a> &amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#acbbcff746f7f0dc37815e688e9172f21">PointsTo::PointsToIterator::operator=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> &amp;rhs)</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;{</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a> = rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::SBV)</div><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="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>) <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVector&lt;&gt;::iterator</a>(rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>);</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">else</span> <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::CBV)</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="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector_1_1CoreBitVectorIterator.html">CoreBitVector::iterator</a>(rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>);</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">else</span> <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::BV)</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="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector.html#a624ebc80d138fbf2b015bf557d2891a6">BitVector::iterator</a>(rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>);</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">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::PointsToIterator&amp;: unknown type&quot;</span>);</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; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;}</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"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a16f92fffe8aba3ba9bd80a880e93b056"> 476</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::PointsToIterator</a> &amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#acbbcff746f7f0dc37815e688e9172f21">PointsTo::PointsToIterator::operator=</a>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> &amp;&amp;rhs) noexcept</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; this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a> = rhs.pt;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::SBV)</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>) <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVector&lt;&gt;::iterator</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(rhs.sbvIt));</div><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">else</span> <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::CBV)</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="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector_1_1CoreBitVectorIterator.html">CoreBitVector::iterator</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(rhs.cbvIt));</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> <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == PointsTo::Type::BV)</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; <span class="keyword">new</span> (&amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>) <a class="code" href="classSVF_1_1CoreBitVector.html#a624ebc80d138fbf2b015bf557d2891a6">BitVector::iterator</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(rhs.bvIt));</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; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::PointsToIterator&amp;&amp;: unknown type&quot;</span>);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;}</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"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#ac426e75680a2dce9c9185e83af749d51"> 497</a></span>&#160;<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::PointsToIterator</a> &amp;<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#ac426e75680a2dce9c9185e83af749d51">PointsTo::PointsToIterator::operator++</a>()</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;{</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; assert(!<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aea5c1fe642e6cc0ac3243f8a7b3fe613">atEnd</a>() &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::++(pre): incrementing past end!&quot;</span>);</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::CBV) ++<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::SBV) ++<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::BV) ++<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::++(void): unknown type&quot;</span>);</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> *<span class="keyword">this</span>;</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;</div><div class="line"><a name="l00508"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a94a195a13777028d5af16985e3fd5b73"> 508</a></span>&#160;<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::PointsToIterator</a> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#ac426e75680a2dce9c9185e83af749d51">PointsTo::PointsToIterator::operator++</a>(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;{</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; assert(!<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aea5c1fe642e6cc0ac3243f8a7b3fe613">atEnd</a>() &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::++(pre): incrementing past end!&quot;</span>);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> old = *<span class="keyword">this</span>;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; ++*<span class="keyword">this</span>;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">return</span> old;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;}</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"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a0fc3ebfd1990d09cc1b7c26bd94fb57a"> 516</a></span>&#160;<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a0fc3ebfd1990d09cc1b7c26bd94fb57a">PointsTo::PointsToIterator::operator*</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; assert(!<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aea5c1fe642e6cc0ac3243f8a7b3fe613">atEnd</a>() &amp;&amp; <span class="stringliteral">&quot;PointsToIterator: dereferencing end!&quot;</span>);</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::CBV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a80a3caf74c138b3833c79622fef7b626">getExternalNode</a>(*<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::SBV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a80a3caf74c138b3833c79622fef7b626">getExternalNode</a>(*<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::BV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a80a3caf74c138b3833c79622fef7b626">getExternalNode</a>(*<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">else</span></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; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::*: unknown type&quot;</span>);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; abort();</div><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;}</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"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aef4e1b40faa327f8bbf42a82df29c7b4"> 529</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aef4e1b40faa327f8bbf42a82df29c7b4">PointsTo::PointsToIterator::operator==</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> &amp;rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a> == rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::==: comparing iterators from different PointsTos!&quot;</span>);</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="comment">// Handles end implicitly.</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::CBV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a> == rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a>;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::SBV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a> == rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a>;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::BV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a> == rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a>;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">else</span></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; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::==: unknown type&quot;</span>);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; abort();</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; }</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;</div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa90476b4c0e75a256f8ff855f99ca970"> 545</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa90476b4c0e75a256f8ff855f99ca970">PointsTo::PointsToIterator::operator!=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsToIterator</a> &amp;rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a> == rhs.<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::!=: comparing iterators from different PointsTos!&quot;</span>);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == rhs);</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;</div><div class="line"><a name="l00552"></a><span class="lineno"><a class="line" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aea5c1fe642e6cc0ac3243f8a7b3fe613"> 552</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aea5c1fe642e6cc0ac3243f8a7b3fe613">PointsTo::PointsToIterator::atEnd</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; assert(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a> != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::atEnd: iterator iterating over nothing!&quot;</span>);</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::CBV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a4db2c62eb3ad789ab7aaf7506cd340b2">cbvIt</a> == <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a79333c4ae5c002d9632fa589956b3605">cbv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a93cdd9890522cc9fee2451567e0b1f0d">end</a>();</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::SBV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a735a2a9f0c3f4bc3997edf11b133c0f9">sbvIt</a> == <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aecd6b98c0687de59aebb297ec38a7084">sbv</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>();</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#aaa9c956187f2c04a7a242ce440d1416f">type</a> == Type::BV) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aa420a44769d1c25e083975e3cd04d699">bvIt</a> == <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html#a8be3dd8b1e66eac8577bf16b7403c9c5">pt</a>-&gt;<a class="code" href="classSVF_1_1PointsTo.html#a668be9270539fdfc5dbf3efb9cc17587">bv</a>.<a class="code" href="classSVF_1_1CoreBitVector.html#a93cdd9890522cc9fee2451567e0b1f0d">end</a>();</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordflow">else</span></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; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;PointsToIterator::atEnd: unknown type&quot;</span>);</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; abort();</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;}</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"><a class="line" href="namespaceSVF.html#aa01b96d5bc6c3930b0bfca789acf75c4"> 565</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> <a class="code" href="namespaceSVF.html#abed4354cf0282ae30b8330c0e91008d8">operator|</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;lhs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</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="comment">// TODO: optimise.</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> result = lhs;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; result |= rhs;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l00573"></a><span class="lineno"><a class="line" href="namespaceSVF.html#aaa21ff095e66a18937f29246e213f69d"> 573</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> <a class="code" href="namespaceSVF.html#aeb5348e052254496cad4e036073c3941">operator&amp;</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;lhs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</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="comment">// TODO: optimise.</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> result = lhs;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; result &amp;= rhs;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a6c2f7ce4908d39a17b29830a2e4bd781"> 581</a></span>&#160;<a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> <a class="code" href="namespaceSVF.html#a4bddb7dbd28d3c0deb3cd35e48179a36">operator-</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;lhs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;rhs)</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="comment">// TODO: optimise.</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> result = lhs;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; result -= rhs;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;}; <span class="comment">// namespace SVF</span></div><div class="ttc" id="classSVF_1_1PointsTo_html_a1161d97df5ffc8f11d1a34df9a4d5bdf"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a1161d97df5ffc8f11d1a34df9a4d5bdf">SVF::PointsTo::test_and_set</a></div><div class="ttdeci">bool test_and_set(u32_t n)</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00144">PointsTo.cpp:144</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SVF::SparseBitVector::SparseBitVectorIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00528">SparseBitVector.h:528</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1PointsTo_html_a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SVF::PointsTo::SBV</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00033">PointsTo.h:33</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1PointsTo_1_1PointsToIterator_html_aef4e1b40faa327f8bbf42a82df29c7b4"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html#aef4e1b40faa327f8bbf42a82df29c7b4">SVF::PointsTo::PointsToIterator::operator==</a></div><div class="ttdeci">bool operator==(const PointsToIterator &amp;rhs) const</div><div class="ttdoc">Equality: *this == rhs. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00529">PointsTo.cpp:529</a></div></div>
@@ -473,7 +473,7 @@ PointsTo::PointsToIterator &PointsTo::PointsToIterator::operator=(const PointsTo
473
473
  return *this;
474
474
  }
475
475
 
476
- PointsTo::PointsToIterator &PointsTo::PointsToIterator::operator=(PointsToIterator &&rhs)
476
+ PointsTo::PointsToIterator &PointsTo::PointsToIterator::operator=(PointsToIterator &&rhs) noexcept
477
477
  {
478
478
  this->pt = rhs.pt;
479
479
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-tools",
3
- "version": "1.0.623",
3
+ "version": "1.0.624",
4
4
  "description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
5
5
  "main": "index.js",
6
6
  "scripts": {