Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 583ffa4ba069126c3ba0bc565dc0485a > files > 1734

cvc3-doc-2.4.1-1.fc15.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>CVC3: variable.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.4 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">CVC3&#160;<span id="projectnumber">2.4.1</span></div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">variable.h</div>  </div>
</div>
<div class="contents">
<a href="variable_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*****************************************************************************/</span><span class="comment"></span>
<a name="l00002"></a>00002 <span class="comment">/*!</span>
<a name="l00003"></a>00003 <span class="comment"> * \file variable.h</span>
<a name="l00004"></a>00004 <span class="comment"> * </span>
<a name="l00005"></a>00005 <span class="comment"> * Author: Sergey Berezin</span>
<a name="l00006"></a>00006 <span class="comment"> * </span>
<a name="l00007"></a>00007 <span class="comment"> * Created: Fri Apr 25 11:52:17 2003</span>
<a name="l00008"></a>00008 <span class="comment"> *</span>
<a name="l00009"></a>00009 <span class="comment"> * &lt;hr&gt;</span>
<a name="l00010"></a>00010 <span class="comment"> *</span>
<a name="l00011"></a>00011 <span class="comment"> * License to use, copy, modify, sell and/or distribute this software</span>
<a name="l00012"></a>00012 <span class="comment"> * and its documentation for any purpose is hereby granted without</span>
<a name="l00013"></a>00013 <span class="comment"> * royalty, subject to the terms and conditions defined in the \ref</span>
<a name="l00014"></a>00014 <span class="comment"> * LICENSE file provided with this distribution.</span>
<a name="l00015"></a>00015 <span class="comment"> * </span>
<a name="l00016"></a>00016 <span class="comment"> * &lt;hr&gt;</span>
<a name="l00017"></a>00017 <span class="comment"> * </span>
<a name="l00018"></a>00018 <span class="comment"> * A data structure representing a variable in the search engine.  It</span>
<a name="l00019"></a>00019 <span class="comment"> * is a smart pointer with a uniquifying mechanism similar to Expr,</span>
<a name="l00020"></a>00020 <span class="comment"> * and a variable is uniquely determined by its expression.  It can be</span>
<a name="l00021"></a>00021 <span class="comment"> * thought of as an Expr with additional attributes, but the type is</span>
<a name="l00022"></a>00022 <span class="comment"> * different, so it will not be confused with other Exprs.</span>
<a name="l00023"></a>00023 <span class="comment"> */</span>
<a name="l00024"></a>00024 <span class="comment">/*****************************************************************************/</span>
<a name="l00025"></a>00025 
<a name="l00026"></a>00026 <span class="preprocessor">#ifndef _cvc3__variable_h_</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define _cvc3__variable_h_</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &quot;<a class="code" href="expr_8h.html" title="Definition of the API to expression package. See class Expr for details.">expr.h</a>&quot;</span>
<a name="l00030"></a>00030 
<a name="l00031"></a>00031 <span class="keyword">namespace </span>CVC3 {
<a name="l00032"></a>00032 
<a name="l00033"></a>00033   <span class="keyword">class </span>VariableManager;
<a name="l00034"></a>00034   <span class="keyword">class </span>VariableValue;
<a name="l00035"></a>00035   <span class="keyword">class </span>Clause;
<a name="l00036"></a>00036   <span class="keyword">class </span>SearchEngineRules;
<a name="l00037"></a>00037 
<a name="l00038"></a>00038   <span class="comment">// The main &quot;smart pointer&quot; class</span>
<a name="l00039"></a><a class="code" href="classCVC3_1_1Variable.html">00039</a>   <span class="keyword">class </span><a class="code" href="classCVC3_1_1Variable.html">Variable</a> {
<a name="l00040"></a>00040   <span class="keyword">private</span>:
<a name="l00041"></a><a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">00041</a>     <a class="code" href="classCVC3_1_1VariableValue.html">VariableValue</a>* <a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a>;
<a name="l00042"></a>00042     <span class="comment">// Private methods</span>
<a name="l00043"></a>00043     <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a> <a class="code" href="classCVC3_1_1Variable.html#a3511123177ecb1126031b1b88d37fd0a">deriveThmRec</a>(<span class="keywordtype">bool</span> checkAssump) <span class="keyword">const</span>;
<a name="l00044"></a>00044   <span class="keyword">public</span>:
<a name="l00045"></a>00045     <span class="comment">// Default constructor</span>
<a name="l00046"></a><a class="code" href="classCVC3_1_1Variable.html#a7659f63344c25dbc8209c4c531b2f0be">00046</a>     <a class="code" href="classCVC3_1_1Variable.html#a7659f63344c25dbc8209c4c531b2f0be">Variable</a>(): <a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a>(NULL) { }
<a name="l00047"></a>00047     <span class="comment">// Constructor from an Expr; if such variable already exists, it</span>
<a name="l00048"></a>00048     <span class="comment">// will be found and used.</span>
<a name="l00049"></a>00049     <a class="code" href="classCVC3_1_1Variable.html#a7659f63344c25dbc8209c4c531b2f0be">Variable</a>(<a class="code" href="classCVC3_1_1VariableManager.html">VariableManager</a>* vm, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; e);
<a name="l00050"></a>00050     <span class="comment">// Copy constructor</span>
<a name="l00051"></a>00051     <a class="code" href="classCVC3_1_1Variable.html#a7659f63344c25dbc8209c4c531b2f0be">Variable</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Variable.html">Variable</a>&amp; l);
<a name="l00052"></a>00052     <span class="comment">// Destructor</span>
<a name="l00053"></a>00053     <a class="code" href="classCVC3_1_1Variable.html#a21a9c85dd3b1320e8192fd581da15af4">~Variable</a>();
<a name="l00054"></a>00054     <span class="comment">// Assignment</span>
<a name="l00055"></a>00055     <a class="code" href="classCVC3_1_1Variable.html">Variable</a>&amp; <a class="code" href="classCVC3_1_1Variable.html#a551554c97de770f4160444c440342ac5">operator=</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Variable.html">Variable</a>&amp; l);
<a name="l00056"></a>00056 
<a name="l00057"></a><a class="code" href="classCVC3_1_1Variable.html#a35c435274fa96599d47f16239b843584">00057</a>     <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1Variable.html#a35c435274fa96599d47f16239b843584">isNull</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a> == NULL; }
<a name="l00058"></a>00058 
<a name="l00059"></a>00059     <span class="comment">// Accessors</span>
<a name="l00060"></a>00060 
<a name="l00061"></a>00061     <span class="comment">// Expr is the only constant attribute of a variable; other</span>
<a name="l00062"></a>00062     <span class="comment">// attributes can be changed.</span>
<a name="l00063"></a>00063     <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; <a class="code" href="classCVC3_1_1Variable.html#af85a6bbfd1529fce66f70d0012556fdf">getExpr</a>() <span class="keyword">const</span>;
<a name="l00064"></a>00064     <span class="comment">// The Expr of the inverse of the variable.  This function is</span>
<a name="l00065"></a>00065     <span class="comment">// caching, so !e is only constructed once.</span>
<a name="l00066"></a>00066     <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; <a class="code" href="classCVC3_1_1Variable.html#a6d8d3752f50dc4ce55d12e252398c837">getNegExpr</a>() <span class="keyword">const</span>;
<a name="l00067"></a>00067     
<a name="l00068"></a>00068     <span class="comment">// IMPORTANT: Value can be -1 (false), 1 (true), or 0 (unresolved)</span>
<a name="l00069"></a>00069     <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1Variable.html#a36e8ce7a305e07e00adc90f6c22c4916">getValue</a>() <span class="keyword">const</span>;
<a name="l00070"></a>00070     <span class="comment">// If the value is set, scope level and either a theorem or</span>
<a name="l00071"></a>00071     <span class="comment">// an antecedent clause must be defined</span>
<a name="l00072"></a>00072     <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1Variable.html#a6e50e61e2eaf7054bd1d84e4137ba270">getScope</a>() <span class="keyword">const</span>;
<a name="l00073"></a>00073     <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>&amp; <a class="code" href="classCVC3_1_1Variable.html#a6cdc655ea6aaf36c8e8029af0dc41075">getTheorem</a>() <span class="keyword">const</span>;
<a name="l00074"></a>00074     <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Clause.html" title="A class representing a CNF clause (a smart pointer)">Clause</a>&amp; <a class="code" href="classCVC3_1_1Variable.html#a5bbd362f586ab0dbbc3432d140f77aab">getAntecedent</a>() <span class="keyword">const</span>;
<a name="l00075"></a>00075     <span class="comment">// Index of this variable in the antecedent clause; if it is -1,</span>
<a name="l00076"></a>00076     <span class="comment">// the variable is FALSE, and that clause caused the contradiction</span>
<a name="l00077"></a>00077     <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1Variable.html#a681407094080368feea5c496ed3bdb69">getAntecedentIdx</a>() <span class="keyword">const</span>;
<a name="l00078"></a>00078     <span class="comment">// Theorem of the form l |- l produced by the &#39;assump&#39; rule, if</span>
<a name="l00079"></a>00079     <span class="comment">// this variable is a splitter, or a new intermediate assumption</span>
<a name="l00080"></a>00080     <span class="comment">// is generated for it.</span>
<a name="l00081"></a>00081     <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>&amp; <a class="code" href="classCVC3_1_1Variable.html#a535715bc38709f902feb3f77aef4f89d">getAssumpThm</a>() <span class="keyword">const</span>;
<a name="l00082"></a>00082     <span class="comment">// Setting the attributes: it can be either derived from the</span>
<a name="l00083"></a>00083     <span class="comment">// antecedent clause, or by a theorem.  The scope level is set to</span>
<a name="l00084"></a>00084     <span class="comment">// the current scope.</span>
<a name="l00085"></a>00085     <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1Variable.html#ac1d2bf9a1a8eec600ffa18b679ef4d2c">setValue</a>(<span class="keywordtype">int</span> val, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Clause.html" title="A class representing a CNF clause (a smart pointer)">Clause</a>&amp; c, <span class="keywordtype">int</span> idx);
<a name="l00086"></a>00086     <span class="comment">// The theorem&#39;s expr must be the same as the variable&#39;s expr or</span>
<a name="l00087"></a>00087     <span class="comment">// its negation, and the scope is the lowest scope where all</span>
<a name="l00088"></a>00088     <span class="comment">// assumptions of the theorem are true</span>
<a name="l00089"></a>00089     <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1Variable.html#ac1d2bf9a1a8eec600ffa18b679ef4d2c">setValue</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>&amp; thm);
<a name="l00090"></a>00090     <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1Variable.html#ac1d2bf9a1a8eec600ffa18b679ef4d2c">setValue</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>&amp; thm, <span class="keywordtype">int</span> scope);
<a name="l00091"></a>00091     
<a name="l00092"></a>00092     <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1Variable.html#a688678fbc2dc4e25d9dbba2e4c7d72a5">setAssumpThm</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>&amp; a, <span class="keywordtype">int</span> scope);
<a name="l00093"></a>00093     <span class="comment">// Derive the theorem for either the variable or its negation.  If</span>
<a name="l00094"></a>00094     <span class="comment">// the value is set by a theorem, that theorem is returned;</span>
<a name="l00095"></a>00095     <span class="comment">// otherwise a unit propagation rule is applied to the antecedent</span>
<a name="l00096"></a>00096     <span class="comment">// clause.</span>
<a name="l00097"></a>00097     <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a> <a class="code" href="classCVC3_1_1Variable.html#ad499afb9e33f92c2efd7cf92638e0396">deriveTheorem</a>() <span class="keyword">const</span>;
<a name="l00098"></a>00098 
<a name="l00099"></a>00099     <span class="comment">// Accessing Chaff counters (read and modified by reference)</span>
<a name="l00100"></a>00100     <span class="keywordtype">unsigned</span>&amp; <a class="code" href="classCVC3_1_1Variable.html#ac78bae977cd6dead5e79debc77f52efc">count</a>(<span class="keywordtype">bool</span> neg);
<a name="l00101"></a>00101     <span class="keywordtype">unsigned</span>&amp; <a class="code" href="classCVC3_1_1Variable.html#acc8e18908c0b3c74811225c58f57c50d">countPrev</a>(<span class="keywordtype">bool</span> neg);
<a name="l00102"></a>00102     <span class="keywordtype">int</span>&amp; <a class="code" href="classCVC3_1_1Variable.html#aa4c74c18d5e3b6dff3a87dbb9600ea54">score</a>(<span class="keywordtype">bool</span> neg);
<a name="l00103"></a>00103     <span class="keywordtype">bool</span>&amp; <a class="code" href="classCVC3_1_1Variable.html#a0e4d827e11f6308f9c9bc957f0f7d2f7">added</a>(<span class="keywordtype">bool</span> neg);
<a name="l00104"></a>00104     <span class="comment">// Read-only versions</span>
<a name="l00105"></a>00105     <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1Variable.html#ac78bae977cd6dead5e79debc77f52efc">count</a>(<span class="keywordtype">bool</span> neg) <span class="keyword">const</span>;
<a name="l00106"></a>00106     <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1Variable.html#acc8e18908c0b3c74811225c58f57c50d">countPrev</a>(<span class="keywordtype">bool</span> neg) <span class="keyword">const</span>;
<a name="l00107"></a>00107     <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1Variable.html#aa4c74c18d5e3b6dff3a87dbb9600ea54">score</a>(<span class="keywordtype">bool</span> neg) <span class="keyword">const</span>;
<a name="l00108"></a>00108     <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1Variable.html#a0e4d827e11f6308f9c9bc957f0f7d2f7">added</a>(<span class="keywordtype">bool</span> neg) <span class="keyword">const</span>;
<a name="l00109"></a>00109     <span class="comment">// Watch pointer access</span>
<a name="l00110"></a>00110     std::vector&lt;std::pair&lt;Clause, int&gt; &gt;&amp; <a class="code" href="classCVC3_1_1Variable.html#a561c4d0ef9d246de12d5b22aef375315">wp</a>(<span class="keywordtype">bool</span> neg) <span class="keyword">const</span>;
<a name="l00111"></a>00111     <span class="comment">// Friend methods</span>
<a name="l00112"></a><a class="code" href="classCVC3_1_1Variable.html#a0f0f37a880864202b17cff52e9526026">00112</a>     <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1Variable.html#a0f0f37a880864202b17cff52e9526026">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Variable.html">Variable</a>&amp; l1, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Variable.html">Variable</a>&amp; l2) {
<a name="l00113"></a>00113       <span class="keywordflow">return</span> l1.<a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a> == l2.<a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a>;
<a name="l00114"></a>00114     }
<a name="l00115"></a>00115     <span class="comment">// Printing</span>
<a name="l00116"></a>00116     <span class="keyword">friend</span> std::ostream&amp; <a class="code" href="classCVC3_1_1Variable.html#a998720ee70ba784d399ec3a97c8719b6">operator&lt;&lt;</a>(std::ostream&amp; os, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Variable.html">Variable</a>&amp; l);
<a name="l00117"></a>00117     std::string <a class="code" href="classCVC3_1_1Variable.html#a82f724d0ece90488867aa2de8cc43c32">toString</a>() <span class="keyword">const</span>;
<a name="l00118"></a>00118   }; <span class="comment">// end of class Variable</span>
<a name="l00119"></a>00119 
<a name="l00120"></a><a class="code" href="classCVC3_1_1Literal.html">00120</a>   <span class="keyword">class </span><a class="code" href="classCVC3_1_1Literal.html">Literal</a> {
<a name="l00121"></a>00121   <span class="keyword">private</span>:
<a name="l00122"></a><a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">00122</a>     <a class="code" href="classCVC3_1_1Variable.html">Variable</a> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>;
<a name="l00123"></a><a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">00123</a>     <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>;
<a name="l00124"></a>00124   <span class="keyword">public</span>:
<a name="l00125"></a>00125     <span class="comment">// Constructors: from a variable</span>
<a name="l00126"></a><a class="code" href="classCVC3_1_1Literal.html#a1066f94f42e8277ca8aa33e2bebfc1fb">00126</a>     <a class="code" href="classCVC3_1_1Literal.html#aa24c193b2ed3df0b23278a81703a496a">Literal</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Variable.html">Variable</a>&amp; v, <span class="keywordtype">bool</span> positive = <span class="keyword">true</span>)
<a name="l00127"></a>00127       : <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>(v), <a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>(!positive) { }
<a name="l00128"></a>00128     <span class="comment">// Default constructor</span>
<a name="l00129"></a><a class="code" href="classCVC3_1_1Literal.html#aa24c193b2ed3df0b23278a81703a496a">00129</a>     <a class="code" href="classCVC3_1_1Literal.html#aa24c193b2ed3df0b23278a81703a496a">Literal</a>(): <a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>(false) { }
<a name="l00130"></a>00130     <span class="comment">// from Expr: if e == !e&#39;, construct negative literal of e&#39;,</span>
<a name="l00131"></a>00131     <span class="comment">// otherwise positive of e</span>
<a name="l00132"></a><a class="code" href="classCVC3_1_1Literal.html#a3146ac3b39f4045619d16e346dba973a">00132</a>     <a class="code" href="classCVC3_1_1Literal.html#aa24c193b2ed3df0b23278a81703a496a">Literal</a>(<a class="code" href="classCVC3_1_1VariableManager.html">VariableManager</a>* vm, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; e)
<a name="l00133"></a>00133       : <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>(vm, (e.isNot())? e[0] : e), <a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>(e.isNot()) { }
<a name="l00134"></a><a class="code" href="classCVC3_1_1Literal.html#af43cfe38032a00cc8e8e60b0389eeb3e">00134</a>     <a class="code" href="classCVC3_1_1Variable.html">Variable</a>&amp; <a class="code" href="classCVC3_1_1Literal.html#af43cfe38032a00cc8e8e60b0389eeb3e">getVar</a>() { <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>; }
<a name="l00135"></a><a class="code" href="classCVC3_1_1Literal.html#a2f2c48302fa499905d1eb690331f66de">00135</a>     <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Variable.html">Variable</a>&amp; <a class="code" href="classCVC3_1_1Literal.html#a2f2c48302fa499905d1eb690331f66de">getVar</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>; }
<a name="l00136"></a><a class="code" href="classCVC3_1_1Literal.html#aefb2cb8f18bdc70d3130ee7d8dca614c">00136</a>     <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1Literal.html#aefb2cb8f18bdc70d3130ee7d8dca614c">isPositive</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>; }
<a name="l00137"></a><a class="code" href="classCVC3_1_1Literal.html#aad653dd8534feb823b9d30f060b4e181">00137</a>     <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1Literal.html#aad653dd8534feb823b9d30f060b4e181">isNegative</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>; }
<a name="l00138"></a><a class="code" href="classCVC3_1_1Literal.html#aa63f859d19f8c132864d41bb1805c4c0">00138</a>     <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1Literal.html#aa63f859d19f8c132864d41bb1805c4c0">isNull</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#a35c435274fa96599d47f16239b843584">isNull</a>(); }
<a name="l00139"></a>00139     <span class="comment">// Return var or !var</span>
<a name="l00140"></a><a class="code" href="classCVC3_1_1Literal.html#a4a2e0a421bfcb590c3a7964d2583a94c">00140</a>     <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; <a class="code" href="classCVC3_1_1Literal.html#a4a2e0a421bfcb590c3a7964d2583a94c">getExpr</a>()<span class="keyword"> const </span>{
<a name="l00141"></a>00141       <span class="keywordflow">if</span>(<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>) <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#a6d8d3752f50dc4ce55d12e252398c837">getNegExpr</a>();
<a name="l00142"></a>00142       <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#af85a6bbfd1529fce66f70d0012556fdf">getExpr</a>();
<a name="l00143"></a>00143     }
<a name="l00144"></a><a class="code" href="classCVC3_1_1Literal.html#a48feb6e7cf83b3a59b94ca0e75627d0f">00144</a>     <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1Literal.html#a48feb6e7cf83b3a59b94ca0e75627d0f">getValue</a>()<span class="keyword"> const </span>{
<a name="l00145"></a>00145       <span class="keywordflow">if</span>(<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>) <span class="keywordflow">return</span> -(<a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#a36e8ce7a305e07e00adc90f6c22c4916">getValue</a>());
<a name="l00146"></a>00146       <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#a36e8ce7a305e07e00adc90f6c22c4916">getValue</a>();
<a name="l00147"></a>00147     }
<a name="l00148"></a><a class="code" href="classCVC3_1_1Literal.html#a2abe99239ecdf75235e242282cd672f2">00148</a>     <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1Literal.html#a2abe99239ecdf75235e242282cd672f2">getScope</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#af43cfe38032a00cc8e8e60b0389eeb3e">getVar</a>().<a class="code" href="classCVC3_1_1Variable.html#a6e50e61e2eaf7054bd1d84e4137ba270">getScope</a>(); }
<a name="l00149"></a>00149     <span class="comment">// Set the value of the literal</span>
<a name="l00150"></a>00150 <span class="comment">//     void setValue(int val, const Clause&amp; c, int idx) {</span>
<a name="l00151"></a>00151 <span class="comment">//       d_var.setValue(d_negative? -val : val, c, idx);</span>
<a name="l00152"></a>00152 <span class="comment">//     }</span>
<a name="l00153"></a><a class="code" href="classCVC3_1_1Literal.html#ad731e76b4037cb3e5d797543596514a1">00153</a>     <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1Literal.html#ad731e76b4037cb3e5d797543596514a1">setValue</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>&amp; thm) {
<a name="l00154"></a>00154       <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#ac1d2bf9a1a8eec600ffa18b679ef4d2c">setValue</a>(thm, thm.<a class="code" href="classCVC3_1_1Theorem.html#a112466d9793abcf97015233ffdc4ec5e">getScope</a>());
<a name="l00155"></a>00155     }
<a name="l00156"></a><a class="code" href="classCVC3_1_1Literal.html#afd1c69616427acb7bac118dfa627b611">00156</a>     <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1Literal.html#afd1c69616427acb7bac118dfa627b611">setValue</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>&amp; thm, <span class="keywordtype">int</span> scope) {
<a name="l00157"></a>00157       <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#ac1d2bf9a1a8eec600ffa18b679ef4d2c">setValue</a>(thm, scope);
<a name="l00158"></a>00158     }
<a name="l00159"></a><a class="code" href="classCVC3_1_1Literal.html#a9d607c46f54954c7c1371cb8452f8e6f">00159</a>     <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>&amp; <a class="code" href="classCVC3_1_1Literal.html#a9d607c46f54954c7c1371cb8452f8e6f">getTheorem</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#a6cdc655ea6aaf36c8e8029af0dc41075">getTheorem</a>(); }
<a name="l00160"></a>00160 <span class="comment">//     const Clause&amp; getAntecedent() const { return d_var.getAntecedent(); }</span>
<a name="l00161"></a>00161 <span class="comment">//     int getAntecedentIdx() const { return d_var.getAntecedentIdx(); }</span>
<a name="l00162"></a>00162     <span class="comment">// Defined when the literal has a value.  Derives a theorem</span>
<a name="l00163"></a>00163     <span class="comment">// proving either this literal or its inverse.</span>
<a name="l00164"></a><a class="code" href="classCVC3_1_1Literal.html#a9d040e10a412d4a86642a9b2776dd258">00164</a>     <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a> <a class="code" href="classCVC3_1_1Literal.html#a9d040e10a412d4a86642a9b2776dd258">deriveTheorem</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#ad499afb9e33f92c2efd7cf92638e0396">deriveTheorem</a>(); }
<a name="l00165"></a>00165     <span class="comment">// Accessing Chaff counters (read and modified by reference)</span>
<a name="l00166"></a><a class="code" href="classCVC3_1_1Literal.html#a4823b2e9ec3a6a13a28c209d22269564">00166</a>     <span class="keywordtype">unsigned</span>&amp; <a class="code" href="classCVC3_1_1Literal.html#a4823b2e9ec3a6a13a28c209d22269564">count</a>() { <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#ac78bae977cd6dead5e79debc77f52efc">count</a>(<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>); }
<a name="l00167"></a><a class="code" href="classCVC3_1_1Literal.html#ab2a9170779ff251399c8d197c5c5c8ce">00167</a>     <span class="keywordtype">unsigned</span>&amp; <a class="code" href="classCVC3_1_1Literal.html#ab2a9170779ff251399c8d197c5c5c8ce">countPrev</a>() { <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#acc8e18908c0b3c74811225c58f57c50d">countPrev</a>(<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>); }
<a name="l00168"></a><a class="code" href="classCVC3_1_1Literal.html#a436c5126780bd81c31bc01a868b5b857">00168</a>     <span class="keywordtype">int</span>&amp; <a class="code" href="classCVC3_1_1Literal.html#a436c5126780bd81c31bc01a868b5b857">score</a>() { <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#aa4c74c18d5e3b6dff3a87dbb9600ea54">score</a>(<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>); }
<a name="l00169"></a><a class="code" href="classCVC3_1_1Literal.html#a49129c1ccac9ad6380af512daae84b34">00169</a>     <span class="keywordtype">bool</span>&amp; <a class="code" href="classCVC3_1_1Literal.html#a49129c1ccac9ad6380af512daae84b34">added</a>() { <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#a0e4d827e11f6308f9c9bc957f0f7d2f7">added</a>(<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>); }
<a name="l00170"></a>00170     <span class="comment">// Read-only versions</span>
<a name="l00171"></a><a class="code" href="classCVC3_1_1Literal.html#a8a8aaec71bc7d9603b83dec2d4b3feeb">00171</a>     <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1Literal.html#a8a8aaec71bc7d9603b83dec2d4b3feeb">count</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#ac78bae977cd6dead5e79debc77f52efc">count</a>(<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>); }
<a name="l00172"></a><a class="code" href="classCVC3_1_1Literal.html#a673002c88b2767a90c4112c946119080">00172</a>     <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1Literal.html#a673002c88b2767a90c4112c946119080">countPrev</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#acc8e18908c0b3c74811225c58f57c50d">countPrev</a>(<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>); }
<a name="l00173"></a><a class="code" href="classCVC3_1_1Literal.html#af7709a0b26086c61e516460b41c032d2">00173</a>     <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1Literal.html#af7709a0b26086c61e516460b41c032d2">score</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#aa4c74c18d5e3b6dff3a87dbb9600ea54">score</a>(<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>); }
<a name="l00174"></a><a class="code" href="classCVC3_1_1Literal.html#a4db8e1bbf73145f6453a04cec746c67d">00174</a>     <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1Literal.html#a4db8e1bbf73145f6453a04cec746c67d">added</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#a0e4d827e11f6308f9c9bc957f0f7d2f7">added</a>(<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>); }
<a name="l00175"></a>00175     <span class="comment">// Watch pointer access</span>
<a name="l00176"></a><a class="code" href="classCVC3_1_1Literal.html#a93986b2c3cd2889cbbf35fca5d216251">00176</a>     std::vector&lt;std::pair&lt;Clause, int&gt; &gt;&amp; <a class="code" href="classCVC3_1_1Literal.html#a93986b2c3cd2889cbbf35fca5d216251">wp</a>()<span class="keyword"> const</span>
<a name="l00177"></a>00177 <span class="keyword">      </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>.<a class="code" href="classCVC3_1_1Variable.html#a561c4d0ef9d246de12d5b22aef375315">wp</a>(<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a>); }
<a name="l00178"></a>00178     <span class="comment">// Printing</span>
<a name="l00179"></a>00179     <span class="keyword">friend</span> std::ostream&amp; <a class="code" href="classCVC3_1_1Literal.html#a8b8d2fbbe7ee1896d8be5be1c4974580">operator&lt;&lt;</a>(std::ostream&amp; os, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Literal.html">Literal</a>&amp; l);
<a name="l00180"></a>00180     std::string <a class="code" href="classCVC3_1_1Literal.html#aff53e6b3e4da8c649816441046983a30">toString</a>() <span class="keyword">const</span>;
<a name="l00181"></a>00181     <span class="comment">// Equality</span>
<a name="l00182"></a><a class="code" href="classCVC3_1_1Literal.html#af8bdb08600f29ef91133ad24bf850c49">00182</a>     <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1Literal.html#af8bdb08600f29ef91133ad24bf850c49">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Literal.html">Literal</a>&amp; l1, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Literal.html">Literal</a>&amp; l2) {
<a name="l00183"></a>00183       <span class="keywordflow">return</span> (l1.<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a> == l2.<a class="code" href="classCVC3_1_1Literal.html#a674fd67861c9bca1aef2179728745f36">d_negative</a> &amp;&amp; l1.<a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>==l1.<a class="code" href="classCVC3_1_1Literal.html#a9ade1c15df2b3f10d263c4f01d6ea8d5">d_var</a>);
<a name="l00184"></a>00184     }
<a name="l00185"></a>00185   }; <span class="comment">// end of class Literal</span>
<a name="l00186"></a>00186 
<a name="l00187"></a>00187   <span class="comment">// Non-member methods: negation of Variable and Literal</span>
<a name="l00188"></a><a class="code" href="namespaceCVC3.html#a836d1b9fc2aa13791ad282f3a2d4551e">00188</a>   <span class="keyword">inline</span> <a class="code" href="classCVC3_1_1Literal.html">Literal</a> <a class="code" href="namespaceCVC3.html#a836d1b9fc2aa13791ad282f3a2d4551e">operator!</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Variable.html">Variable</a>&amp; v) {
<a name="l00189"></a>00189     <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html">Literal</a>(v, <span class="keyword">false</span>);
<a name="l00190"></a>00190   }
<a name="l00191"></a>00191 
<a name="l00192"></a><a class="code" href="namespaceCVC3.html#a77bbb9e579ed8077d27c91cfc0d40d26">00192</a>   <span class="keyword">inline</span> <a class="code" href="classCVC3_1_1Literal.html">Literal</a> <a class="code" href="namespaceCVC3.html#a836d1b9fc2aa13791ad282f3a2d4551e">operator!</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Literal.html">Literal</a>&amp; l) {
<a name="l00193"></a>00193     <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Literal.html">Literal</a>(l.<a class="code" href="classCVC3_1_1Literal.html#af43cfe38032a00cc8e8e60b0389eeb3e">getVar</a>(), l.<a class="code" href="classCVC3_1_1Literal.html#aad653dd8534feb823b9d30f060b4e181">isNegative</a>());
<a name="l00194"></a>00194   }
<a name="l00195"></a>00195 
<a name="l00196"></a>00196   std::ostream&amp; <a class="code" href="namespaceCVC3.html#a6b7e38d3c97da1e91e12a6c9555b8163">operator&lt;&lt;</a>(std::ostream&amp; os, <span class="keyword">const</span> Literal&amp; l);
<a name="l00197"></a>00197 
<a name="l00198"></a>00198 } <span class="comment">// end of namespace CVC3</span>
<a name="l00199"></a>00199 
<a name="l00200"></a>00200 <span class="comment">// Clause uses class Variable, have to include it here</span>
<a name="l00201"></a>00201 <span class="preprocessor">#include &quot;<a class="code" href="clause_8h.html">clause.h</a>&quot;</span>
<a name="l00202"></a>00202 
<a name="l00203"></a>00203 <span class="keyword">namespace </span>CVC3 {
<a name="l00204"></a>00204 
<a name="l00205"></a>00205   <span class="comment">// The value holding class</span>
<a name="l00206"></a><a class="code" href="classCVC3_1_1VariableValue.html">00206</a>   <span class="keyword">class </span><a class="code" href="classCVC3_1_1VariableValue.html">VariableValue</a> {
<a name="l00207"></a><a class="code" href="classCVC3_1_1VariableValue.html#a9b0a9a1a9dc58fc36b535bb33c612b49">00207</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Variable.html">Variable</a>;
<a name="l00208"></a><a class="code" href="classCVC3_1_1VariableValue.html#a06b58135e80b3f9cee3779c4012bb13b">00208</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1VariableManager.html">VariableManager</a>;
<a name="l00209"></a>00209   <span class="keyword">private</span>:
<a name="l00210"></a><a class="code" href="classCVC3_1_1VariableValue.html#a8b9cd77982124084ed87e4fde0e6460a">00210</a>     <a class="code" href="classCVC3_1_1VariableManager.html">VariableManager</a>* <a class="code" href="classCVC3_1_1VariableValue.html#a8b9cd77982124084ed87e4fde0e6460a">d_vm</a>;
<a name="l00211"></a><a class="code" href="classCVC3_1_1VariableValue.html#ac70959550ac5f1a1c22351519e5547df">00211</a>     <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1VariableValue.html#ac70959550ac5f1a1c22351519e5547df">d_refcount</a>;
<a name="l00212"></a>00212 
<a name="l00213"></a><a class="code" href="classCVC3_1_1VariableValue.html#aa38abcee5fb57b183108f033a150fdda">00213</a>     <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a> <a class="code" href="classCVC3_1_1VariableValue.html#aa38abcee5fb57b183108f033a150fdda">d_expr</a>;
<a name="l00214"></a>00214     <span class="comment">// The inverse expression (initally Null)</span>
<a name="l00215"></a><a class="code" href="classCVC3_1_1VariableValue.html#a81cdfc55101adca8df55890a92db1109">00215</a>     <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a> <a class="code" href="classCVC3_1_1VariableValue.html#a81cdfc55101adca8df55890a92db1109">d_neg</a>;
<a name="l00216"></a>00216 
<a name="l00217"></a>00217     <span class="comment">// Non-backtracking attributes (Chaff counters)</span>
<a name="l00218"></a>00218 
<a name="l00219"></a>00219     <span class="comment">// For positive instances</span>
<a name="l00220"></a><a class="code" href="classCVC3_1_1VariableValue.html#a87a7674d38dfaac8412e058b1fe6b5b2">00220</a>     <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1VariableValue.html#a87a7674d38dfaac8412e058b1fe6b5b2">d_count</a>;
<a name="l00221"></a><a class="code" href="classCVC3_1_1VariableValue.html#a09de4b7db41f8014cd373b310426bc0a">00221</a>     <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1VariableValue.html#a09de4b7db41f8014cd373b310426bc0a">d_countPrev</a>;
<a name="l00222"></a><a class="code" href="classCVC3_1_1VariableValue.html#a2eddcb5a3c79328b3883d96992d2084b">00222</a>     <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1VariableValue.html#a2eddcb5a3c79328b3883d96992d2084b">d_score</a>;
<a name="l00223"></a>00223     <span class="comment">// For negative instances</span>
<a name="l00224"></a><a class="code" href="classCVC3_1_1VariableValue.html#a986077d2b32826ad0a4b89e9e0fbf154">00224</a>     <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1VariableValue.html#a986077d2b32826ad0a4b89e9e0fbf154">d_negCount</a>;
<a name="l00225"></a><a class="code" href="classCVC3_1_1VariableValue.html#a07651f2073988b6f55e9bcef189b8101">00225</a>     <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1VariableValue.html#a07651f2073988b6f55e9bcef189b8101">d_negCountPrev</a>;
<a name="l00226"></a><a class="code" href="classCVC3_1_1VariableValue.html#a114271041ca1acf5bb747dff3e342772">00226</a>     <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1VariableValue.html#a114271041ca1acf5bb747dff3e342772">d_negScore</a>;
<a name="l00227"></a>00227     <span class="comment">// Whether the corresponding literal is in the list of active literals</span>
<a name="l00228"></a><a class="code" href="classCVC3_1_1VariableValue.html#a6b1b02477e37cbf41a32cfb98ceb1f95">00228</a>     <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1VariableValue.html#a6b1b02477e37cbf41a32cfb98ceb1f95">d_added</a>;
<a name="l00229"></a><a class="code" href="classCVC3_1_1VariableValue.html#a930417c6ef4d34ff9e6e78e301eea90a">00229</a>     <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1VariableValue.html#a930417c6ef4d34ff9e6e78e301eea90a">d_negAdded</a>;
<a name="l00230"></a>00230     <span class="comment">// Watch pointer lists</span>
<a name="l00231"></a><a class="code" href="classCVC3_1_1VariableValue.html#aff4914c922e23b0845f5f709d76c6ad1">00231</a>     std::vector&lt;std::pair&lt;Clause, int&gt; &gt; <a class="code" href="classCVC3_1_1VariableValue.html#aff4914c922e23b0845f5f709d76c6ad1">d_wp</a>;
<a name="l00232"></a><a class="code" href="classCVC3_1_1VariableValue.html#ad98bda46818737481c653e452a5236c1">00232</a>     std::vector&lt;std::pair&lt;Clause, int&gt; &gt; <a class="code" href="classCVC3_1_1VariableValue.html#ad98bda46818737481c653e452a5236c1">d_negwp</a>;
<a name="l00233"></a>00233 
<a name="l00234"></a>00234     <span class="comment">// Backtracking attributes</span>
<a name="l00235"></a>00235 
<a name="l00236"></a>00236     <span class="comment">// Value of the variable: -1 (false), 1 (true), 0 (unresolved)</span>
<a name="l00237"></a><a class="code" href="classCVC3_1_1VariableValue.html#ada795515a6c29d6301cdb643c7b0479e">00237</a>     <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;int&gt;</a>* <a class="code" href="classCVC3_1_1VariableValue.html#ada795515a6c29d6301cdb643c7b0479e">d_val</a>;
<a name="l00238"></a><a class="code" href="classCVC3_1_1VariableValue.html#a091dd8e7d8ba7c99080e169931e5007a">00238</a>     <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;int&gt;</a>* <a class="code" href="classCVC3_1_1VariableValue.html#a091dd8e7d8ba7c99080e169931e5007a">d_scope</a>; <span class="comment">// Scope level where the variable is assigned</span>
<a name="l00239"></a>00239     <span class="comment">// Theorem of the form (d_expr) or (!d_expr), reflecting d_val</span>
<a name="l00240"></a><a class="code" href="classCVC3_1_1VariableValue.html#a4f427c91c94b29fac5fe8280e2cc45d9">00240</a>     <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* <a class="code" href="classCVC3_1_1VariableValue.html#a4f427c91c94b29fac5fe8280e2cc45d9">d_thm</a>;
<a name="l00241"></a><a class="code" href="classCVC3_1_1VariableValue.html#a87f6665f00344a0503c10bbe265f2432">00241</a>     <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Clause&gt;</a>* <a class="code" href="classCVC3_1_1VariableValue.html#a87f6665f00344a0503c10bbe265f2432">d_ante</a>; <span class="comment">// Antecedent clause and index of the variable</span>
<a name="l00242"></a><a class="code" href="classCVC3_1_1VariableValue.html#a4724b62ffc80fa403bd9f4aa9aa95578">00242</a>     <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;int&gt;</a>* <a class="code" href="classCVC3_1_1VariableValue.html#a4724b62ffc80fa403bd9f4aa9aa95578">d_anteIdx</a>;
<a name="l00243"></a><a class="code" href="classCVC3_1_1VariableValue.html#a345214752d3f0349a91c60a26cf53f29">00243</a>     <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* <a class="code" href="classCVC3_1_1VariableValue.html#a345214752d3f0349a91c60a26cf53f29">d_assump</a>; <span class="comment">// Theorem generated by assump rule, if any</span>
<a name="l00244"></a>00244     <span class="comment">// Constructor is private; only class Variable can create it</span>
<a name="l00245"></a><a class="code" href="classCVC3_1_1VariableValue.html#a97912bc131f38a4d5f93bb1456118a0b">00245</a>     <a class="code" href="classCVC3_1_1VariableValue.html#a97912bc131f38a4d5f93bb1456118a0b">VariableValue</a>(<a class="code" href="classCVC3_1_1VariableManager.html">VariableManager</a>* vm, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; e)
<a name="l00246"></a>00246       : <a class="code" href="classCVC3_1_1VariableValue.html#a8b9cd77982124084ed87e4fde0e6460a">d_vm</a>(vm), <a class="code" href="classCVC3_1_1VariableValue.html#ac70959550ac5f1a1c22351519e5547df">d_refcount</a>(0), <a class="code" href="classCVC3_1_1VariableValue.html#aa38abcee5fb57b183108f033a150fdda">d_expr</a>(e),
<a name="l00247"></a>00247       <a class="code" href="classCVC3_1_1VariableValue.html#a87a7674d38dfaac8412e058b1fe6b5b2">d_count</a>(0), <a class="code" href="classCVC3_1_1VariableValue.html#a09de4b7db41f8014cd373b310426bc0a">d_countPrev</a>(0), <a class="code" href="classCVC3_1_1VariableValue.html#a2eddcb5a3c79328b3883d96992d2084b">d_score</a>(0),
<a name="l00248"></a>00248       <a class="code" href="classCVC3_1_1VariableValue.html#a986077d2b32826ad0a4b89e9e0fbf154">d_negCount</a>(0), <a class="code" href="classCVC3_1_1VariableValue.html#a07651f2073988b6f55e9bcef189b8101">d_negCountPrev</a>(0), <a class="code" href="classCVC3_1_1VariableValue.html#a114271041ca1acf5bb747dff3e342772">d_negScore</a>(0),
<a name="l00249"></a>00249       <a class="code" href="classCVC3_1_1VariableValue.html#a6b1b02477e37cbf41a32cfb98ceb1f95">d_added</a>(false), <a class="code" href="classCVC3_1_1VariableValue.html#a930417c6ef4d34ff9e6e78e301eea90a">d_negAdded</a>(false),
<a name="l00250"></a>00250       <a class="code" href="classCVC3_1_1VariableValue.html#ada795515a6c29d6301cdb643c7b0479e">d_val</a>(NULL), <a class="code" href="classCVC3_1_1VariableValue.html#a091dd8e7d8ba7c99080e169931e5007a">d_scope</a>(NULL), <a class="code" href="classCVC3_1_1VariableValue.html#a4f427c91c94b29fac5fe8280e2cc45d9">d_thm</a>(NULL),
<a name="l00251"></a>00251       <a class="code" href="classCVC3_1_1VariableValue.html#a87f6665f00344a0503c10bbe265f2432">d_ante</a>(NULL), <a class="code" href="classCVC3_1_1VariableValue.html#a4724b62ffc80fa403bd9f4aa9aa95578">d_anteIdx</a>(NULL), <a class="code" href="classCVC3_1_1VariableValue.html#a345214752d3f0349a91c60a26cf53f29">d_assump</a>(NULL) { }
<a name="l00252"></a>00252   <span class="keyword">public</span>:
<a name="l00253"></a>00253     <a class="code" href="classCVC3_1_1VariableValue.html#ac74e3ee4ad23bfeb6254a6e4769d104c">~VariableValue</a>();
<a name="l00254"></a>00254     <span class="comment">// Accessor methods</span>
<a name="l00255"></a><a class="code" href="classCVC3_1_1VariableValue.html#a5e3bf7de7f3bd16d1b274e16d4292893">00255</a>     <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; <a class="code" href="classCVC3_1_1VariableValue.html#a5e3bf7de7f3bd16d1b274e16d4292893">getExpr</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#aa38abcee5fb57b183108f033a150fdda">d_expr</a>; }
<a name="l00256"></a>00256 
<a name="l00257"></a><a class="code" href="classCVC3_1_1VariableValue.html#a798fc6fa670819203aa7e2ecf3a609de">00257</a>     <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; <a class="code" href="classCVC3_1_1VariableValue.html#a798fc6fa670819203aa7e2ecf3a609de">getNegExpr</a>()<span class="keyword"> const </span>{
<a name="l00258"></a>00258       <span class="keywordflow">if</span>(<a class="code" href="classCVC3_1_1VariableValue.html#a81cdfc55101adca8df55890a92db1109">d_neg</a>.<a class="code" href="group__ExprPkg.html#ga0265d1ca42fa59c95aaff3ca675b6504">isNull</a>()) {
<a name="l00259"></a>00259   <span class="keyword">const_cast&lt;</span><a class="code" href="classCVC3_1_1VariableValue.html">VariableValue</a>*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#a81cdfc55101adca8df55890a92db1109">d_neg</a>
<a name="l00260"></a>00260     = <a class="code" href="classCVC3_1_1VariableValue.html#aa38abcee5fb57b183108f033a150fdda">d_expr</a>.<a class="code" href="group__ExprPkg.html#gab1ce461dc931af73bf04e88c8d37dcbc">negate</a>();
<a name="l00261"></a>00261       }
<a name="l00262"></a>00262       <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a81cdfc55101adca8df55890a92db1109">d_neg</a>;
<a name="l00263"></a>00263     }
<a name="l00264"></a>00264 
<a name="l00265"></a><a class="code" href="classCVC3_1_1VariableValue.html#a6f83bd36830c43e35d21984cd5b3a3ff">00265</a>     <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1VariableValue.html#a6f83bd36830c43e35d21984cd5b3a3ff">getValue</a>()<span class="keyword"> const </span>{
<a name="l00266"></a>00266       <span class="keywordflow">if</span>(<a class="code" href="classCVC3_1_1VariableValue.html#ada795515a6c29d6301cdb643c7b0479e">d_val</a>==NULL) <span class="keywordflow">return</span> 0;
<a name="l00267"></a>00267       <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#ada795515a6c29d6301cdb643c7b0479e">d_val</a>-&gt;<a class="code" href="classCVC3_1_1CDO.html#a818fcacc7b30b0f05347335ab125626c">get</a>();
<a name="l00268"></a>00268     }
<a name="l00269"></a>00269     
<a name="l00270"></a><a class="code" href="classCVC3_1_1VariableValue.html#aabc451feb269d84dc19bdc1148bc8af8">00270</a>     <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1VariableValue.html#aabc451feb269d84dc19bdc1148bc8af8">getScope</a>()<span class="keyword"> const </span>{
<a name="l00271"></a>00271       <span class="keywordflow">if</span>(<a class="code" href="classCVC3_1_1VariableValue.html#a091dd8e7d8ba7c99080e169931e5007a">d_scope</a>==NULL) <span class="keywordflow">return</span> 0;
<a name="l00272"></a>00272       <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a091dd8e7d8ba7c99080e169931e5007a">d_scope</a>-&gt;<a class="code" href="classCVC3_1_1CDO.html#a818fcacc7b30b0f05347335ab125626c">get</a>();
<a name="l00273"></a>00273     }
<a name="l00274"></a>00274 
<a name="l00275"></a><a class="code" href="classCVC3_1_1VariableValue.html#a2a186bfae906f1fa27d64457f2428125">00275</a>     <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>&amp; <a class="code" href="classCVC3_1_1VariableValue.html#a2a186bfae906f1fa27d64457f2428125">getTheorem</a>()<span class="keyword"> const </span>{
<a name="l00276"></a>00276       <span class="keyword">static</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a> null;
<a name="l00277"></a>00277       <span class="keywordflow">if</span>(<a class="code" href="classCVC3_1_1VariableValue.html#a4f427c91c94b29fac5fe8280e2cc45d9">d_thm</a>==NULL) <span class="keywordflow">return</span> null;
<a name="l00278"></a>00278       <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a4f427c91c94b29fac5fe8280e2cc45d9">d_thm</a>-&gt;<a class="code" href="classCVC3_1_1CDO.html#a818fcacc7b30b0f05347335ab125626c">get</a>();
<a name="l00279"></a>00279     }
<a name="l00280"></a>00280 
<a name="l00281"></a><a class="code" href="classCVC3_1_1VariableValue.html#aac80324d8bc82742954381946066c103">00281</a>     <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Clause.html" title="A class representing a CNF clause (a smart pointer)">Clause</a>&amp; <a class="code" href="classCVC3_1_1VariableValue.html#aac80324d8bc82742954381946066c103">getAntecedent</a>()<span class="keyword"> const </span>{
<a name="l00282"></a>00282       <span class="keyword">static</span> <a class="code" href="classCVC3_1_1Clause.html" title="A class representing a CNF clause (a smart pointer)">Clause</a> null;
<a name="l00283"></a>00283       <span class="keywordflow">if</span>(<a class="code" href="classCVC3_1_1VariableValue.html#a87f6665f00344a0503c10bbe265f2432">d_ante</a>==NULL) <span class="keywordflow">return</span> null;
<a name="l00284"></a>00284       <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a87f6665f00344a0503c10bbe265f2432">d_ante</a>-&gt;<a class="code" href="classCVC3_1_1CDO.html#a818fcacc7b30b0f05347335ab125626c">get</a>();
<a name="l00285"></a>00285     }
<a name="l00286"></a>00286 
<a name="l00287"></a><a class="code" href="classCVC3_1_1VariableValue.html#a5ead45485317b8beb32d1489d71b7274">00287</a>     <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1VariableValue.html#a5ead45485317b8beb32d1489d71b7274">getAntecedentIdx</a>()<span class="keyword"> const </span>{
<a name="l00288"></a>00288       <span class="keywordflow">if</span>(<a class="code" href="classCVC3_1_1VariableValue.html#a4724b62ffc80fa403bd9f4aa9aa95578">d_anteIdx</a>==NULL) <span class="keywordflow">return</span> 0;
<a name="l00289"></a>00289       <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a4724b62ffc80fa403bd9f4aa9aa95578">d_anteIdx</a>-&gt;<a class="code" href="classCVC3_1_1CDO.html#a818fcacc7b30b0f05347335ab125626c">get</a>();
<a name="l00290"></a>00290     }
<a name="l00291"></a>00291     
<a name="l00292"></a><a class="code" href="classCVC3_1_1VariableValue.html#a600aed64a238804fc7e6e5717a07a6f5">00292</a>     <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>&amp; <a class="code" href="classCVC3_1_1VariableValue.html#a600aed64a238804fc7e6e5717a07a6f5">getAssumpThm</a>()<span class="keyword"> const </span>{
<a name="l00293"></a>00293       <span class="keyword">static</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a> null;
<a name="l00294"></a>00294       <span class="keywordflow">if</span>(<a class="code" href="classCVC3_1_1VariableValue.html#a345214752d3f0349a91c60a26cf53f29">d_assump</a>==NULL) <span class="keywordflow">return</span> null;
<a name="l00295"></a>00295       <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a345214752d3f0349a91c60a26cf53f29">d_assump</a>-&gt;<a class="code" href="classCVC3_1_1CDO.html#a818fcacc7b30b0f05347335ab125626c">get</a>();
<a name="l00296"></a>00296     }
<a name="l00297"></a>00297 
<a name="l00298"></a>00298     <span class="comment">// Setting the attributes: it can be either derived from the</span>
<a name="l00299"></a>00299     <span class="comment">// antecedent clause, or by a theorem</span>
<a name="l00300"></a>00300     <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1VariableValue.html#aefcf6649a5dcfa1382c3a296659b57a5">setValue</a>(<span class="keywordtype">int</span> val, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Clause.html" title="A class representing a CNF clause (a smart pointer)">Clause</a>&amp; c, <span class="keywordtype">int</span> idx);
<a name="l00301"></a>00301     <span class="comment">// The theorem&#39;s expr must be the same as the variable&#39;s expr or</span>
<a name="l00302"></a>00302     <span class="comment">// its negation</span>
<a name="l00303"></a>00303     <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1VariableValue.html#aefcf6649a5dcfa1382c3a296659b57a5">setValue</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>&amp; thm, <span class="keywordtype">int</span> scope);
<a name="l00304"></a>00304 
<a name="l00305"></a>00305     <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1VariableValue.html#abfd2af792b3d79935abf5fa2db7e8218">setAssumpThm</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>&amp; a, <span class="keywordtype">int</span> scope);
<a name="l00306"></a>00306 
<a name="l00307"></a>00307     <span class="comment">// Chaff counters: read and modified by reference</span>
<a name="l00308"></a><a class="code" href="classCVC3_1_1VariableValue.html#acb5347247874196d09dcfb829dac80a4">00308</a>     <span class="keywordtype">unsigned</span>&amp; <a class="code" href="classCVC3_1_1VariableValue.html#acb5347247874196d09dcfb829dac80a4">count</a>(<span class="keywordtype">bool</span> neg) {
<a name="l00309"></a>00309       <span class="keywordflow">if</span>(neg) <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a986077d2b32826ad0a4b89e9e0fbf154">d_negCount</a>;
<a name="l00310"></a>00310       <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a87a7674d38dfaac8412e058b1fe6b5b2">d_count</a>;
<a name="l00311"></a>00311     }
<a name="l00312"></a><a class="code" href="classCVC3_1_1VariableValue.html#a64350354329075928e80eb4f133521ad">00312</a>     <span class="keywordtype">unsigned</span>&amp; <a class="code" href="classCVC3_1_1VariableValue.html#a64350354329075928e80eb4f133521ad">countPrev</a>(<span class="keywordtype">bool</span> neg) {
<a name="l00313"></a>00313       <span class="keywordflow">if</span>(neg) <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a07651f2073988b6f55e9bcef189b8101">d_negCountPrev</a>;
<a name="l00314"></a>00314       <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a09de4b7db41f8014cd373b310426bc0a">d_countPrev</a>;
<a name="l00315"></a>00315     }
<a name="l00316"></a><a class="code" href="classCVC3_1_1VariableValue.html#ad585655ed33dcc2c541d300b09370083">00316</a>     <span class="keywordtype">int</span>&amp; <a class="code" href="classCVC3_1_1VariableValue.html#ad585655ed33dcc2c541d300b09370083">score</a>(<span class="keywordtype">bool</span> neg) {
<a name="l00317"></a>00317       <span class="keywordflow">if</span>(neg) <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a114271041ca1acf5bb747dff3e342772">d_negScore</a>;
<a name="l00318"></a>00318       <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a2eddcb5a3c79328b3883d96992d2084b">d_score</a>;
<a name="l00319"></a>00319     }
<a name="l00320"></a><a class="code" href="classCVC3_1_1VariableValue.html#ab9c05cca095742f0fd66d7084084e237">00320</a>     <span class="keywordtype">bool</span>&amp; <a class="code" href="classCVC3_1_1VariableValue.html#ab9c05cca095742f0fd66d7084084e237">added</a>(<span class="keywordtype">bool</span> neg) {
<a name="l00321"></a>00321       <span class="keywordflow">if</span>(neg) <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a930417c6ef4d34ff9e6e78e301eea90a">d_negAdded</a>;
<a name="l00322"></a>00322       <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableValue.html#a6b1b02477e37cbf41a32cfb98ceb1f95">d_added</a>;
<a name="l00323"></a>00323     }
<a name="l00324"></a>00324 
<a name="l00325"></a>00325     <span class="comment">// Memory management</span>
<a name="l00326"></a><a class="code" href="classCVC3_1_1VariableValue.html#a4d31224a03391dd9c418da7590e3cc92">00326</a>     <span class="keywordtype">void</span>* <a class="code" href="classCVC3_1_1VariableValue.html#a4d31224a03391dd9c418da7590e3cc92">operator new</a>(<span class="keywordtype">size_t</span> size, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00327"></a>00327       <span class="keywordflow">return</span> mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#a3db7efbc4b956bd423a73e1157d70ce0">newData</a>(size);
<a name="l00328"></a>00328     }
<a name="l00329"></a><a class="code" href="classCVC3_1_1VariableValue.html#a00f105f23de53316c9f6c0d799a1caed">00329</a>     <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1VariableValue.html#a00f105f23de53316c9f6c0d799a1caed">operator delete</a>(<span class="keywordtype">void</span>* pMem, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00330"></a>00330       mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#ad29fac88d3a07566d9a8f9dc8d8e059c">deleteData</a>(pMem);
<a name="l00331"></a>00331     }
<a name="l00332"></a><a class="code" href="classCVC3_1_1VariableValue.html#afffed1d47c732ae86261cff5db8387de">00332</a>     <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1VariableValue.html#afffed1d47c732ae86261cff5db8387de">operator delete</a>(<span class="keywordtype">void</span>*) { }
<a name="l00333"></a>00333 
<a name="l00334"></a>00334     <span class="comment">// friend methods</span>
<a name="l00335"></a>00335     <span class="keyword">friend</span> std::ostream&amp; <a class="code" href="classCVC3_1_1VariableValue.html#a98e3d083ca34ed383ea51259c73fc81b">operator&lt;&lt;</a>(std::ostream&amp; os, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1VariableValue.html">VariableValue</a>&amp; v);
<a name="l00336"></a><a class="code" href="classCVC3_1_1VariableValue.html#ab6a288d87c21f6e977bd9daa2a34946f">00336</a>     <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1VariableValue.html#ab6a288d87c21f6e977bd9daa2a34946f">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1VariableValue.html">VariableValue</a>&amp; v1, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1VariableValue.html">VariableValue</a>&amp; v2) {
<a name="l00337"></a>00337       <span class="keywordflow">return</span> v1.<a class="code" href="classCVC3_1_1VariableValue.html#aa38abcee5fb57b183108f033a150fdda">d_expr</a> == v2.<a class="code" href="classCVC3_1_1VariableValue.html#aa38abcee5fb57b183108f033a150fdda">d_expr</a>;
<a name="l00338"></a>00338     }
<a name="l00339"></a>00339   }; <span class="comment">// end of class VariableValue</span>
<a name="l00340"></a>00340 
<a name="l00341"></a>00341     <span class="comment">// Accessing Chaff counters (read and modified by reference)</span>
<a name="l00342"></a><a class="code" href="classCVC3_1_1Variable.html#ac78bae977cd6dead5e79debc77f52efc">00342</a>   <span class="keyword">inline</span> <span class="keywordtype">unsigned</span>&amp; <a class="code" href="classCVC3_1_1Variable.html#ac78bae977cd6dead5e79debc77f52efc">Variable::count</a>(<span class="keywordtype">bool</span> neg) { <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a>-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#acb5347247874196d09dcfb829dac80a4">count</a>(neg); }
<a name="l00343"></a><a class="code" href="classCVC3_1_1Variable.html#acc8e18908c0b3c74811225c58f57c50d">00343</a>   <span class="keyword">inline</span> <span class="keywordtype">unsigned</span>&amp; <a class="code" href="classCVC3_1_1Variable.html#acc8e18908c0b3c74811225c58f57c50d">Variable::countPrev</a>(<span class="keywordtype">bool</span> neg)
<a name="l00344"></a>00344     { <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a>-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#a64350354329075928e80eb4f133521ad">countPrev</a>(neg); }
<a name="l00345"></a><a class="code" href="classCVC3_1_1Variable.html#aa4c74c18d5e3b6dff3a87dbb9600ea54">00345</a>   <span class="keyword">inline</span> <span class="keywordtype">int</span>&amp; <a class="code" href="classCVC3_1_1Variable.html#aa4c74c18d5e3b6dff3a87dbb9600ea54">Variable::score</a>(<span class="keywordtype">bool</span> neg) { <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a>-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#ad585655ed33dcc2c541d300b09370083">score</a>(neg); }
<a name="l00346"></a><a class="code" href="classCVC3_1_1Variable.html#a0e4d827e11f6308f9c9bc957f0f7d2f7">00346</a>   <span class="keyword">inline</span> <span class="keywordtype">bool</span>&amp; <a class="code" href="classCVC3_1_1Variable.html#a0e4d827e11f6308f9c9bc957f0f7d2f7">Variable::added</a>(<span class="keywordtype">bool</span> neg) { <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a>-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#ab9c05cca095742f0fd66d7084084e237">added</a>(neg); }
<a name="l00347"></a>00347 
<a name="l00348"></a><a class="code" href="classCVC3_1_1Variable.html#ac14d877633308fefc91fea8a07005fee">00348</a>   <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1Variable.html#ac78bae977cd6dead5e79debc77f52efc">Variable::count</a>(<span class="keywordtype">bool</span> neg)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a>-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#acb5347247874196d09dcfb829dac80a4">count</a>(neg); }
<a name="l00349"></a><a class="code" href="classCVC3_1_1Variable.html#a987bd4125ec63afc7577b3dbf9cb7b76">00349</a>   <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1Variable.html#acc8e18908c0b3c74811225c58f57c50d">Variable::countPrev</a>(<span class="keywordtype">bool</span> neg)<span class="keyword"> const</span>
<a name="l00350"></a>00350 <span class="keyword">    </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a>-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#a64350354329075928e80eb4f133521ad">countPrev</a>(neg); }
<a name="l00351"></a><a class="code" href="classCVC3_1_1Variable.html#a81e07d7b4272797fb31ed99ab88359ca">00351</a>   <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1Variable.html#aa4c74c18d5e3b6dff3a87dbb9600ea54">Variable::score</a>(<span class="keywordtype">bool</span> neg)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a>-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#ad585655ed33dcc2c541d300b09370083">score</a>(neg); }
<a name="l00352"></a><a class="code" href="classCVC3_1_1Variable.html#ab7d99f6dfbadfbbf71ee23a4fd49a5e0">00352</a>   <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1Variable.html#a0e4d827e11f6308f9c9bc957f0f7d2f7">Variable::added</a>(<span class="keywordtype">bool</span> neg)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a>-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#ab9c05cca095742f0fd66d7084084e237">added</a>(neg); }
<a name="l00353"></a>00353 
<a name="l00354"></a><a class="code" href="classCVC3_1_1Variable.html#a561c4d0ef9d246de12d5b22aef375315">00354</a>   <span class="keyword">inline</span> std::vector&lt;std::pair&lt;Clause, int&gt; &gt;&amp; <a class="code" href="classCVC3_1_1Variable.html#a561c4d0ef9d246de12d5b22aef375315">Variable::wp</a>(<span class="keywordtype">bool</span> neg)<span class="keyword"> const </span>{
<a name="l00355"></a>00355     <span class="keywordflow">if</span>(neg) <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a>-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#ad98bda46818737481c653e452a5236c1">d_negwp</a>;
<a name="l00356"></a>00356     <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Variable.html#aac695e278985a090521f129729281189">d_val</a>-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#aff4914c922e23b0845f5f709d76c6ad1">d_wp</a>;
<a name="l00357"></a>00357   }
<a name="l00358"></a>00358 
<a name="l00359"></a>00359 
<a name="l00360"></a>00360   <span class="keyword">class </span><a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html" title="Notifies VariableManager before and after each pop()">VariableManagerNotifyObj</a>;
<a name="l00361"></a>00361 
<a name="l00362"></a>00362   <span class="comment">// The manager class</span>
<a name="l00363"></a><a class="code" href="classCVC3_1_1VariableManager.html">00363</a>   <span class="keyword">class </span><a class="code" href="classCVC3_1_1VariableManager.html">VariableManager</a> {
<a name="l00364"></a><a class="code" href="classCVC3_1_1VariableManager.html#a9b0a9a1a9dc58fc36b535bb33c612b49">00364</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Variable.html">Variable</a>;
<a name="l00365"></a><a class="code" href="classCVC3_1_1VariableManager.html#a03a95394237b65c38d2dc8e7af617131">00365</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1VariableValue.html">VariableValue</a>;
<a name="l00366"></a>00366   <span class="keyword">private</span>:
<a name="l00367"></a><a class="code" href="classCVC3_1_1VariableManager.html#aa9a63ca44ee29e3e11b843abf64680fd">00367</a>     <a class="code" href="classCVC3_1_1ContextManager.html" title="Manager for multiple contexts. Also holds current context.">ContextManager</a>* <a class="code" href="classCVC3_1_1VariableManager.html#aa9a63ca44ee29e3e11b843abf64680fd">d_cm</a>;
<a name="l00368"></a><a class="code" href="classCVC3_1_1VariableManager.html#a19ff37ae7bc9f7e807cd66aa8e5f18f4">00368</a>     <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* <a class="code" href="classCVC3_1_1VariableManager.html#a19ff37ae7bc9f7e807cd66aa8e5f18f4">d_mm</a>;
<a name="l00369"></a><a class="code" href="classCVC3_1_1VariableManager.html#aade2fac567b8a5e09a275e409b132e21">00369</a>     <a class="code" href="classCVC3_1_1SearchEngineRules.html" title="API to the proof rules for the Search Engines.">SearchEngineRules</a>* <a class="code" href="classCVC3_1_1VariableManager.html#aade2fac567b8a5e09a275e409b132e21">d_rules</a>;
<a name="l00370"></a><a class="code" href="classCVC3_1_1VariableManager.html#a17f4827ea92ce6e1ad0a1d5fa5726146">00370</a>     <a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html" title="Notifies VariableManager before and after each pop()">VariableManagerNotifyObj</a>* <a class="code" href="classCVC3_1_1VariableManager.html#a17f4827ea92ce6e1ad0a1d5fa5726146">d_notifyObj</a>;<span class="comment"></span>
<a name="l00371"></a>00371 <span class="comment">    //! Disable the garbage collection</span>
<a name="l00372"></a>00372 <span class="comment"></span><span class="comment">    /*! Normally, it&#39;s set in the destructor, so that we can delete</span>
<a name="l00373"></a>00373 <span class="comment">     * all remaining variables without GC getting in the way</span>
<a name="l00374"></a>00374 <span class="comment">     */</span>
<a name="l00375"></a><a class="code" href="classCVC3_1_1VariableManager.html#a87d086a76555966bb4e6f62b9e32bbac">00375</a>     <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1VariableManager.html#a87d086a76555966bb4e6f62b9e32bbac" title="Disable the garbage collection.">d_disableGC</a>;<span class="comment"></span>
<a name="l00376"></a>00376 <span class="comment">    //! Postpone garbage collection</span>
<a name="l00377"></a><a class="code" href="classCVC3_1_1VariableManager.html#adcdbfcae4aa2f069cfcb15d9b308b727">00377</a> <span class="comment"></span>    <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1VariableManager.html#adcdbfcae4aa2f069cfcb15d9b308b727" title="Postpone garbage collection.">d_postponeGC</a>;<span class="comment"></span>
<a name="l00378"></a>00378 <span class="comment">    //! Vector of variables to be deleted (postponed during pop())</span>
<a name="l00379"></a><a class="code" href="classCVC3_1_1VariableManager.html#af71a9d9933957edede81db48be5da5a3">00379</a> <span class="comment"></span>    std::vector&lt;VariableValue*&gt; <a class="code" href="classCVC3_1_1VariableManager.html#af71a9d9933957edede81db48be5da5a3" title="Vector of variables to be deleted (postponed during pop())">d_deleted</a>;
<a name="l00380"></a>00380     
<a name="l00381"></a>00381     <span class="comment">// Hash only by the Expr</span>
<a name="l00382"></a><a class="code" href="classCVC3_1_1VariableManager_1_1HashLV.html">00382</a>     <span class="keyword">class </span><a class="code" href="classCVC3_1_1VariableManager_1_1HashLV.html">HashLV</a> {
<a name="l00383"></a>00383     <span class="keyword">public</span>:
<a name="l00384"></a><a class="code" href="classCVC3_1_1VariableManager_1_1HashLV.html#a84e1f54c7cd36f19abd50c6a26362e73">00384</a>       <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1VariableManager_1_1HashLV.html#a84e1f54c7cd36f19abd50c6a26362e73">operator()</a>(<a class="code" href="classCVC3_1_1VariableValue.html">VariableValue</a>* v)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> v-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#a5e3bf7de7f3bd16d1b274e16d4292893">getExpr</a>().<a class="code" href="group__ExprPkg.html#gadf3d59da15e4f78daf0c41ef7779a749">hash</a>(); }
<a name="l00385"></a>00385     };
<a name="l00386"></a><a class="code" href="classCVC3_1_1VariableManager_1_1EqLV.html">00386</a>     <span class="keyword">class </span><a class="code" href="classCVC3_1_1VariableManager_1_1EqLV.html">EqLV</a> {
<a name="l00387"></a>00387     <span class="keyword">public</span>:
<a name="l00388"></a><a class="code" href="classCVC3_1_1VariableManager_1_1EqLV.html#a0f76612cb02a63da4ffe792a65a00723">00388</a>       <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1VariableManager_1_1EqLV.html#a0f76612cb02a63da4ffe792a65a00723">operator()</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1VariableValue.html">VariableValue</a>* lv1, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1VariableValue.html">VariableValue</a>* lv2)<span class="keyword"> const</span>
<a name="l00389"></a>00389 <span class="keyword">  </span>{ <span class="keywordflow">return</span> lv1-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#a5e3bf7de7f3bd16d1b274e16d4292893">getExpr</a>() == lv2-&gt;<a class="code" href="classCVC3_1_1VariableValue.html#a5e3bf7de7f3bd16d1b274e16d4292893">getExpr</a>(); }
<a name="l00390"></a>00390     };
<a name="l00391"></a>00391 
<a name="l00392"></a>00392     <span class="comment">// Hash set for existing variables</span>
<a name="l00393"></a><a class="code" href="classCVC3_1_1VariableManager.html#acc3ee56d53bab748a41b71b9986eaab9">00393</a>     <span class="keyword">typedef</span> <a class="code" href="classHash_1_1hash__set.html">std::hash_set&lt;VariableValue*, HashLV, EqLV&gt;</a> <a class="code" href="classCVC3_1_1VariableManager.html#acc3ee56d53bab748a41b71b9986eaab9">VariableValueSet</a>;
<a name="l00394"></a><a class="code" href="classCVC3_1_1VariableManager.html#aeebf5ed3c88627c0b43f61c4f1ba42e5">00394</a>     <a class="code" href="classHash_1_1hash__set.html">VariableValueSet</a> <a class="code" href="classCVC3_1_1VariableManager.html#aeebf5ed3c88627c0b43f61c4f1ba42e5">d_varSet</a>;
<a name="l00395"></a>00395     
<a name="l00396"></a>00396     <span class="comment">// Creating unique VariableValue</span>
<a name="l00397"></a>00397     <a class="code" href="classCVC3_1_1VariableValue.html">VariableValue</a>* <a class="code" href="classCVC3_1_1VariableManager.html#a2052323b56685b21f16d1062917dfe38">newVariableValue</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; e);
<a name="l00398"></a>00398 
<a name="l00399"></a>00399   <span class="keyword">public</span>:
<a name="l00400"></a>00400     <span class="comment">// Constructor.  mmFlag indicates which memory manager to use.</span>
<a name="l00401"></a>00401     <a class="code" href="classCVC3_1_1VariableManager.html#a7faa284a5e5a72a87426de1f5cbf1bc9">VariableManager</a>(<a class="code" href="classCVC3_1_1ContextManager.html" title="Manager for multiple contexts. Also holds current context.">ContextManager</a>* cm, <a class="code" href="classCVC3_1_1SearchEngineRules.html" title="API to the proof rules for the Search Engines.">SearchEngineRules</a>* rules,
<a name="l00402"></a>00402         <span class="keyword">const</span> std::string&amp; mmFlag);
<a name="l00403"></a>00403     <span class="comment">// Destructor</span>
<a name="l00404"></a>00404     <a class="code" href="classCVC3_1_1VariableManager.html#a321959b4af5952884d5215ca1eeb3bcc">~VariableManager</a>();
<a name="l00405"></a>00405 <span class="comment"></span>
<a name="l00406"></a>00406 <span class="comment">    //! Garbage collect VariableValue pointer</span>
<a name="l00407"></a>00407 <span class="comment"></span>    <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1VariableManager.html#a5f35575560aac2140e817aa49190894d" title="Garbage collect VariableValue pointer.">gc</a>(<a class="code" href="classCVC3_1_1VariableValue.html">VariableValue</a>* v);<span class="comment"></span>
<a name="l00408"></a>00408 <span class="comment">    //! Postpone garbage collection</span>
<a name="l00409"></a><a class="code" href="classCVC3_1_1VariableManager.html#a04703a93a52748b0a2e4b31cc4f42ea2">00409</a> <span class="comment"></span>    <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1VariableManager.html#a04703a93a52748b0a2e4b31cc4f42ea2" title="Postpone garbage collection.">postponeGC</a>() { <a class="code" href="classCVC3_1_1VariableManager.html#adcdbfcae4aa2f069cfcb15d9b308b727" title="Postpone garbage collection.">d_postponeGC</a> = <span class="keyword">true</span>; }<span class="comment"></span>
<a name="l00410"></a>00410 <span class="comment">    //! Resume garbage collection</span>
<a name="l00411"></a>00411 <span class="comment"></span>    <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1VariableManager.html#ad7d360514fcfd910668eabd097dbe81c" title="Resume garbage collection.">resumeGC</a>();
<a name="l00412"></a>00412     <span class="comment">// Accessors</span>
<a name="l00413"></a><a class="code" href="classCVC3_1_1VariableManager.html#a02e36e773779bc9e17472e265b70627c">00413</a>     <a class="code" href="classCVC3_1_1ContextManager.html" title="Manager for multiple contexts. Also holds current context.">ContextManager</a>* <a class="code" href="classCVC3_1_1VariableManager.html#a02e36e773779bc9e17472e265b70627c">getCM</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableManager.html#aa9a63ca44ee29e3e11b843abf64680fd">d_cm</a>; }
<a name="l00414"></a><a class="code" href="classCVC3_1_1VariableManager.html#a0d68fbe0c1eb8b19d8d91984c290ef28">00414</a>     <a class="code" href="classCVC3_1_1SearchEngineRules.html" title="API to the proof rules for the Search Engines.">SearchEngineRules</a>* <a class="code" href="classCVC3_1_1VariableManager.html#a0d68fbe0c1eb8b19d8d91984c290ef28">getRules</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1VariableManager.html#aade2fac567b8a5e09a275e409b132e21">d_rules</a>; }
<a name="l00415"></a>00415 
<a name="l00416"></a>00416   }; <span class="comment">// end of class VariableManager</span>
<a name="l00417"></a>00417 
<a name="l00418"></a>00418 <span class="comment">/*****************************************************************************/</span><span class="comment"></span>
<a name="l00419"></a>00419 <span class="comment">/*!</span>
<a name="l00420"></a>00420 <span class="comment"> *\class VariableManagerNotifyObj</span>
<a name="l00421"></a>00421 <span class="comment"> *\brief Notifies VariableManager before and after each pop()</span>
<a name="l00422"></a>00422 <span class="comment"> *</span>
<a name="l00423"></a>00423 <span class="comment"> * Author: Sergey Berezin</span>
<a name="l00424"></a>00424 <span class="comment"> *</span>
<a name="l00425"></a>00425 <span class="comment"> * Created: Tue Mar  1 13:52:28 2005</span>
<a name="l00426"></a>00426 <span class="comment"> *</span>
<a name="l00427"></a>00427 <span class="comment"> * Disables the deletion of VariableValue objects during context</span>
<a name="l00428"></a>00428 <span class="comment"> * restoration (backtracking).  This solves the problem of circular</span>
<a name="l00429"></a>00429 <span class="comment"> * dependencies (e.g. a Variable pointing to its antecedent Clause).</span>
<a name="l00430"></a>00430 <span class="comment"> */</span>
<a name="l00431"></a>00431 <span class="comment">/*****************************************************************************/</span>
<a name="l00432"></a><a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html">00432</a>   <span class="keyword">class </span><a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html" title="Notifies VariableManager before and after each pop()">VariableManagerNotifyObj</a>: <span class="keyword">public</span> <a class="code" href="classCVC3_1_1ContextNotifyObj.html">ContextNotifyObj</a> {
<a name="l00433"></a><a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html#a24de96df43ce7e50a3c142fb04790c1c">00433</a>     <a class="code" href="classCVC3_1_1VariableManager.html">VariableManager</a>* <a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html#a24de96df43ce7e50a3c142fb04790c1c">d_vm</a>;
<a name="l00434"></a>00434   <span class="keyword">public</span>:<span class="comment"></span>
<a name="l00435"></a>00435 <span class="comment">    //! Constructor</span>
<a name="l00436"></a><a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html#a21ace78bece400d43aa42506d9256d68">00436</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html#a21ace78bece400d43aa42506d9256d68" title="Constructor.">VariableManagerNotifyObj</a>(<a class="code" href="classCVC3_1_1VariableManager.html">VariableManager</a>* vm, <a class="code" href="classCVC3_1_1Context.html">Context</a>* cxt)
<a name="l00437"></a>00437     : <a class="code" href="classCVC3_1_1ContextNotifyObj.html">ContextNotifyObj</a>(cxt), <a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html#a24de96df43ce7e50a3c142fb04790c1c">d_vm</a>(vm) { }
<a name="l00438"></a>00438     
<a name="l00439"></a><a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html#a67ee9f591420b325b6f3bf88fa78d9b1">00439</a>     <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html#a67ee9f591420b325b6f3bf88fa78d9b1">notifyPre</a>(<span class="keywordtype">void</span>) { <a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html#a24de96df43ce7e50a3c142fb04790c1c">d_vm</a>-&gt;<a class="code" href="classCVC3_1_1VariableManager.html#a04703a93a52748b0a2e4b31cc4f42ea2" title="Postpone garbage collection.">postponeGC</a>(); }
<a name="l00440"></a><a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html#a1c7a6e4ffe9b150d74a382f33ea561e5">00440</a>     <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html#a1c7a6e4ffe9b150d74a382f33ea561e5">notify</a>(<span class="keywordtype">void</span>) { <a class="code" href="classCVC3_1_1VariableManagerNotifyObj.html#a24de96df43ce7e50a3c142fb04790c1c">d_vm</a>-&gt;<a class="code" href="classCVC3_1_1VariableManager.html#ad7d360514fcfd910668eabd097dbe81c" title="Resume garbage collection.">resumeGC</a>(); }
<a name="l00441"></a>00441   };
<a name="l00442"></a>00442 
<a name="l00443"></a>00443 
<a name="l00444"></a>00444 } <span class="comment">// end of namespace CVC3</span>
<a name="l00445"></a>00445 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Wed Sep 7 2011 for CVC3 by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
</body>
</html>