Sophie

Sophie

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

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: expr_value.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">expr_value.h</div>  </div>
</div>
<div class="contents">
<a href="expr__value_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 expr_value.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 Feb  7 15:07:18 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"> * Class ExprValue: the value holding class of Expr.  No one should</span>
<a name="l00019"></a>00019 <span class="comment"> * use it directly; use Expr API instead.  To enforce that, the</span>
<a name="l00020"></a>00020 <span class="comment"> * constructors are made protected, and only Expr, ExprManager, and</span>
<a name="l00021"></a>00021 <span class="comment"> * subclasses can use them.</span>
<a name="l00022"></a>00022 <span class="comment"> */</span>
<a name="l00023"></a>00023 <span class="comment">/*****************************************************************************/</span>
<a name="l00024"></a>00024 
<a name="l00025"></a>00025 <span class="comment">// *** HACK ATTACK *** (trick from Aaron Stump&#39;s code)</span>
<a name="l00026"></a>00026 
<a name="l00027"></a>00027 <span class="comment">// In order to inline the Expr constructors (for efficiency), this</span>
<a name="l00028"></a>00028 <span class="comment">// file (expr_value.h) must be included in expr.h.  However, we also</span>
<a name="l00029"></a>00029 <span class="comment">// need to include expr.h here, hence, circular dependency.  A way to</span>
<a name="l00030"></a>00030 <span class="comment">// break it is to include expr_value.h in the middle of expr.h after</span>
<a name="l00031"></a>00031 <span class="comment">// the definition of class Expr, but before the definition of its</span>
<a name="l00032"></a>00032 <span class="comment">// inlined methods.  So, expr.h included below will also suck in</span>
<a name="l00033"></a>00033 <span class="comment">// expr_value.h recursively, meaning that we then should skip the rest</span>
<a name="l00034"></a>00034 <span class="comment">// of the file (since it&#39;s already been included). </span>
<a name="l00035"></a>00035 
<a name="l00036"></a>00036 <span class="comment">// That&#39;s why expr.h is outside of #ifndef.  The same is true for</span>
<a name="l00037"></a>00037 <span class="comment">// type.h and theorem.h.</span>
<a name="l00038"></a>00038 
<a name="l00039"></a>00039 <span class="preprocessor">#ifndef _cvc3__expr_h_</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span><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="l00041"></a>00041 <span class="preprocessor">#endif</span>
<a name="l00042"></a>00042 <span class="preprocessor"></span>
<a name="l00043"></a>00043 <span class="preprocessor">#ifndef _cvc3__expr_value_h_</span>
<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define _cvc3__expr_value_h_</span>
<a name="l00045"></a>00045 <span class="preprocessor"></span>
<a name="l00046"></a>00046 <span class="preprocessor">#include &quot;<a class="code" href="theorem_8h.html">theorem.h</a>&quot;</span>
<a name="l00047"></a>00047 <span class="preprocessor">#include &quot;<a class="code" href="type_8h.html">type.h</a>&quot;</span>
<a name="l00048"></a>00048 
<a name="l00049"></a>00049 <span class="comment">// The prime number used in the hash function for a vector of elements</span>
<a name="l00050"></a><a class="code" href="expr__value_8h.html#ac4add2a227a10511e0128d63952030e8">00050</a> <span class="preprocessor">#define PRIME 131</span>
<a name="l00051"></a>00051 <span class="preprocessor"></span>
<a name="l00052"></a>00052 <span class="keyword">namespace </span>CVC3 {
<a name="l00053"></a>00053   
<a name="l00054"></a>00054 <span class="comment">/*****************************************************************************/</span><span class="comment"></span>
<a name="l00055"></a>00055 <span class="comment">/*!</span>
<a name="l00056"></a>00056 <span class="comment"> *\class ExprValue</span>
<a name="l00057"></a>00057 <span class="comment"> *\brief The base class for holding the actual data in expressions</span>
<a name="l00058"></a>00058 <span class="comment"> * </span>
<a name="l00059"></a>00059 <span class="comment"> *</span>
<a name="l00060"></a>00060 <span class="comment"> * Author: Sergey Berezin</span>
<a name="l00061"></a>00061 <span class="comment"> *</span>
<a name="l00062"></a>00062 <span class="comment"> * Created: long time ago</span>
<a name="l00063"></a>00063 <span class="comment"> *</span>
<a name="l00064"></a>00064 <span class="comment"> * \anchor ExprValue The base class just holds the operator.</span>
<a name="l00065"></a>00065 <span class="comment"> * All the additional data resides in subclasses.</span>
<a name="l00066"></a>00066 <span class="comment"> * </span>
<a name="l00067"></a>00067 <span class="comment"> */</span>
<a name="l00068"></a>00068 <span class="comment">/*****************************************************************************/</span>
<a name="l00069"></a><a class="code" href="classCVC3_1_1ExprValue.html">00069</a> <span class="keyword">class </span><a class="code" href="os_8h.html#a0035aac6379df39aa69feba98b2751ba">CVC_DLL</a> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a> {
<a name="l00070"></a><a class="code" href="classCVC3_1_1ExprValue.html#aa33520359f6cc0f51b476790d39ed869">00070</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>;
<a name="l00071"></a><a class="code" href="classCVC3_1_1ExprValue.html#a5b9ef2c635ba39028682ac8ce19a17b8">00071</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Expr_1_1iterator.html">Expr::iterator</a>;
<a name="l00072"></a><a class="code" href="classCVC3_1_1ExprValue.html#a53c627979d9a14928590601b9fd195c2">00072</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>;
<a name="l00073"></a><a class="code" href="classCVC3_1_1ExprValue.html#a61a2a0fa995725e9988683c6dabd503c">00073</a>   <span class="keyword">friend</span> class ::CInterface;
<a name="l00074"></a><a class="code" href="classCVC3_1_1ExprValue.html#ad289fb23607ce2d96d86ef960f658268">00074</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprApply.html">ExprApply</a>;
<a name="l00075"></a><a class="code" href="classCVC3_1_1ExprValue.html#a51f48d7e14c97707595cfe5f8f6df209">00075</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>;
<a name="l00076"></a><a class="code" href="classCVC3_1_1ExprValue.html#a53271ded90a8b528132eeb7247936492">00076</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprClosure.html" title="A &quot;closure&quot; expression which binds variables used in the &quot;body&quot;. Used by LAMBDA and quantifiers...">ExprClosure</a>;
<a name="l00077"></a>00077 <span class="comment"></span>
<a name="l00078"></a>00078 <span class="comment">  //! Unique expression id</span>
<a name="l00079"></a><a class="code" href="classCVC3_1_1ExprValue.html#a31c61be16227d9b96035410d8312b94a">00079</a> <span class="comment"></span>  <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> <a class="code" href="classCVC3_1_1ExprValue.html#a31c61be16227d9b96035410d8312b94a" title="Unique expression id.">d_index</a>;
<a name="l00080"></a>00080 <span class="comment"></span>
<a name="l00081"></a>00081 <span class="comment">  //! Reference counter for garbage collection</span>
<a name="l00082"></a><a class="code" href="classCVC3_1_1ExprValue.html#a85c52eb888e4dc288fb2b951c547077a">00082</a> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1ExprValue.html#a85c52eb888e4dc288fb2b951c547077a" title="Reference counter for garbage collection.">d_refcount</a>;
<a name="l00083"></a>00083   <span class="comment"></span>
<a name="l00084"></a>00084 <span class="comment">  //! Cached hash value (initially 0)</span>
<a name="l00085"></a><a class="code" href="classCVC3_1_1ExprValue.html#a1afd52f0a863d5fd44d7e1a22a529061">00085</a> <span class="comment"></span>  <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprValue.html#a1afd52f0a863d5fd44d7e1a22a529061" title="Cached hash value (initially 0)">d_hash</a>; 
<a name="l00086"></a>00086 <span class="comment"></span>
<a name="l00087"></a>00087 <span class="comment">  //! The find attribute (may be NULL)</span>
<a name="l00088"></a><a class="code" href="classCVC3_1_1ExprValue.html#a7c66d985cd073ba81fbd777193ca6144">00088</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* <a class="code" href="classCVC3_1_1ExprValue.html#a7c66d985cd073ba81fbd777193ca6144" title="The find attribute (may be NULL)">d_find</a>;
<a name="l00089"></a>00089 <span class="comment"></span>
<a name="l00090"></a>00090 <span class="comment">  //! Equality between this term and next term in ring of all terms in the equivalence class</span>
<a name="l00091"></a><a class="code" href="classCVC3_1_1ExprValue.html#a3e910d33cc56606779e88be386d3c40a">00091</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* <a class="code" href="classCVC3_1_1ExprValue.html#a3e910d33cc56606779e88be386d3c40a" title="Equality between this term and next term in ring of all terms in the equivalence class.">d_eqNext</a>;
<a name="l00092"></a>00092 <span class="comment"></span>
<a name="l00093"></a>00093 <span class="comment">  //! The cached type of the expression (may be Null)</span>
<a name="l00094"></a><a class="code" href="classCVC3_1_1ExprValue.html#a6c369e54e40d39696ff852e1013b7198">00094</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1Type.html" title="MS C++ specific settings.">Type</a> <a class="code" href="classCVC3_1_1ExprValue.html#a6c369e54e40d39696ff852e1013b7198" title="The cached type of the expression (may be Null)">d_type</a>;
<a name="l00095"></a>00095 <span class="comment"></span>
<a name="l00096"></a>00096 <span class="comment">  //! The cached TCC of the expression (may be Null)</span>
<a name="l00097"></a>00097 <span class="comment"></span>  <span class="comment">//  Expr d_tcc;</span>
<a name="l00098"></a>00098 <span class="comment"></span>
<a name="l00099"></a>00099 <span class="comment">  //! Subtyping predicate for the expression and all subexpressions</span>
<a name="l00100"></a>00100 <span class="comment"></span>  <span class="comment">//  Theorem d_subtypePred;</span>
<a name="l00101"></a>00101 <span class="comment"></span>
<a name="l00102"></a>00102 <span class="comment">  //! Notify list may be NULL (== no such attribute)</span>
<a name="l00103"></a><a class="code" href="classCVC3_1_1ExprValue.html#a0db3195745319e1c17f8c886438752b8">00103</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1NotifyList.html">NotifyList</a>* <a class="code" href="classCVC3_1_1ExprValue.html#a0db3195745319e1c17f8c886438752b8" title="The cached TCC of the expression (may be Null)">d_notifyList</a>;
<a name="l00104"></a>00104 <span class="comment"></span>
<a name="l00105"></a>00105 <span class="comment">  //! For caching calls to Simplify</span>
<a name="l00106"></a><a class="code" href="classCVC3_1_1ExprValue.html#a016826b11af2138fb03564e19c36556b">00106</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a> <a class="code" href="classCVC3_1_1ExprValue.html#a016826b11af2138fb03564e19c36556b" title="For caching calls to Simplify.">d_simpCache</a>;
<a name="l00107"></a>00107 <span class="comment"></span>
<a name="l00108"></a>00108 <span class="comment">  //! For checking whether simplify cache is valid</span>
<a name="l00109"></a><a class="code" href="classCVC3_1_1ExprValue.html#a3a62b089ce7a3573879b933c231eebb5">00109</a> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1ExprValue.html#a3a62b089ce7a3573879b933c231eebb5" title="For checking whether simplify cache is valid.">d_simpCacheTag</a>;
<a name="l00110"></a>00110 <span class="comment"></span>
<a name="l00111"></a>00111 <span class="comment">  //! context-dependent bit-vector for flags that are context-dependent</span>
<a name="l00112"></a><a class="code" href="classCVC3_1_1ExprValue.html#a9a15db9962002e088cbfbaa7f3142825">00112</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1CDFlags.html">CDFlags</a> <a class="code" href="classCVC3_1_1ExprValue.html#a9a15db9962002e088cbfbaa7f3142825" title="context-dependent bit-vector for flags that are context-dependent">d_dynamicFlags</a>;
<a name="l00113"></a>00113 <span class="comment"></span>
<a name="l00114"></a>00114 <span class="comment">  //! Size of dag rooted at this expression</span>
<a name="l00115"></a><a class="code" href="classCVC3_1_1ExprValue.html#a7316c58d0068e9392de07ed946765ccc">00115</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1Unsigned.html">Unsigned</a> <a class="code" href="classCVC3_1_1ExprValue.html#a7316c58d0068e9392de07ed946765ccc" title="Size of dag rooted at this expression.">d_size</a>;
<a name="l00116"></a>00116 <span class="comment"></span>
<a name="l00117"></a>00117 <span class="comment">  //! Which child has the largest height</span>
<a name="l00118"></a>00118 <span class="comment"></span>  <span class="comment">//  int d_highestKid;</span>
<a name="l00119"></a>00119 <span class="comment"></span>
<a name="l00120"></a>00120 <span class="comment">  //! Most distant expression we were simplified *from*</span>
<a name="l00121"></a>00121 <span class="comment"></span>  <span class="comment">//  Expr d_simpFrom;</span>
<a name="l00122"></a>00122 <span class="comment"></span>
<a name="l00123"></a>00123 <span class="comment">  //! Generic flag for marking expressions (e.g. in DAG traversal)</span>
<a name="l00124"></a><a class="code" href="classCVC3_1_1ExprValue.html#a138cac22ce17733ee7dad8fa5f65f4ac">00124</a> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1ExprValue.html#a138cac22ce17733ee7dad8fa5f65f4ac" title="Which child has the largest height.">d_flag</a>;
<a name="l00125"></a>00125 
<a name="l00126"></a>00126 <span class="keyword">protected</span>:<span class="comment"></span>
<a name="l00127"></a>00127 <span class="comment">  /*! @brief The kind of the expression.  In particular, it determines which</span>
<a name="l00128"></a>00128 <span class="comment">   * subclass of ExprValue is used to store the expression. */</span>
<a name="l00129"></a><a class="code" href="classCVC3_1_1ExprValue.html#a4984ceea8831c2c175530910174985b4">00129</a>   <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1ExprValue.html#a4984ceea8831c2c175530910174985b4" title="The kind of the expression. In particular, it determines which subclass of ExprValue is used to store...">d_kind</a>;
<a name="l00130"></a>00130 <span class="comment"></span>
<a name="l00131"></a>00131 <span class="comment">  //! Our expr. manager</span>
<a name="l00132"></a><a class="code" href="classCVC3_1_1ExprValue.html#ae0b397b57244e8e5bb59cb95641b14d0">00132</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* <a class="code" href="classCVC3_1_1ExprValue.html#ae0b397b57244e8e5bb59cb95641b14d0" title="Our expr. manager.">d_em</a>;
<a name="l00133"></a>00133 
<a name="l00134"></a>00134   <span class="comment">// End of data members</span>
<a name="l00135"></a>00135 
<a name="l00136"></a>00136 <span class="keyword">private</span>:
<a name="l00137"></a>00137 <span class="comment"></span>
<a name="l00138"></a>00138 <span class="comment">  //! Set the ExprIndex</span>
<a name="l00139"></a><a class="code" href="classCVC3_1_1ExprValue.html#ad6f5249d320cbadf2ef3a07eab98ef5b">00139</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprValue.html#ad6f5249d320cbadf2ef3a07eab98ef5b" title="Set the ExprIndex.">setIndex</a>(<a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx) { d_index = idx; }
<a name="l00140"></a>00140 <span class="comment"></span>
<a name="l00141"></a>00141 <span class="comment">  //! Increment reference counter</span>
<a name="l00142"></a><a class="code" href="classCVC3_1_1ExprValue.html#a0547e925398643e7779baf97d324e32e">00142</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprValue.html#a0547e925398643e7779baf97d324e32e" title="Increment reference counter.">incRefcount</a>() { ++d_refcount; }
<a name="l00143"></a>00143 <span class="comment"></span>
<a name="l00144"></a>00144 <span class="comment">  //! Decrement reference counter</span>
<a name="l00145"></a><a class="code" href="classCVC3_1_1ExprValue.html#a8d62c9c4397548013dc302147903756e">00145</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprValue.html#a8d62c9c4397548013dc302147903756e" title="Decrement reference counter.">decRefcount</a>() {
<a name="l00146"></a>00146     <span class="comment">// Cannot be DebugAssert, since we are called in a destructor</span>
<a name="l00147"></a>00147     <span class="comment">// and should not throw an exception</span>
<a name="l00148"></a>00148     <a class="code" href="debug_8h.html#a600cb2d68efe7cc413cccbb5714c7016">IF_DEBUG</a>(<a class="code" href="debug_8h.html#a2637b2fffa22e3c9fad40cda8fcc3bce" title="If something goes horribly wrong, print a message and abort immediately with exit(1).">FatalAssert</a>(d_refcount &gt; 0, <span class="stringliteral">&quot;Mis-handled the ref. counting&quot;</span>);)
<a name="l00149"></a>00149     <span class="keywordflow">if</span>((--d_refcount) == 0) d_em-&gt;gc(<span class="keyword">this</span>);
<a name="l00150"></a>00150   }
<a name="l00151"></a>00151 <span class="comment"></span>
<a name="l00152"></a>00152 <span class="comment">  //! Caching hash function</span>
<a name="l00153"></a>00153 <span class="comment"></span><span class="comment">  /*! Do NOT implement it in subclasses! Implement computeHash() instead.</span>
<a name="l00154"></a>00154 <span class="comment">   */</span>
<a name="l00155"></a><a class="code" href="classCVC3_1_1ExprValue.html#af56c36f0f7e4aab1a37cf35272d66198">00155</a>   <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprValue.html#af56c36f0f7e4aab1a37cf35272d66198" title="Caching hash function.">hash</a>()<span class="keyword"> const </span>{
<a name="l00156"></a>00156     <span class="keywordflow">if</span> (d_hash == 0)
<a name="l00157"></a>00157       <span class="keyword">const_cast&lt;</span><a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;d_hash = computeHash();
<a name="l00158"></a>00158     <span class="keywordflow">return</span> d_hash;
<a name="l00159"></a>00159   }
<a name="l00160"></a>00160 <span class="comment"></span>
<a name="l00161"></a>00161 <span class="comment">  //! Return DAG-size of Expr</span>
<a name="l00162"></a><a class="code" href="classCVC3_1_1ExprValue.html#a68254536adeffd89a4c6837df4c0095f">00162</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1Unsigned.html">Unsigned</a> <a class="code" href="classCVC3_1_1ExprValue.html#a68254536adeffd89a4c6837df4c0095f" title="Return DAG-size of Expr.">getSize</a>()<span class="keyword"> const </span>{
<a name="l00163"></a>00163     <span class="keywordflow">if</span> (d_flag == d_em-&gt;getFlag()) <span class="keywordflow">return</span> 0;
<a name="l00164"></a>00164     <span class="keyword">const_cast&lt;</span><a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;d_flag = d_em-&gt;getFlag();
<a name="l00165"></a>00165     <span class="keywordflow">return</span> computeSize();
<a name="l00166"></a>00166   }
<a name="l00167"></a>00167 <span class="comment"></span>
<a name="l00168"></a>00168 <span class="comment">  //! Return child with greatest height</span>
<a name="l00169"></a>00169 <span class="comment"></span>  <span class="comment">//  int getHighestKid() const { return d_highestKid; }</span>
<a name="l00170"></a>00170 <span class="comment"></span>
<a name="l00171"></a>00171 <span class="comment">  //! Get Expr simplified to obtain this expr</span>
<a name="l00172"></a>00172 <span class="comment"></span>  <span class="comment">//  const Expr&amp; getSimpFrom() const { return d_simpFrom; }</span>
<a name="l00173"></a>00173 <span class="comment"></span>
<a name="l00174"></a>00174 <span class="comment">  //! Set Expr simplified to obtain this expr</span>
<a name="l00175"></a>00175 <span class="comment"></span>  <span class="comment">//  void setSimpFrom(const Expr&amp; simpFrom) { d_simpFrom = simpFrom; }</span>
<a name="l00176"></a>00176 
<a name="l00177"></a>00177 <span class="keyword">protected</span>:
<a name="l00178"></a>00178 
<a name="l00179"></a>00179   <span class="comment">// Static hash functions.  They don&#39;t depend on the context</span>
<a name="l00180"></a>00180   <span class="comment">// (ExprManager and such), so it is still thread-safe to have them</span>
<a name="l00181"></a>00181   <span class="comment">// static.</span>
<a name="l00182"></a><a class="code" href="classCVC3_1_1ExprValue.html#ad7ecd8a88b735ceeedc18df079e640a3">00182</a>   <span class="keyword">static</span> <a class="code" href="structHash_1_1hash_3_01char_01_5_01_4.html">std::hash&lt;char*&gt;</a> <a class="code" href="classCVC3_1_1ExprValue.html#ad7ecd8a88b735ceeedc18df079e640a3" title="Return child with greatest height.">s_charHash</a>;
<a name="l00183"></a><a class="code" href="classCVC3_1_1ExprValue.html#af4a750864a9d0e561e4b0ca924540198">00183</a>   <span class="keyword">static</span> <a class="code" href="structHash_1_1hash.html">std::hash&lt;long int&gt;</a> <a class="code" href="classCVC3_1_1ExprValue.html#af4a750864a9d0e561e4b0ca924540198">s_intHash</a>;
<a name="l00184"></a>00184 
<a name="l00185"></a><a class="code" href="classCVC3_1_1ExprValue.html#a5685982efffdb86c85145771b9a44acd">00185</a>   <span class="keyword">static</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprValue.html#a5685982efffdb86c85145771b9a44acd">pointerHash</a>(<span class="keywordtype">void</span>* p) { <span class="keywordflow">return</span> s_intHash((<span class="keywordtype">long</span> <span class="keywordtype">int</span>)p); }
<a name="l00186"></a>00186   <span class="comment">// Hash function for subclasses with children</span>
<a name="l00187"></a>00187   <span class="keyword">static</span> <span class="keywordtype">size_t</span> <a class="code" href="structHash_1_1hash.html">hash</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> kind, <span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; kids);
<a name="l00188"></a>00188   <span class="comment">// Hash function for kinds</span>
<a name="l00189"></a><a class="code" href="classCVC3_1_1ExprValue.html#ac6c6c0e99b81ab3cbbb8bf1dbbc58af6">00189</a>   <span class="keyword">static</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprValue.html#ac6c6c0e99b81ab3cbbb8bf1dbbc58af6">hash</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> n) { <span class="keywordflow">return</span> s_intHash((<span class="keywordtype">long</span> <span class="keywordtype">int</span>)n); }
<a name="l00190"></a>00190 
<a name="l00191"></a>00191   <span class="comment">// Size function for subclasses with children</span>
<a name="l00192"></a>00192   <span class="keyword">static</span> <a class="code" href="classCVC3_1_1Unsigned.html">Unsigned</a> sizeWithChildren(<span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; kids);
<a name="l00193"></a>00193 <span class="comment"></span>
<a name="l00194"></a>00194 <span class="comment">  //! Return the memory manager (for the benefit of subclasses)</span>
<a name="l00195"></a><a class="code" href="classCVC3_1_1ExprValue.html#ad6feed84d8cadc82170213e3d8bd1a5f">00195</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* <a class="code" href="classCVC3_1_1ExprValue.html#ad6feed84d8cadc82170213e3d8bd1a5f" title="Return the memory manager (for the benefit of subclasses)">getMM</a>(<span class="keywordtype">size_t</span> MMIndex) {
<a name="l00196"></a>00196     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(d_em!=NULL, <span class="stringliteral">&quot;ExprValue::getMM()&quot;</span>);
<a name="l00197"></a>00197     <span class="keywordflow">return</span> d_em-&gt;getMM(MMIndex);
<a name="l00198"></a>00198   }
<a name="l00199"></a>00199 <span class="comment"></span>
<a name="l00200"></a>00200 <span class="comment">  //! Make a clean copy of itself using the given ExprManager</span>
<a name="l00201"></a><a class="code" href="classCVC3_1_1ExprValue.html#a2a5a87b2cdf0318ac9555ed82bd781c5">00201</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* rebuild(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em)<span class="keyword"> const</span>
<a name="l00202"></a>00202 <span class="keyword">    </span>{ <span class="keywordflow">return</span> copy(em, 0); }
<a name="l00203"></a>00203 <span class="comment"></span>
<a name="l00204"></a>00204 <span class="comment">  //! Make a clean copy of the expr using the given ExprManager</span>
<a name="l00205"></a><a class="code" href="classCVC3_1_1ExprValue.html#a7bedecbaa54f53e8882e144721533000">00205</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a> rebuild(<a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a> e, <a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em)<span class="keyword"> const</span>
<a name="l00206"></a>00206 <span class="keyword">    </span>{ <span class="keywordflow">return</span> em-&gt;<a class="code" href="group__EM__Priv.html#gaa86d7ed7800549f1621d2d5ce64ce643" title="Cached recursive descent. Must be called only during rebuild()">rebuildRec</a>(e); }
<a name="l00207"></a>00207 
<a name="l00208"></a>00208   <span class="comment">// Protected API</span>
<a name="l00209"></a>00209 <span class="comment"></span>
<a name="l00210"></a>00210 <span class="comment">  //! Non-caching hash function which actually computes the hash.</span>
<a name="l00211"></a>00211 <span class="comment"></span><span class="comment">  /*! This is the method that all subclasses should implement */</span>
<a name="l00212"></a><a class="code" href="classCVC3_1_1ExprValue.html#aff96f4613c00f5094149c1f59639d310">00212</a>   <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprValue.html#aff96f4613c00f5094149c1f59639d310" title="Non-caching hash function which actually computes the hash.">computeHash</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="structHash_1_1hash.html">hash</a>(d_kind); }
<a name="l00213"></a>00213 <span class="comment"></span>
<a name="l00214"></a>00214 <span class="comment">  //! Non-caching size function which actually computes the size.</span>
<a name="l00215"></a>00215 <span class="comment"></span><span class="comment">  /*! This is the method that all subclasses should implement */</span>
<a name="l00216"></a><a class="code" href="classCVC3_1_1ExprValue.html#ab911430c6cbd72c759e7bcb8a4889051">00216</a>   <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1Unsigned.html">Unsigned</a> <a class="code" href="classCVC3_1_1ExprValue.html#ab911430c6cbd72c759e7bcb8a4889051" title="Non-caching size function which actually computes the size.">computeSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 1; }
<a name="l00217"></a>00217 <span class="comment"></span>
<a name="l00218"></a>00218 <span class="comment">  //! Make a clean copy of itself using the given ExprManager</span>
<a name="l00219"></a>00219 <span class="comment"></span>  <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* copy(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx) <span class="keyword">const</span>;
<a name="l00220"></a>00220 
<a name="l00221"></a>00221 <span class="keyword">public</span>:<span class="comment"></span>
<a name="l00222"></a>00222 <span class="comment">  //! Constructor</span>
<a name="l00223"></a><a class="code" href="classCVC3_1_1ExprValue.html#ab8172375001ab8896bcefaf13a50e32c">00223</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <span class="keywordtype">int</span> kind, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00224"></a>00224     : d_index(idx), d_refcount(0),
<a name="l00225"></a>00225       d_hash(0), d_find(NULL), d_eqNext(NULL), d_notifyList(NULL),
<a name="l00226"></a>00226       d_simpCacheTag(0),
<a name="l00227"></a>00227       d_dynamicFlags(em-&gt;getCurrentContext()),
<a name="l00228"></a>00228       d_size(0),
<a name="l00229"></a>00229       <span class="comment">//      d_height(0), d_highestKid(-1),</span>
<a name="l00230"></a>00230       d_flag(0), d_kind(kind), d_em(em)
<a name="l00231"></a>00231   {
<a name="l00232"></a>00232     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(em != NULL, <span class="stringliteral">&quot;NULL ExprManager is given to ExprValue()&quot;</span>);
<a name="l00233"></a>00233     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(em-&gt;<a class="code" href="group__EM__Priv.html#gae9e4de0bea1c6f2b5ef2e6c8a59b2b7c" title="Returns true if kind is built into CVC or has been registered via newKind.">isKindRegistered</a>(kind),
<a name="l00234"></a>00234                 (<span class="stringliteral">&quot;ExprValue(kind = &quot;</span> + <a class="code" href="namespaceCVC3.html#af69618103f1f0f2eadada0796a2a940c">int2string</a>(kind)
<a name="l00235"></a>00235                  + <span class="stringliteral">&quot;)): kind is not registered&quot;</span>).c_str());
<a name="l00236"></a>00236     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(kind != <a class="code" href="kinds_8h.html#aa10c9e8951b8ccf714a59ec321bdac5ba5c41450c4e719ca40d8e734f6a2008f0">APPLY</a>, <span class="stringliteral">&quot;Only ExprApply should have APPLY kind&quot;</span>);
<a name="l00237"></a>00237 <span class="comment">// #ifdef _CVC3_DEBUG_MODE //added by yeting, just hold a place to put my breakpoints in gdb</span>
<a name="l00238"></a>00238 <span class="comment">//     if(idx != 0){</span>
<a name="l00239"></a>00239 <span class="comment">//       TRACE(&quot;expr&quot;, &quot;expr created &quot;, idx, &quot;&quot;);//the line added by yeting</span>
<a name="l00240"></a>00240 <span class="comment">//       //      char * a;</span>
<a name="l00241"></a>00241 <span class="comment">//       //      a=&quot;a&quot;;</span>
<a name="l00242"></a>00242 <span class="comment">//       //      a[999999]=255;</span>
<a name="l00243"></a>00243 <span class="comment">//     }</span>
<a name="l00244"></a>00244 <span class="comment">// #endif</span>
<a name="l00245"></a>00245   }<span class="comment"></span>
<a name="l00246"></a>00246 <span class="comment">  //! Destructor</span>
<a name="l00247"></a>00247 <span class="comment"></span>  <span class="keyword">virtual</span> ~<a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>();
<a name="l00248"></a>00248 <span class="comment"></span>
<a name="l00249"></a>00249 <span class="comment">  //! Get the kind of the expression</span>
<a name="l00250"></a><a class="code" href="classCVC3_1_1ExprValue.html#af395e6f6a67e80f2fbd1dc4bee29989c">00250</a> <span class="comment"></span>  <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1ExprValue.html#af395e6f6a67e80f2fbd1dc4bee29989c" title="Get the kind of the expression.">getKind</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_kind; }
<a name="l00251"></a>00251 <span class="comment"></span>
<a name="l00252"></a>00252 <span class="comment">  //! Overload operator new</span>
<a name="l00253"></a><a class="code" href="classCVC3_1_1ExprValue.html#a6f7cb3318ee9743e6e47b30780d393f9">00253</a> <span class="comment"></span>  <span class="keywordtype">void</span>* operator new(<span class="keywordtype">size_t</span> size, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm)
<a name="l00254"></a>00254     { <span class="keywordflow">return</span> mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#a3db7efbc4b956bd423a73e1157d70ce0">newData</a>(size); }
<a name="l00255"></a><a class="code" href="classCVC3_1_1ExprValue.html#a2b1b3c8574ac40f50f4498e522c3618d">00255</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprValue.html#a2b1b3c8574ac40f50f4498e522c3618d">operator delete</a>(<span class="keywordtype">void</span>* pMem, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00256"></a>00256     mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#ad29fac88d3a07566d9a8f9dc8d8e059c">deleteData</a>(pMem);
<a name="l00257"></a>00257   }
<a name="l00258"></a>00258 <span class="comment"></span>
<a name="l00259"></a>00259 <span class="comment">  //! Overload operator delete</span>
<a name="l00260"></a><a class="code" href="classCVC3_1_1ExprValue.html#a2283fde20b269f1f98ab0eb43c3dddd6">00260</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprValue.html#a2283fde20b269f1f98ab0eb43c3dddd6" title="Overload operator delete.">operator delete</a>(<span class="keywordtype">void</span>*) { }
<a name="l00261"></a>00261 <span class="comment"></span>
<a name="l00262"></a>00262 <span class="comment">  //! Get unique memory manager ID</span>
<a name="l00263"></a><a class="code" href="classCVC3_1_1ExprValue.html#af4280c2539ba1dd4a089f0537f7ef3d4">00263</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprValue.html#af4280c2539ba1dd4a089f0537f7ef3d4" title="Get unique memory manager ID.">getMMIndex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceCVC3.html#a492cd44a88003acd985d3c05cbd36ea8a45728d440ceb44bdb47f21351a153e88">EXPR_VALUE</a>; }
<a name="l00264"></a>00264 <span class="comment"></span>
<a name="l00265"></a>00265 <span class="comment">  //! Equality between any two ExprValue objects (including subclasses)</span>
<a name="l00266"></a>00266 <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceCVC3.html#a8e164436388f2d87c971d9bbde973c58">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>&amp; ev2) <span class="keyword">const</span>;
<a name="l00267"></a>00267 
<a name="l00268"></a>00268   <span class="comment">// Testers</span>
<a name="l00269"></a>00269 <span class="comment"></span>
<a name="l00270"></a>00270 <span class="comment">  //! Test whether the expression is a generic subclass</span>
<a name="l00271"></a>00271 <span class="comment"></span><span class="comment">  /*!</span>
<a name="l00272"></a>00272 <span class="comment">   * \return 0 for the core classes, and getMMIndex() value for</span>
<a name="l00273"></a>00273 <span class="comment">   * generic subclasses (those defined in DPs)</span>
<a name="l00274"></a>00274 <span class="comment">   */</span>
<a name="l00275"></a><a class="code" href="classCVC3_1_1ExprValue.html#a6315bb02b7669d20a4069ca067a44384">00275</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* getExprValue()<span class="keyword"> const</span>
<a name="l00276"></a>00276 <span class="keyword">    </span>{ <span class="keywordflow">throw</span> <a class="code" href="classCVC3_1_1Exception.html">Exception</a>(<span class="stringliteral">&quot;Illegal call to getExprValue()&quot;</span>); }<span class="comment"></span>
<a name="l00277"></a>00277 <span class="comment">  //! String expression tester</span>
<a name="l00278"></a><a class="code" href="classCVC3_1_1ExprValue.html#a89b8a3f5ae5d364b6ac5e49de7d3929c">00278</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprValue.html#a89b8a3f5ae5d364b6ac5e49de7d3929c" title="String expression tester.">isString</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }<span class="comment"></span>
<a name="l00279"></a>00279 <span class="comment">  //! Rational number expression tester</span>
<a name="l00280"></a><a class="code" href="classCVC3_1_1ExprValue.html#af8770eee7784747a5f8cba21cd8db7c4">00280</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprValue.html#af8770eee7784747a5f8cba21cd8db7c4" title="Rational number expression tester.">isRational</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }<span class="comment"></span>
<a name="l00281"></a>00281 <span class="comment">  //! Uninterpreted constants</span>
<a name="l00282"></a><a class="code" href="classCVC3_1_1ExprValue.html#a1effa8e282a5a83047a61ab06498cd1d">00282</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprValue.html#a1effa8e282a5a83047a61ab06498cd1d" title="Uninterpreted constants.">isVar</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }<span class="comment"></span>
<a name="l00283"></a>00283 <span class="comment">  //! Application of another expression</span>
<a name="l00284"></a><a class="code" href="classCVC3_1_1ExprValue.html#aac20e4b14a2aa68fd9f122f49070db33">00284</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprValue.html#aac20e4b14a2aa68fd9f122f49070db33" title="Application of another expression.">isApply</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }<span class="comment"></span>
<a name="l00285"></a>00285 <span class="comment">  //! Special named symbol</span>
<a name="l00286"></a><a class="code" href="classCVC3_1_1ExprValue.html#a851283c6d5ec48e392c60eacc6a64b35">00286</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprValue.html#a851283c6d5ec48e392c60eacc6a64b35" title="Special named symbol.">isSymbol</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }<span class="comment"></span>
<a name="l00287"></a>00287 <span class="comment">  //! A LAMBDA-expression or a quantifier</span>
<a name="l00288"></a><a class="code" href="classCVC3_1_1ExprValue.html#a5c78d2e54f53d66f546e32cb865a34c1">00288</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprValue.html#a5c78d2e54f53d66f546e32cb865a34c1" title="A LAMBDA-expression or a quantifier.">isClosure</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }<span class="comment"></span>
<a name="l00289"></a>00289 <span class="comment">  //! Special Expr holding a theorem</span>
<a name="l00290"></a><a class="code" href="classCVC3_1_1ExprValue.html#aa2a68639be3c6803bc0b942604df3952">00290</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprValue.html#aa2a68639be3c6803bc0b942604df3952" title="Special Expr holding a theorem.">isTheorem</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }
<a name="l00291"></a>00291 <span class="comment"></span>
<a name="l00292"></a>00292 <span class="comment">  //! Get kids: by default, returns a ref to an empty vector</span>
<a name="l00293"></a><a class="code" href="classCVC3_1_1ExprValue.html#a9599f84777bbbacdf953986ece645c2d">00293</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; getKids()<span class="keyword"> const</span>
<a name="l00294"></a>00294 <span class="keyword">    </span>{ <span class="keywordflow">return</span> d_em-&gt;getEmptyVector(); }
<a name="l00295"></a>00295 
<a name="l00296"></a>00296   <span class="comment">// Methods to access leaf data in subclasses</span>
<a name="l00297"></a>00297 <span class="comment"></span>
<a name="l00298"></a>00298 <span class="comment">  //! Default arity = 0</span>
<a name="l00299"></a><a class="code" href="classCVC3_1_1ExprValue.html#aa310750ac9085b47f90be9edf3119192">00299</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1ExprValue.html#aa310750ac9085b47f90be9edf3119192" title="Default arity = 0.">arity</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 0; }
<a name="l00300"></a>00300 <span class="comment"></span>
<a name="l00301"></a>00301 <span class="comment">  //! Special attributes for uninterpreted functions</span>
<a name="l00302"></a><a class="code" href="classCVC3_1_1ExprValue.html#a849c62f9a8c01cb632f594ddd46dc116">00302</a> <span class="comment"></span>  <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* <a class="code" href="classCVC3_1_1ExprValue.html#a849c62f9a8c01cb632f594ddd46dc116" title="Special attributes for uninterpreted functions.">getSig</a>()<span class="keyword"> const </span>{
<a name="l00303"></a>00303     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getSig() is called on ExprValue&quot;</span>);
<a name="l00304"></a>00304     <span class="keywordflow">return</span> NULL;
<a name="l00305"></a>00305   }
<a name="l00306"></a>00306 
<a name="l00307"></a><a class="code" href="classCVC3_1_1ExprValue.html#aafdc2a2814ab3f015c5b115901ee845e">00307</a>   <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* <a class="code" href="classCVC3_1_1ExprValue.html#aafdc2a2814ab3f015c5b115901ee845e">getRep</a>()<span class="keyword"> const </span>{
<a name="l00308"></a>00308     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getRep() is called on ExprValue&quot;</span>);
<a name="l00309"></a>00309     <span class="keywordflow">return</span> NULL;
<a name="l00310"></a>00310   }
<a name="l00311"></a>00311 
<a name="l00312"></a><a class="code" href="classCVC3_1_1ExprValue.html#ab49eb5cd6b429eec7676608222044b7d">00312</a>   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprValue.html#ab49eb5cd6b429eec7676608222044b7d">setSig</a>(<a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* sig) {
<a name="l00313"></a>00313     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;setSig() is called on ExprValue&quot;</span>);
<a name="l00314"></a>00314   }
<a name="l00315"></a>00315 
<a name="l00316"></a><a class="code" href="classCVC3_1_1ExprValue.html#ab82f024ea7092c84889410d385cc896f">00316</a>   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprValue.html#ab82f024ea7092c84889410d385cc896f">setRep</a>(<a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* rep) {
<a name="l00317"></a>00317     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;setRep() is called on ExprValue&quot;</span>);
<a name="l00318"></a>00318   }
<a name="l00319"></a>00319 
<a name="l00320"></a><a class="code" href="classCVC3_1_1ExprValue.html#aa41e0e611f41af685e245ff12233865e">00320</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classCVC3_1_1ExprValue.html#aa41e0e611f41af685e245ff12233865e">getUid</a>()<span class="keyword"> const </span>{ 
<a name="l00321"></a>00321     <span class="keyword">static</span> std::string null;
<a name="l00322"></a>00322     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;ExprValue::getUid() called in base class&quot;</span>);
<a name="l00323"></a>00323     <span class="keywordflow">return</span> null;
<a name="l00324"></a>00324   }
<a name="l00325"></a>00325 
<a name="l00326"></a><a class="code" href="classCVC3_1_1ExprValue.html#ae08d4299bce518b15feae6717b22db60">00326</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classCVC3_1_1ExprValue.html#ae08d4299bce518b15feae6717b22db60">getString</a>()<span class="keyword"> const </span>{
<a name="l00327"></a>00327     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getString() is called on ExprValue&quot;</span>);
<a name="l00328"></a>00328     <span class="keyword">static</span> std::string s(<span class="stringliteral">&quot;&quot;</span>);
<a name="l00329"></a>00329     <span class="keywordflow">return</span> s;
<a name="l00330"></a>00330   }
<a name="l00331"></a>00331 
<a name="l00332"></a><a class="code" href="classCVC3_1_1ExprValue.html#abdfb4f3179a7549d99dceaebcff0b788">00332</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Rational.html">Rational</a>&amp; <a class="code" href="classCVC3_1_1ExprValue.html#abdfb4f3179a7549d99dceaebcff0b788">getRational</a>()<span class="keyword"> const </span>{
<a name="l00333"></a>00333     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getRational() is called on ExprValue&quot;</span>);
<a name="l00334"></a>00334     <span class="keyword">static</span> <a class="code" href="classCVC3_1_1Rational.html">Rational</a> r(0);
<a name="l00335"></a>00335     <span class="keywordflow">return</span> r;
<a name="l00336"></a>00336   }
<a name="l00337"></a>00337 <span class="comment"></span>
<a name="l00338"></a>00338 <span class="comment">  //! Returns the string name of UCONST and BOUND_VAR expr&#39;s.</span>
<a name="l00339"></a><a class="code" href="classCVC3_1_1ExprValue.html#a6ac375ed03ddb0418c1f7bb61ef5f8a6">00339</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classCVC3_1_1ExprValue.html#a6ac375ed03ddb0418c1f7bb61ef5f8a6" title="Returns the string name of UCONST and BOUND_VAR expr&#39;s.">getName</a>()<span class="keyword"> const </span>{
<a name="l00340"></a>00340     <span class="keyword">static</span> std::string ret = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00341"></a>00341     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getName() is called on ExprValue&quot;</span>);
<a name="l00342"></a>00342     <span class="keywordflow">return</span> ret;
<a name="l00343"></a>00343   }
<a name="l00344"></a>00344 <span class="comment"></span>
<a name="l00345"></a>00345 <span class="comment">  //! Returns the original Boolean variable (for BoolVarExprValue)</span>
<a name="l00346"></a><a class="code" href="classCVC3_1_1ExprValue.html#a292321ad1ace036ec248b34bb8f55d8e">00346</a> <span class="comment"></span>  <span class="keyword">virtual</span> <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_1ExprValue.html#a292321ad1ace036ec248b34bb8f55d8e" title="Returns the original Boolean variable (for BoolVarExprValue)">getVar</a>()<span class="keyword"> const </span>{
<a name="l00347"></a>00347     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getVar() is called on ExprValue&quot;</span>);
<a name="l00348"></a>00348     <span class="keyword">static</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a> null;
<a name="l00349"></a>00349     <span class="keywordflow">return</span> null;
<a name="l00350"></a>00350   }
<a name="l00351"></a>00351 <span class="comment"></span>
<a name="l00352"></a>00352 <span class="comment">  //! Get the Op from an Apply Expr</span>
<a name="l00353"></a><a class="code" href="classCVC3_1_1ExprValue.html#a2f674a5c2a7d6c8a2ac1bafdbfcf7a41">00353</a> <span class="comment"></span>  <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1Op.html">Op</a> <a class="code" href="classCVC3_1_1ExprValue.html#a2f674a5c2a7d6c8a2ac1bafdbfcf7a41" title="Get the Op from an Apply Expr.">getOp</a>()<span class="keyword"> const </span>{
<a name="l00354"></a>00354     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getOp() is called on ExprValue&quot;</span>);
<a name="l00355"></a>00355     <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Op.html">Op</a>(<a class="code" href="kinds_8h.html#aa10c9e8951b8ccf714a59ec321bdac5ba5bc05ce87fa69f660d39d0a4fa188c67">NULL_KIND</a>);
<a name="l00356"></a>00356   }
<a name="l00357"></a>00357 
<a name="l00358"></a><a class="code" href="classCVC3_1_1ExprValue.html#ac703cf03606d107e9a547d758ecc425b">00358</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; <a class="code" href="classCVC3_1_1ExprValue.html#ac703cf03606d107e9a547d758ecc425b">getVars</a>()<span class="keyword"> const  </span>{
<a name="l00359"></a>00359     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getVars() is called on ExprValue&quot;</span>);
<a name="l00360"></a>00360     <span class="keyword">static</span> std::vector&lt;Expr&gt; null;
<a name="l00361"></a>00361     <span class="keywordflow">return</span> null;
<a name="l00362"></a>00362   }
<a name="l00363"></a>00363 
<a name="l00364"></a><a class="code" href="classCVC3_1_1ExprValue.html#ab9acd5e57727e14c4873a6ae45985903">00364</a>   <span class="keyword">virtual</span> <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_1ExprValue.html#ab9acd5e57727e14c4873a6ae45985903">getBody</a>()<span class="keyword"> const </span>{
<a name="l00365"></a>00365     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getBody() is called on ExprValue&quot;</span>);
<a name="l00366"></a>00366     <span class="keyword">static</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a> null;
<a name="l00367"></a>00367     <span class="keywordflow">return</span> null;
<a name="l00368"></a>00368   }
<a name="l00369"></a>00369 
<a name="l00370"></a><a class="code" href="classCVC3_1_1ExprValue.html#a25993f35f99548aa2b3e1a52261de160">00370</a>   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprValue.html#a25993f35f99548aa2b3e1a52261de160">setTriggers</a>(<span class="keyword">const</span> std::vector&lt;std::vector&lt;Expr&gt; &gt;&amp; triggers) {
<a name="l00371"></a>00371     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;setTriggers() is called on ExprValue&quot;</span>);
<a name="l00372"></a>00372   }
<a name="l00373"></a>00373 
<a name="l00374"></a><a class="code" href="classCVC3_1_1ExprValue.html#a9e4c7523bb4dfbf80ad0157fe8196c44">00374</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;std::vector&lt;Expr&gt; &gt;&amp; <a class="code" href="classCVC3_1_1ExprValue.html#a9e4c7523bb4dfbf80ad0157fe8196c44">getTriggers</a>()<span class="keyword"> const </span>{ <span class="comment">//by yeting</span>
<a name="l00375"></a>00375     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getTrigs() is called on ExprValue&quot;</span>);
<a name="l00376"></a>00376     <span class="keyword">static</span> std::vector&lt;std::vector&lt;Expr&gt; &gt; null;
<a name="l00377"></a>00377     <span class="keywordflow">return</span> null;
<a name="l00378"></a>00378   }
<a name="l00379"></a>00379 
<a name="l00380"></a>00380 
<a name="l00381"></a><a class="code" href="classCVC3_1_1ExprValue.html#ae7da29f0b091c780ec0f4b75b9d84529">00381</a>   <span class="keyword">virtual</span> <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_1ExprValue.html#ae7da29f0b091c780ec0f4b75b9d84529">getExistential</a>()<span class="keyword"> const </span>{
<a name="l00382"></a>00382     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getExistential() is called on ExprValue&quot;</span>);
<a name="l00383"></a>00383     <span class="keyword">static</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a> null;
<a name="l00384"></a>00384     <span class="keywordflow">return</span> null;
<a name="l00385"></a>00385   }
<a name="l00386"></a><a class="code" href="classCVC3_1_1ExprValue.html#abd69167d8061d19eac1cfd710a3b27e5">00386</a>   <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1ExprValue.html#abd69167d8061d19eac1cfd710a3b27e5">getBoundIndex</a>()<span class="keyword"> const </span>{
<a name="l00387"></a>00387     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getIndex() is called on ExprValue&quot;</span>);
<a name="l00388"></a>00388     <span class="keywordflow">return</span> 0;
<a name="l00389"></a>00389   }
<a name="l00390"></a>00390 
<a name="l00391"></a><a class="code" href="classCVC3_1_1ExprValue.html#a8719945f0532bb8865b6b2b3474419bc">00391</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; <a class="code" href="classCVC3_1_1ExprValue.html#a8719945f0532bb8865b6b2b3474419bc">getFields</a>()<span class="keyword"> const </span>{
<a name="l00392"></a>00392     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getFields() is called on ExprValue&quot;</span>);
<a name="l00393"></a>00393     <span class="keyword">static</span> std::vector&lt;std::string&gt; null;
<a name="l00394"></a>00394     <span class="keywordflow">return</span> null;
<a name="l00395"></a>00395   }
<a name="l00396"></a><a class="code" href="classCVC3_1_1ExprValue.html#acd22ef41dcd7e7a61653e0bb0bb8aef8">00396</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classCVC3_1_1ExprValue.html#acd22ef41dcd7e7a61653e0bb0bb8aef8">getField</a>()<span class="keyword"> const </span>{
<a name="l00397"></a>00397     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getField() is called on ExprValue&quot;</span>);
<a name="l00398"></a>00398     <span class="keyword">static</span> std::string null;
<a name="l00399"></a>00399     <span class="keywordflow">return</span> null;
<a name="l00400"></a>00400   }
<a name="l00401"></a><a class="code" href="classCVC3_1_1ExprValue.html#a552fad1de1b7072922576a64d908c1fe">00401</a>   <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1ExprValue.html#a552fad1de1b7072922576a64d908c1fe">getTupleIndex</a>()<span class="keyword"> const </span>{
<a name="l00402"></a>00402     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getTupleIndex() is called on ExprValue&quot;</span>);
<a name="l00403"></a>00403     <span class="keywordflow">return</span> 0;
<a name="l00404"></a>00404   }
<a name="l00405"></a><a class="code" href="classCVC3_1_1ExprValue.html#a080156f159575061e068aa85e003a4d2">00405</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a>&amp; <a class="code" href="classCVC3_1_1ExprValue.html#a080156f159575061e068aa85e003a4d2">getTheorem</a>()<span class="keyword"> const </span>{
<a name="l00406"></a>00406     <span class="keyword">static</span> <a class="code" href="classCVC3_1_1Theorem.html">Theorem</a> null;
<a name="l00407"></a>00407     <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;getTheorem() is called on ExprValue&quot;</span>);
<a name="l00408"></a>00408     <span class="keywordflow">return</span> null;
<a name="l00409"></a>00409   }
<a name="l00410"></a>00410 
<a name="l00411"></a>00411 }; <span class="comment">// end of class ExprValue</span>
<a name="l00412"></a>00412 
<a name="l00413"></a>00413 <span class="comment">// Class ExprNode; it&#39;s an expression with children</span>
<a name="l00414"></a><a class="code" href="classCVC3_1_1ExprNode.html">00414</a> <span class="keyword">class </span><a class="code" href="os_8h.html#a0035aac6379df39aa69feba98b2751ba">CVC_DLL</a> <a class="code" href="classCVC3_1_1ExprNode.html">ExprNode</a>: <span class="keyword">public</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a> {
<a name="l00415"></a><a class="code" href="classCVC3_1_1ExprNode.html#aa33520359f6cc0f51b476790d39ed869">00415</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>;
<a name="l00416"></a><a class="code" href="classCVC3_1_1ExprNode.html#a53c627979d9a14928590601b9fd195c2">00416</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>;
<a name="l00417"></a>00417 
<a name="l00418"></a>00418 <span class="keyword">protected</span>:<span class="comment"></span>
<a name="l00419"></a>00419 <span class="comment">  //! Vector of children</span>
<a name="l00420"></a><a class="code" href="classCVC3_1_1ExprNode.html#a1f6b51676cf3dae78a4918992c4fc09f">00420</a> <span class="comment"></span>  std::vector&lt;Expr&gt; <a class="code" href="classCVC3_1_1ExprNode.html#a1f6b51676cf3dae78a4918992c4fc09f" title="Vector of children.">d_children</a>;
<a name="l00421"></a>00421 
<a name="l00422"></a>00422   <span class="comment">// Special attributes for helping with congruence closure</span>
<a name="l00423"></a><a class="code" href="classCVC3_1_1ExprNode.html#a5b4925ec1759a404239a8fb2b0e9172d">00423</a>   <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* <a class="code" href="classCVC3_1_1ExprNode.html#a5b4925ec1759a404239a8fb2b0e9172d">d_sig</a>;
<a name="l00424"></a><a class="code" href="classCVC3_1_1ExprNode.html#ab2419462d535324c3b83ae60271bd690">00424</a>   <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* <a class="code" href="classCVC3_1_1ExprNode.html#ab2419462d535324c3b83ae60271bd690">d_rep</a>;
<a name="l00425"></a>00425 
<a name="l00426"></a>00426 <span class="keyword">private</span>:
<a name="l00427"></a>00427 <span class="comment"></span>
<a name="l00428"></a>00428 <span class="comment">  //! Tell ExprManager who we are</span>
<a name="l00429"></a><a class="code" href="classCVC3_1_1ExprNode.html#a0766d1da69426e87ad41181ce1b55b49">00429</a> <span class="comment"></span>  <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprNode.html#a0766d1da69426e87ad41181ce1b55b49" title="Tell ExprManager who we are.">getMMIndex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceCVC3.html#a492cd44a88003acd985d3c05cbd36ea8a3893ed6eebbc5daca30a7aac2282fe6f">EXPR_NODE</a>; }
<a name="l00430"></a>00430 
<a name="l00431"></a>00431 <span class="keyword">protected</span>:<span class="comment"></span>
<a name="l00432"></a>00432 <span class="comment">  //! Return number of children</span>
<a name="l00433"></a><a class="code" href="classCVC3_1_1ExprNode.html#ad13fece28a0df70ad2cb56a0cfc6b216">00433</a> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1ExprNode.html#ad13fece28a0df70ad2cb56a0cfc6b216" title="Return number of children.">arity</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_children.size(); }
<a name="l00434"></a>00434 <span class="comment"></span>
<a name="l00435"></a>00435 <span class="comment">  //! Return reference to children</span>
<a name="l00436"></a><a class="code" href="classCVC3_1_1ExprNode.html#a025932a9fa434ecb0d591cd2dd930139">00436</a> <span class="comment"></span>  std::vector&lt;Expr&gt;&amp; <a class="code" href="classCVC3_1_1ExprNode.html#a025932a9fa434ecb0d591cd2dd930139" title="Return reference to children.">getKids1</a>() { <span class="keywordflow">return</span> d_children; }
<a name="l00437"></a>00437 <span class="comment"></span>
<a name="l00438"></a>00438 <span class="comment">  //! Return reference to children</span>
<a name="l00439"></a><a class="code" href="classCVC3_1_1ExprNode.html#a2b225f4f677b88f48a1cb5f79bf12219">00439</a> <span class="comment"></span>  <span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; <a class="code" href="classCVC3_1_1ExprNode.html#a2b225f4f677b88f48a1cb5f79bf12219" title="Return reference to children.">getKids</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_children; }
<a name="l00440"></a>00440 <span class="comment"></span>
<a name="l00441"></a>00441 <span class="comment">  //! Use our static hash() for the member method</span>
<a name="l00442"></a><a class="code" href="classCVC3_1_1ExprNode.html#a174cf42aa43c9359e6ccba323ae6d247">00442</a> <span class="comment"></span>  <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprNode.html#a174cf42aa43c9359e6ccba323ae6d247" title="Use our static hash() for the member method.">computeHash</a>()<span class="keyword"> const </span>{
<a name="l00443"></a>00443     <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprValue.html#af56c36f0f7e4aab1a37cf35272d66198" title="Caching hash function.">ExprValue::hash</a>(d_kind, d_children);
<a name="l00444"></a>00444   }
<a name="l00445"></a>00445 <span class="comment"></span>
<a name="l00446"></a>00446 <span class="comment">  //! Use our static sizeWithChildren() for the member method</span>
<a name="l00447"></a><a class="code" href="classCVC3_1_1ExprNode.html#a95d975ce32c6b4facee6ddcbbc86b29c">00447</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1Unsigned.html">Unsigned</a> <a class="code" href="classCVC3_1_1ExprNode.html#a95d975ce32c6b4facee6ddcbbc86b29c" title="Use our static sizeWithChildren() for the member method.">computeSize</a>()<span class="keyword"> const </span>{
<a name="l00448"></a>00448     <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprValue.html#a1d7a5dc3a272a82518aefd68f741c792">ExprValue::sizeWithChildren</a>(d_children);
<a name="l00449"></a>00449   }
<a name="l00450"></a>00450 <span class="comment"></span>
<a name="l00451"></a>00451 <span class="comment">  //! Make a clean copy of itself using the given memory manager</span>
<a name="l00452"></a>00452 <span class="comment"></span>  <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* copy(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0) <span class="keyword">const</span>;
<a name="l00453"></a>00453 
<a name="l00454"></a>00454 <span class="keyword">public</span>:<span class="comment"></span>
<a name="l00455"></a>00455 <span class="comment">  //! Constructor</span>
<a name="l00456"></a><a class="code" href="classCVC3_1_1ExprNode.html#a8c1963f7549f4866852c43a8d88946bd">00456</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1ExprNode.html">ExprNode</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <span class="keywordtype">int</span> kind, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00457"></a>00457     : <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>(em, kind, idx), d_sig(NULL), d_rep(NULL) { }<span class="comment"></span>
<a name="l00458"></a>00458 <span class="comment">  //! Constructor</span>
<a name="l00459"></a><a class="code" href="classCVC3_1_1ExprNode.html#a89d958b552b3da622a168750cb20ef1c">00459</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1ExprNode.html">ExprNode</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <span class="keywordtype">int</span> kind, <span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; kids,
<a name="l00460"></a>00460            <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00461"></a>00461     : <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>(em, kind, idx), d_children(kids), d_sig(NULL), d_rep(NULL) { }<span class="comment"></span>
<a name="l00462"></a>00462 <span class="comment">  //! Destructor</span>
<a name="l00463"></a>00463 <span class="comment"></span>  <span class="keyword">virtual</span> ~<a class="code" href="classCVC3_1_1ExprNode.html">ExprNode</a>();
<a name="l00464"></a>00464     <span class="comment"></span>
<a name="l00465"></a>00465 <span class="comment">  //! Overload operator new</span>
<a name="l00466"></a><a class="code" href="classCVC3_1_1ExprNode.html#a8ab2ec1e369932a5af5f9d8fcc04d0ff">00466</a> <span class="comment"></span>  <span class="keywordtype">void</span>* operator new(<span class="keywordtype">size_t</span> size, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm)
<a name="l00467"></a>00467     { <span class="keywordflow">return</span> mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#a3db7efbc4b956bd423a73e1157d70ce0">newData</a>(size); }
<a name="l00468"></a><a class="code" href="classCVC3_1_1ExprNode.html#a4422add0f21cc3ccf5aca3852ff34452">00468</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprNode.html#a4422add0f21cc3ccf5aca3852ff34452">operator delete</a>(<span class="keywordtype">void</span>* pMem, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00469"></a>00469     mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#ad29fac88d3a07566d9a8f9dc8d8e059c">deleteData</a>(pMem);
<a name="l00470"></a>00470   }
<a name="l00471"></a>00471 <span class="comment"></span>
<a name="l00472"></a>00472 <span class="comment">  //! Overload operator delete</span>
<a name="l00473"></a><a class="code" href="classCVC3_1_1ExprNode.html#a37db486be0f1c39981f8c4e99d202a7f">00473</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprNode.html#a37db486be0f1c39981f8c4e99d202a7f" title="Overload operator delete.">operator delete</a>(<span class="keywordtype">void</span>*) { }
<a name="l00474"></a>00474 <span class="comment"></span>
<a name="l00475"></a>00475 <span class="comment">  //! Compare with another ExprValue</span>
<a name="l00476"></a>00476 <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceCVC3.html#a8e164436388f2d87c971d9bbde973c58">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>&amp; ev2) <span class="keyword">const</span>;
<a name="l00477"></a>00477 
<a name="l00478"></a><a class="code" href="classCVC3_1_1ExprNode.html#a07c802cf4ae926ba0e97a141beddd1e6">00478</a>   <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* <a class="code" href="classCVC3_1_1ExprNode.html#a07c802cf4ae926ba0e97a141beddd1e6" title="Special attributes for uninterpreted functions.">getSig</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_sig; }
<a name="l00479"></a><a class="code" href="classCVC3_1_1ExprNode.html#a02ac368f0c51814169e3b16bacb88b9d">00479</a>   <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* <a class="code" href="classCVC3_1_1ExprNode.html#a02ac368f0c51814169e3b16bacb88b9d">getRep</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_rep; }
<a name="l00480"></a>00480 
<a name="l00481"></a><a class="code" href="classCVC3_1_1ExprNode.html#a7284e74310d4000ec1ccc2cc7b376a73">00481</a>   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprNode.html#a7284e74310d4000ec1ccc2cc7b376a73">setRep</a>(<a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* rep) { d_rep = rep; }
<a name="l00482"></a><a class="code" href="classCVC3_1_1ExprNode.html#ab47e9d3908b0f6f05547f69642882647">00482</a>   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprNode.html#ab47e9d3908b0f6f05547f69642882647">setSig</a>(<a class="code" href="classCVC3_1_1CDO.html">CDO&lt;Theorem&gt;</a>* sig) { d_sig = sig; }
<a name="l00483"></a>00483 
<a name="l00484"></a>00484 }; <span class="comment">// end of class ExprNode</span>
<a name="l00485"></a>00485 
<a name="l00486"></a>00486 <span class="comment">// Class ExprNodeTmp; special version of ExprNode for Expr constructor</span>
<a name="l00487"></a><a class="code" href="classCVC3_1_1ExprNodeTmp.html">00487</a> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprNodeTmp.html">ExprNodeTmp</a>: <span class="keyword">public</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a> {
<a name="l00488"></a><a class="code" href="classCVC3_1_1ExprNodeTmp.html#aa33520359f6cc0f51b476790d39ed869">00488</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>;
<a name="l00489"></a><a class="code" href="classCVC3_1_1ExprNodeTmp.html#a53c627979d9a14928590601b9fd195c2">00489</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>;
<a name="l00490"></a>00490 
<a name="l00491"></a>00491 <span class="keyword">protected</span>:<span class="comment"></span>
<a name="l00492"></a>00492 <span class="comment">  //! Vector of children</span>
<a name="l00493"></a><a class="code" href="classCVC3_1_1ExprNodeTmp.html#a2e2db042177b77046076fa1552fecca3">00493</a> <span class="comment"></span>  <span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; <a class="code" href="classCVC3_1_1ExprNodeTmp.html#a2e2db042177b77046076fa1552fecca3" title="Vector of children.">d_children</a>;
<a name="l00494"></a>00494 
<a name="l00495"></a>00495 <span class="keyword">private</span>:
<a name="l00496"></a>00496 <span class="comment"></span>
<a name="l00497"></a>00497 <span class="comment">  //! Tell ExprManager who we are</span>
<a name="l00498"></a><a class="code" href="classCVC3_1_1ExprNodeTmp.html#aa3e307554c30d3ebca5ba6510309cad2">00498</a> <span class="comment"></span>  <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprNodeTmp.html#aa3e307554c30d3ebca5ba6510309cad2" title="Tell ExprManager who we are.">getMMIndex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceCVC3.html#a492cd44a88003acd985d3c05cbd36ea8a3893ed6eebbc5daca30a7aac2282fe6f">EXPR_NODE</a>; }
<a name="l00499"></a>00499 
<a name="l00500"></a>00500 <span class="keyword">protected</span>:<span class="comment"></span>
<a name="l00501"></a>00501 <span class="comment">  //! Return number of children</span>
<a name="l00502"></a><a class="code" href="classCVC3_1_1ExprNodeTmp.html#aa8346e9ddcf8addfdb3a0ebcf1493d59">00502</a> <span class="comment"></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classCVC3_1_1ExprNodeTmp.html#aa8346e9ddcf8addfdb3a0ebcf1493d59" title="Return number of children.">arity</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprNodeTmp.html#a2e2db042177b77046076fa1552fecca3" title="Vector of children.">d_children</a>.size(); }
<a name="l00503"></a>00503 <span class="comment"></span>
<a name="l00504"></a>00504 <span class="comment">  //! Return reference to children</span>
<a name="l00505"></a><a class="code" href="classCVC3_1_1ExprNodeTmp.html#a42140d5097e93c6ebcf7c196f0919530">00505</a> <span class="comment"></span>  <span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; <a class="code" href="classCVC3_1_1ExprNodeTmp.html#a42140d5097e93c6ebcf7c196f0919530" title="Return reference to children.">getKids</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprNodeTmp.html#a2e2db042177b77046076fa1552fecca3" title="Vector of children.">d_children</a>; }
<a name="l00506"></a>00506 <span class="comment"></span>
<a name="l00507"></a>00507 <span class="comment">  //! Use our static hash() for the member method</span>
<a name="l00508"></a><a class="code" href="classCVC3_1_1ExprNodeTmp.html#a15ab222ddc16edc4d0977bb9e85378cb">00508</a> <span class="comment"></span>  <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprNodeTmp.html#a15ab222ddc16edc4d0977bb9e85378cb" title="Use our static hash() for the member method.">computeHash</a>()<span class="keyword"> const </span>{
<a name="l00509"></a>00509     <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprValue.html#af56c36f0f7e4aab1a37cf35272d66198" title="Caching hash function.">ExprValue::hash</a>(<a class="code" href="classCVC3_1_1ExprValue.html#a4984ceea8831c2c175530910174985b4" title="The kind of the expression. In particular, it determines which subclass of ExprValue is used to store...">d_kind</a>, <a class="code" href="classCVC3_1_1ExprNodeTmp.html#a2e2db042177b77046076fa1552fecca3" title="Vector of children.">d_children</a>);
<a name="l00510"></a>00510   }
<a name="l00511"></a>00511 <span class="comment"></span>
<a name="l00512"></a>00512 <span class="comment">  //! Use our static sizeWithChildren() for the member method</span>
<a name="l00513"></a><a class="code" href="classCVC3_1_1ExprNodeTmp.html#a2f120a799c82eb71ea3609bb5d2f59d2">00513</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1Unsigned.html">Unsigned</a> <a class="code" href="classCVC3_1_1ExprNodeTmp.html#a2f120a799c82eb71ea3609bb5d2f59d2" title="Use our static sizeWithChildren() for the member method.">computeSize</a>()<span class="keyword"> const </span>{
<a name="l00514"></a>00514     <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprValue.html#a1d7a5dc3a272a82518aefd68f741c792">ExprValue::sizeWithChildren</a>(<a class="code" href="classCVC3_1_1ExprNodeTmp.html#a2e2db042177b77046076fa1552fecca3" title="Vector of children.">d_children</a>);
<a name="l00515"></a>00515   }
<a name="l00516"></a>00516 <span class="comment"></span>
<a name="l00517"></a>00517 <span class="comment">  //! Make a clean copy of itself using the given memory manager</span>
<a name="l00518"></a>00518 <span class="comment"></span>  <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* <a class="code" href="classCVC3_1_1ExprNodeTmp.html#a5327d514d06f1c3a799e29d61f8d7de3" title="Make a clean copy of itself using the given memory manager.">copy</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0) <span class="keyword">const</span>;
<a name="l00519"></a>00519 
<a name="l00520"></a>00520 <span class="keyword">public</span>:<span class="comment"></span>
<a name="l00521"></a>00521 <span class="comment">  //! Constructor</span>
<a name="l00522"></a><a class="code" href="classCVC3_1_1ExprNodeTmp.html#ad37eddd5797f404f73ac133cf5789cde">00522</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1ExprNodeTmp.html#ad37eddd5797f404f73ac133cf5789cde" title="Constructor.">ExprNodeTmp</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <span class="keywordtype">int</span> kind, <span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; kids)
<a name="l00523"></a>00523     : <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>(em, kind, 0), <a class="code" href="classCVC3_1_1ExprNodeTmp.html#a2e2db042177b77046076fa1552fecca3" title="Vector of children.">d_children</a>(kids) { }
<a name="l00524"></a>00524 <span class="comment"></span>
<a name="l00525"></a>00525 <span class="comment">  //! Destructor</span>
<a name="l00526"></a><a class="code" href="classCVC3_1_1ExprNodeTmp.html#ac6a89e4cd2c3fe285806a50b33de3316">00526</a> <span class="comment"></span>  <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprNodeTmp.html#ac6a89e4cd2c3fe285806a50b33de3316" title="Destructor.">~ExprNodeTmp</a>() {}
<a name="l00527"></a>00527     <span class="comment"></span>
<a name="l00528"></a>00528 <span class="comment">  //! Compare with another ExprValue</span>
<a name="l00529"></a>00529 <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprNodeTmp.html#a27ded0c9ddba00025c1f84d181327893" title="Compare with another ExprValue.">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>&amp; ev2) <span class="keyword">const</span>;
<a name="l00530"></a>00530 
<a name="l00531"></a>00531 }; <span class="comment">// end of class ExprNodeTmp</span>
<a name="l00532"></a>00532 
<a name="l00533"></a>00533 <span class="comment">// Special version for Expr Constructor</span>
<a name="l00534"></a><a class="code" href="classCVC3_1_1ExprApplyTmp.html">00534</a> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprApplyTmp.html">ExprApplyTmp</a>: <span class="keyword">public</span> <a class="code" href="classCVC3_1_1ExprNodeTmp.html">ExprNodeTmp</a> {
<a name="l00535"></a><a class="code" href="classCVC3_1_1ExprApplyTmp.html#aa33520359f6cc0f51b476790d39ed869">00535</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>;
<a name="l00536"></a><a class="code" href="classCVC3_1_1ExprApplyTmp.html#a53c627979d9a14928590601b9fd195c2">00536</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>;
<a name="l00537"></a>00537 <span class="keyword">private</span>:
<a name="l00538"></a><a class="code" href="classCVC3_1_1ExprApplyTmp.html#aaad3d8011a35666a3a069e60330c013f">00538</a>   <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a> <a class="code" href="classCVC3_1_1ExprApplyTmp.html#aaad3d8011a35666a3a069e60330c013f">d_opExpr</a>;
<a name="l00539"></a>00539 <span class="keyword">protected</span>:
<a name="l00540"></a><a class="code" href="classCVC3_1_1ExprApplyTmp.html#aa8919744447552a00dc79cd814f67641">00540</a>   <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprApplyTmp.html#aa8919744447552a00dc79cd814f67641" title="Tell ExprManager who we are.">getMMIndex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceCVC3.html#a492cd44a88003acd985d3c05cbd36ea8ac0f64afa0582818fffa2cc5403db8a0e" title="Application of functions and predicates.">EXPR_APPLY</a>; }
<a name="l00541"></a><a class="code" href="classCVC3_1_1ExprApplyTmp.html#af4c914a8362466d33b486c5b5f015fca">00541</a>   <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprApplyTmp.html#af4c914a8362466d33b486c5b5f015fca" title="Use our static hash() for the member method.">computeHash</a>()<span class="keyword"> const </span>{
<a name="l00542"></a>00542     <span class="keywordflow">return</span> <a class="code" href="expr__value_8h.html#ac4add2a227a10511e0128d63952030e8">PRIME</a>*<a class="code" href="classCVC3_1_1ExprApplyTmp.html#af4c914a8362466d33b486c5b5f015fca" title="Use our static hash() for the member method.">ExprNodeTmp::computeHash</a>() + <a class="code" href="classCVC3_1_1ExprApplyTmp.html#aaad3d8011a35666a3a069e60330c013f">d_opExpr</a>.<a class="code" href="group__ExprPkg.html#gadf3d59da15e4f78daf0c41ef7779a749">hash</a>();
<a name="l00543"></a>00543   }
<a name="l00544"></a><a class="code" href="classCVC3_1_1ExprApplyTmp.html#aeaacf030e67a4a6cab76122ca2d773fa">00544</a>   <a class="code" href="classCVC3_1_1Op.html">Op</a> <a class="code" href="classCVC3_1_1ExprApplyTmp.html#aeaacf030e67a4a6cab76122ca2d773fa" title="Get the Op from an Apply Expr.">getOp</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Op.html">Op</a>(<a class="code" href="classCVC3_1_1ExprApplyTmp.html#aaad3d8011a35666a3a069e60330c013f">d_opExpr</a>); }
<a name="l00545"></a><a class="code" href="classCVC3_1_1ExprApplyTmp.html#a49f437d2267552058c0f4db0ccc3417d">00545</a>   <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprApplyTmp.html#a49f437d2267552058c0f4db0ccc3417d" title="Application of another expression.">isApply</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }
<a name="l00546"></a>00546   <span class="comment">// Make a clean copy of itself using the given memory manager</span>
<a name="l00547"></a>00547   <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* <a class="code" href="classCVC3_1_1ExprApplyTmp.html#ae6c716304151bd796921ac86fe9529a7" title="Make a clean copy of itself using the given memory manager.">copy</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0) <span class="keyword">const</span>;
<a name="l00548"></a>00548 <span class="keyword">public</span>:
<a name="l00549"></a>00549   <span class="comment">// Constructor</span>
<a name="l00550"></a><a class="code" href="classCVC3_1_1ExprApplyTmp.html#a1f95b1af040940678d2c11d22217ed23">00550</a>   <a class="code" href="classCVC3_1_1ExprApplyTmp.html#a1f95b1af040940678d2c11d22217ed23">ExprApplyTmp</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Op.html">Op</a>&amp; op,
<a name="l00551"></a>00551                <span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; kids)
<a name="l00552"></a>00552     : <a class="code" href="classCVC3_1_1ExprNodeTmp.html">ExprNodeTmp</a>(em, <a class="code" href="kinds_8h.html#aa10c9e8951b8ccf714a59ec321bdac5ba5bc05ce87fa69f660d39d0a4fa188c67">NULL_KIND</a>, kids), <a class="code" href="classCVC3_1_1ExprApplyTmp.html#aaad3d8011a35666a3a069e60330c013f">d_opExpr</a>(op.getExpr())
<a name="l00553"></a>00553   { <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(!op.<a class="code" href="classCVC3_1_1Op.html#a4a38071541d1e863583f12e9d81de3a2">getExpr</a>().<a class="code" href="group__ExprPkg.html#ga0265d1ca42fa59c95aaff3ca675b6504">isNull</a>(), <span class="stringliteral">&quot;Expected non-null Op&quot;</span>);
<a name="l00554"></a>00554     <a class="code" href="classCVC3_1_1ExprValue.html#a4984ceea8831c2c175530910174985b4" title="The kind of the expression. In particular, it determines which subclass of ExprValue is used to store...">d_kind</a> = <a class="code" href="kinds_8h.html#aa10c9e8951b8ccf714a59ec321bdac5ba5c41450c4e719ca40d8e734f6a2008f0">APPLY</a>; }
<a name="l00555"></a><a class="code" href="classCVC3_1_1ExprApplyTmp.html#a2ecf4a953e8e36ade0416fcf666c5bae">00555</a>   <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprApplyTmp.html#a2ecf4a953e8e36ade0416fcf666c5bae">~ExprApplyTmp</a>() { }
<a name="l00556"></a>00556 
<a name="l00557"></a>00557   <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprApplyTmp.html#ae2c792ed30416c92749921094b8e4ba7" title="Compare with another ExprValue.">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>&amp; ev2) <span class="keyword">const</span>;
<a name="l00558"></a>00558 }; <span class="comment">// end of class ExprApply</span>
<a name="l00559"></a>00559 
<a name="l00560"></a><a class="code" href="classCVC3_1_1ExprApply.html">00560</a> <span class="keyword">class </span><a class="code" href="os_8h.html#a0035aac6379df39aa69feba98b2751ba">CVC_DLL</a> <a class="code" href="classCVC3_1_1ExprApply.html">ExprApply</a>: <span class="keyword">public</span> <a class="code" href="classCVC3_1_1ExprNode.html">ExprNode</a> {
<a name="l00561"></a><a class="code" href="classCVC3_1_1ExprApply.html#aa33520359f6cc0f51b476790d39ed869">00561</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>;
<a name="l00562"></a><a class="code" href="classCVC3_1_1ExprApply.html#a53c627979d9a14928590601b9fd195c2">00562</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>;
<a name="l00563"></a>00563 <span class="keyword">private</span>:
<a name="l00564"></a><a class="code" href="classCVC3_1_1ExprApply.html#a93993f95ec448fbb4f8c1a21c8f85e61">00564</a>   <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a> <a class="code" href="classCVC3_1_1ExprApply.html#a93993f95ec448fbb4f8c1a21c8f85e61">d_opExpr</a>;
<a name="l00565"></a>00565 <span class="keyword">protected</span>:
<a name="l00566"></a><a class="code" href="classCVC3_1_1ExprApply.html#a4ad3ee901de6fd94e02e117648a9fbe3">00566</a>   <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprApply.html#a4ad3ee901de6fd94e02e117648a9fbe3" title="Tell ExprManager who we are.">getMMIndex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceCVC3.html#a492cd44a88003acd985d3c05cbd36ea8ac0f64afa0582818fffa2cc5403db8a0e" title="Application of functions and predicates.">EXPR_APPLY</a>; }
<a name="l00567"></a><a class="code" href="classCVC3_1_1ExprApply.html#a0da9d686905da4c3680c54816f6201f3">00567</a>   <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprApply.html#a0da9d686905da4c3680c54816f6201f3" title="Use our static hash() for the member method.">computeHash</a>()<span class="keyword"> const </span>{
<a name="l00568"></a>00568     <span class="keywordflow">return</span> <a class="code" href="expr__value_8h.html#ac4add2a227a10511e0128d63952030e8">PRIME</a>*<a class="code" href="classCVC3_1_1ExprNode.html#a174cf42aa43c9359e6ccba323ae6d247" title="Use our static hash() for the member method.">ExprNode::computeHash</a>() + d_opExpr.hash();
<a name="l00569"></a>00569   }
<a name="l00570"></a><a class="code" href="classCVC3_1_1ExprApply.html#a090d71fdffa7084caae66faf7b3c9db8">00570</a>   <a class="code" href="classCVC3_1_1Op.html">Op</a> <a class="code" href="classCVC3_1_1ExprApply.html#a090d71fdffa7084caae66faf7b3c9db8" title="Get the Op from an Apply Expr.">getOp</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1Op.html">Op</a>(d_opExpr); }
<a name="l00571"></a><a class="code" href="classCVC3_1_1ExprApply.html#aedccb1ec74deed98f2750abbf6edd78e">00571</a>   <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprApply.html#aedccb1ec74deed98f2750abbf6edd78e" title="Application of another expression.">isApply</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }
<a name="l00572"></a>00572   <span class="comment">// Make a clean copy of itself using the given memory manager</span>
<a name="l00573"></a>00573   <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* copy(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0) <span class="keyword">const</span>;
<a name="l00574"></a>00574 <span class="keyword">public</span>:
<a name="l00575"></a>00575   <span class="comment">// Constructor</span>
<a name="l00576"></a><a class="code" href="classCVC3_1_1ExprApply.html#ac88f694d8e241ddd2546461dcb2b5ec7">00576</a>   <a class="code" href="classCVC3_1_1ExprApply.html">ExprApply</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Op.html">Op</a>&amp; op, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00577"></a>00577     : <a class="code" href="classCVC3_1_1ExprNode.html">ExprNode</a>(em, <a class="code" href="kinds_8h.html#aa10c9e8951b8ccf714a59ec321bdac5ba5bc05ce87fa69f660d39d0a4fa188c67">NULL_KIND</a>, idx), d_opExpr(op.getExpr())
<a name="l00578"></a>00578   { <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(!op.<a class="code" href="classCVC3_1_1Op.html#a4a38071541d1e863583f12e9d81de3a2">getExpr</a>().<a class="code" href="group__ExprPkg.html#ga0265d1ca42fa59c95aaff3ca675b6504">isNull</a>(), <span class="stringliteral">&quot;Expected non-null Op&quot;</span>);
<a name="l00579"></a>00579     d_kind = <a class="code" href="kinds_8h.html#aa10c9e8951b8ccf714a59ec321bdac5ba5c41450c4e719ca40d8e734f6a2008f0">APPLY</a>; }
<a name="l00580"></a><a class="code" href="classCVC3_1_1ExprApply.html#ab7cf281da784b2aa7268566e0278ee4d">00580</a>   <a class="code" href="classCVC3_1_1ExprApply.html">ExprApply</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Op.html">Op</a>&amp; op,
<a name="l00581"></a>00581             <span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; kids, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00582"></a>00582     : <a class="code" href="classCVC3_1_1ExprNode.html">ExprNode</a>(em, <a class="code" href="kinds_8h.html#aa10c9e8951b8ccf714a59ec321bdac5ba5bc05ce87fa69f660d39d0a4fa188c67">NULL_KIND</a>, kids, idx), d_opExpr(op.getExpr())
<a name="l00583"></a>00583   { <a class="code" href="debug_8h.html#a40dac3bdb2166ffc852ee8b1489d2b56">DebugAssert</a>(!op.<a class="code" href="classCVC3_1_1Op.html#a4a38071541d1e863583f12e9d81de3a2">getExpr</a>().<a class="code" href="group__ExprPkg.html#ga0265d1ca42fa59c95aaff3ca675b6504">isNull</a>(), <span class="stringliteral">&quot;Expected non-null Op&quot;</span>);
<a name="l00584"></a>00584     d_kind = <a class="code" href="kinds_8h.html#aa10c9e8951b8ccf714a59ec321bdac5ba5c41450c4e719ca40d8e734f6a2008f0">APPLY</a>; }
<a name="l00585"></a><a class="code" href="classCVC3_1_1ExprApply.html#a2b88b233d7c8f6c2ba399e672b903015">00585</a>   <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprApply.html#a2b88b233d7c8f6c2ba399e672b903015">~ExprApply</a>() { }
<a name="l00586"></a>00586 
<a name="l00587"></a>00587   <span class="keywordtype">bool</span> <a class="code" href="namespaceCVC3.html#a8e164436388f2d87c971d9bbde973c58">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>&amp; ev2) <span class="keyword">const</span>;
<a name="l00588"></a>00588   <span class="comment">// Memory management</span>
<a name="l00589"></a><a class="code" href="classCVC3_1_1ExprApply.html#afe11b8470da5420fd22948d800f2cd0a">00589</a>   <span class="keywordtype">void</span>* <a class="code" href="classCVC3_1_1ExprApply.html#afe11b8470da5420fd22948d800f2cd0a" title="Overload operator new.">operator new</a>(<span class="keywordtype">size_t</span> size, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00590"></a>00590     <span class="keywordflow">return</span> mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#a3db7efbc4b956bd423a73e1157d70ce0">newData</a>(size);
<a name="l00591"></a>00591   }
<a name="l00592"></a><a class="code" href="classCVC3_1_1ExprApply.html#a6e45b2e56d46c3551fe4300c887b5c94">00592</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprApply.html#a6e45b2e56d46c3551fe4300c887b5c94">operator delete</a>(<span class="keywordtype">void</span>* pMem, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00593"></a>00593     mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#ad29fac88d3a07566d9a8f9dc8d8e059c">deleteData</a>(pMem);
<a name="l00594"></a>00594   }
<a name="l00595"></a><a class="code" href="classCVC3_1_1ExprApply.html#adc1edfd048983d549062af49415d63f0">00595</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprApply.html#adc1edfd048983d549062af49415d63f0" title="Overload operator delete.">operator delete</a>(<span class="keywordtype">void</span>*) { }
<a name="l00596"></a>00596 }; <span class="comment">// end of class ExprApply</span>
<a name="l00597"></a>00597 
<a name="l00598"></a>00598 <span class="comment">/*****************************************************************************/</span><span class="comment"></span>
<a name="l00599"></a>00599 <span class="comment">/*!</span>
<a name="l00600"></a>00600 <span class="comment"> *\class NamedExprValue</span>
<a name="l00601"></a>00601 <span class="comment"> *\brief NamedExprValue</span>
<a name="l00602"></a>00602 <span class="comment"> *</span>
<a name="l00603"></a>00603 <span class="comment"> * Author: Clark Barrett</span>
<a name="l00604"></a>00604 <span class="comment"> *</span>
<a name="l00605"></a>00605 <span class="comment"> * Created: Thu Dec  2 23:18:17 2004</span>
<a name="l00606"></a>00606 <span class="comment"> *</span>
<a name="l00607"></a>00607 <span class="comment"> * Subclass of ExprValue for kinds that have a name associated with them.</span>
<a name="l00608"></a>00608 <span class="comment"> */</span>
<a name="l00609"></a>00609 <span class="comment">/*****************************************************************************/</span>
<a name="l00610"></a>00610 
<a name="l00611"></a>00611 <span class="comment">// class NamedExprValue : public ExprNode {</span>
<a name="l00612"></a>00612 <span class="comment">//   friend class Expr;</span>
<a name="l00613"></a>00613 <span class="comment">//   friend class ExprManager;</span>
<a name="l00614"></a>00614 
<a name="l00615"></a>00615 <span class="comment">// private:</span>
<a name="l00616"></a>00616 <span class="comment">//   std::string d_name;</span>
<a name="l00617"></a>00617 
<a name="l00618"></a>00618 <span class="comment">// protected:</span>
<a name="l00619"></a>00619 
<a name="l00620"></a>00620 <span class="comment">//   ExprValue* copy(ExprManager* em, ExprIndex idx = 0) const {</span>
<a name="l00621"></a>00621 <span class="comment">//     return new(em-&gt;getMM(getMMIndex()))</span>
<a name="l00622"></a>00622 <span class="comment">//       NamedExprValue(d_em, d_kind, d_name, d_children, idx);</span>
<a name="l00623"></a>00623 <span class="comment">//   }</span>
<a name="l00624"></a>00624 
<a name="l00625"></a>00625 <span class="comment">//   ExprValue* copy(ExprManager* em, const std::vector&lt;Expr&gt;&amp; kids,</span>
<a name="l00626"></a>00626 <span class="comment">//            ExprIndex idx = 0) const {</span>
<a name="l00627"></a>00627 <span class="comment">//     return new(em-&gt;getMM(getMMIndex()))</span>
<a name="l00628"></a>00628 <span class="comment">//       NamedExprValue(d_em, d_kind, d_name, kids, idx);</span>
<a name="l00629"></a>00629 <span class="comment">//   }</span>
<a name="l00630"></a>00630 
<a name="l00631"></a>00631 <span class="comment">//   size_t computeHash() const {</span>
<a name="l00632"></a>00632 <span class="comment">//     return s_charHash(d_name.c_str())*PRIME + ExprNode::computeHash();</span>
<a name="l00633"></a>00633 <span class="comment">//   }</span>
<a name="l00634"></a>00634 
<a name="l00635"></a>00635 <span class="comment">//   size_t getMMIndex() const { return EXPR_NAMED; }</span>
<a name="l00636"></a>00636 
<a name="l00637"></a>00637 <span class="comment">// public:</span>
<a name="l00638"></a>00638 <span class="comment">//   // Constructor</span>
<a name="l00639"></a>00639 <span class="comment">//   NamedExprValue(ExprManager *em, int kind, const std::string&amp; name,</span>
<a name="l00640"></a>00640 <span class="comment">//                  const std::vector&lt;Expr&gt;&amp; kids, ExprIndex idx = 0)</span>
<a name="l00641"></a>00641 <span class="comment">//     : ExprNode(em, kind, kids, idx), d_name(name) { }</span>
<a name="l00642"></a>00642 <span class="comment">//   // virtual ~NamedExprValue();</span>
<a name="l00643"></a>00643 <span class="comment">//   bool operator==(const ExprValue&amp; ev2) const {</span>
<a name="l00644"></a>00644 <span class="comment">//     if(getMMIndex() != ev2.getMMIndex()) return false;</span>
<a name="l00645"></a>00645 <span class="comment">//     return (getName() == ev2.getName())</span>
<a name="l00646"></a>00646 <span class="comment">//       &amp;&amp; ExprNode::operator==(ev2);</span>
<a name="l00647"></a>00647 <span class="comment">//   }</span>
<a name="l00648"></a>00648 
<a name="l00649"></a>00649 <span class="comment">//   const std::string&amp; getName() const { return d_name; }</span>
<a name="l00650"></a>00650 
<a name="l00651"></a>00651 <span class="comment">//   // Memory management</span>
<a name="l00652"></a>00652 <span class="comment">//   void* operator new(size_t size, MemoryManager* mm) {</span>
<a name="l00653"></a>00653 <span class="comment">//     return mm-&gt;newData(size);</span>
<a name="l00654"></a>00654 <span class="comment">//   }</span>
<a name="l00655"></a>00655 <span class="comment">//   void operator delete(void*) { }</span>
<a name="l00656"></a>00656 <span class="comment">// }; // end of class NamedExprValue</span>
<a name="l00657"></a>00657 
<a name="l00658"></a>00658 <span class="comment">// Leaf expressions</span>
<a name="l00659"></a><a class="code" href="classCVC3_1_1ExprString.html">00659</a> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprString.html">ExprString</a>: <span class="keyword">public</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a> {
<a name="l00660"></a><a class="code" href="classCVC3_1_1ExprString.html#aa33520359f6cc0f51b476790d39ed869">00660</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>;
<a name="l00661"></a><a class="code" href="classCVC3_1_1ExprString.html#a53c627979d9a14928590601b9fd195c2">00661</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>;
<a name="l00662"></a>00662 <span class="keyword">private</span>:
<a name="l00663"></a><a class="code" href="classCVC3_1_1ExprString.html#accb6b624d3a50f61cffdde3cdb77c13a">00663</a>   std::string <a class="code" href="classCVC3_1_1ExprString.html#accb6b624d3a50f61cffdde3cdb77c13a">d_str</a>;
<a name="l00664"></a>00664 
<a name="l00665"></a>00665   <span class="comment">// Hash function for this subclass</span>
<a name="l00666"></a><a class="code" href="classCVC3_1_1ExprString.html#a5af79e0891867c5049fc6246326832cb">00666</a>   <span class="keyword">static</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprString.html#a5af79e0891867c5049fc6246326832cb">hash</a>(<span class="keyword">const</span> std::string&amp; str) {
<a name="l00667"></a>00667     <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprValue.html#ad7ecd8a88b735ceeedc18df079e640a3" title="Return child with greatest height.">s_charHash</a>(str.c_str());
<a name="l00668"></a>00668   }
<a name="l00669"></a>00669 
<a name="l00670"></a>00670   <span class="comment">// Tell ExprManager who we are</span>
<a name="l00671"></a><a class="code" href="classCVC3_1_1ExprString.html#a50112fa6dbb243ce8eff84bd0dd20815">00671</a>   <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprString.html#a50112fa6dbb243ce8eff84bd0dd20815" title="Get unique memory manager ID.">getMMIndex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceCVC3.html#a492cd44a88003acd985d3c05cbd36ea8aaabca50d22455e77c3f61e8d5307989b">EXPR_STRING</a>; }
<a name="l00672"></a>00672 
<a name="l00673"></a>00673 <span class="keyword">protected</span>:
<a name="l00674"></a>00674   <span class="comment">// Use our static hash() for the member method</span>
<a name="l00675"></a><a class="code" href="classCVC3_1_1ExprString.html#a1b27290de26548ef6614c3820ea44938">00675</a>   <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprString.html#a1b27290de26548ef6614c3820ea44938" title="Non-caching hash function which actually computes the hash.">computeHash</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprValue.html#af56c36f0f7e4aab1a37cf35272d66198" title="Caching hash function.">hash</a>(<a class="code" href="classCVC3_1_1ExprString.html#accb6b624d3a50f61cffdde3cdb77c13a">d_str</a>); }
<a name="l00676"></a>00676 
<a name="l00677"></a><a class="code" href="classCVC3_1_1ExprString.html#a60ae9d5ce7839bee80427357aba8381c">00677</a>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprString.html#a60ae9d5ce7839bee80427357aba8381c" title="String expression tester.">isString</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }
<a name="l00678"></a><a class="code" href="classCVC3_1_1ExprString.html#a4b6491652a4a8c2c4227ad7f15a7763f">00678</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classCVC3_1_1ExprString.html#a4b6491652a4a8c2c4227ad7f15a7763f">getString</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprString.html#accb6b624d3a50f61cffdde3cdb77c13a">d_str</a>; }
<a name="l00679"></a>00679 <span class="comment"></span>
<a name="l00680"></a>00680 <span class="comment">  //! Make a clean copy of itself using the given memory manager</span>
<a name="l00681"></a>00681 <span class="comment"></span>  <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* <a class="code" href="classCVC3_1_1ExprString.html#a0c9b985a0eb85e5b997eb96f224fd3e0" title="Make a clean copy of itself using the given memory manager.">copy</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0) <span class="keyword">const</span>;
<a name="l00682"></a>00682 <span class="keyword">public</span>:
<a name="l00683"></a>00683   <span class="comment">// Constructor</span>
<a name="l00684"></a><a class="code" href="classCVC3_1_1ExprString.html#ad264bc3f1973c5744e0f2e5c205b5e88">00684</a>   <a class="code" href="classCVC3_1_1ExprString.html#ad264bc3f1973c5744e0f2e5c205b5e88">ExprString</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <span class="keyword">const</span> std::string&amp; s, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00685"></a>00685     : <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>(em, <a class="code" href="kinds_8h.html#aa10c9e8951b8ccf714a59ec321bdac5ba354df7c2d2ec2e54317f07437dc7380b">STRING_EXPR</a>, idx), <a class="code" href="classCVC3_1_1ExprString.html#accb6b624d3a50f61cffdde3cdb77c13a">d_str</a>(s) { }
<a name="l00686"></a>00686   <span class="comment">// Destructor</span>
<a name="l00687"></a><a class="code" href="classCVC3_1_1ExprString.html#a6c52dcdd43af02d0072ce0952d7d985d">00687</a>   <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprString.html#a6c52dcdd43af02d0072ce0952d7d985d">~ExprString</a>() { }
<a name="l00688"></a>00688 
<a name="l00689"></a>00689   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprString.html#a796ac7a56c0c18164b13f75fd7d313d9" title="Equality between any two ExprValue objects (including subclasses)">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>&amp; ev2) <span class="keyword">const</span>;
<a name="l00690"></a>00690   <span class="comment">// Memory management</span>
<a name="l00691"></a><a class="code" href="classCVC3_1_1ExprString.html#ae2122a3fcb86c76348fbff2022f5290f">00691</a>   <span class="keywordtype">void</span>* <a class="code" href="classCVC3_1_1ExprString.html#ae2122a3fcb86c76348fbff2022f5290f" title="Overload operator new.">operator new</a>(<span class="keywordtype">size_t</span> size, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00692"></a>00692     <span class="keywordflow">return</span> mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#a3db7efbc4b956bd423a73e1157d70ce0">newData</a>(size);
<a name="l00693"></a>00693   }
<a name="l00694"></a><a class="code" href="classCVC3_1_1ExprString.html#afbae7ed425f56571a50b11fe68a4cc29">00694</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprString.html#afbae7ed425f56571a50b11fe68a4cc29">operator delete</a>(<span class="keywordtype">void</span>* pMem, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00695"></a>00695     mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#ad29fac88d3a07566d9a8f9dc8d8e059c">deleteData</a>(pMem);
<a name="l00696"></a>00696   }
<a name="l00697"></a><a class="code" href="classCVC3_1_1ExprString.html#ae5b7621c5b77904da2d6488832ca27aa">00697</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprString.html#ae5b7621c5b77904da2d6488832ca27aa" title="Overload operator delete.">operator delete</a>(<span class="keywordtype">void</span>*) { }
<a name="l00698"></a>00698 }; <span class="comment">// end of class ExprString</span>
<a name="l00699"></a>00699 
<a name="l00700"></a><a class="code" href="classCVC3_1_1ExprSkolem.html">00700</a> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprSkolem.html">ExprSkolem</a>: <span class="keyword">public</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a> {
<a name="l00701"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#aa33520359f6cc0f51b476790d39ed869">00701</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>;
<a name="l00702"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#a53c627979d9a14928590601b9fd195c2">00702</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>;
<a name="l00703"></a>00703 <span class="keyword">private</span>:
<a name="l00704"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#a7150e40ca8510e397f6fcaa53afc5fe6">00704</a>   <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a> <a class="code" href="classCVC3_1_1ExprSkolem.html#a7150e40ca8510e397f6fcaa53afc5fe6" title="The quantified expression to skolemize.">d_quant</a>; <span class="comment">//!&lt; The quantified expression to skolemize</span>
<a name="l00705"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#aa1678d12963d8343b671f7b8614ac7d7">00705</a> <span class="comment"></span>  <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1ExprSkolem.html#aa1678d12963d8343b671f7b8614ac7d7" title="Variable index in the quantified expression.">d_idx</a>; <span class="comment">//!&lt; Variable index in the quantified expression</span>
<a name="l00706"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#a74d3801141f513953afe8001e85f6d8c">00706</a> <span class="comment"></span>  <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_1ExprSkolem.html#a74d3801141f513953afe8001e85f6d8c">getExistential</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprSkolem.html#a7150e40ca8510e397f6fcaa53afc5fe6" title="The quantified expression to skolemize.">d_quant</a>;}
<a name="l00707"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#a3cd490dac8f01e059ee6c638d6ebb2dc">00707</a>   <span class="keywordtype">int</span> <a class="code" href="classCVC3_1_1ExprSkolem.html#a3cd490dac8f01e059ee6c638d6ebb2dc">getBoundIndex</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprSkolem.html#aa1678d12963d8343b671f7b8614ac7d7" title="Variable index in the quantified expression.">d_idx</a>;}
<a name="l00708"></a>00708 
<a name="l00709"></a>00709   <span class="comment">// Tell ExprManager who we are</span>
<a name="l00710"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#aff1a22aeb126821f72c3bc7e2f3f1900">00710</a>   <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprSkolem.html#aff1a22aeb126821f72c3bc7e2f3f1900" title="Get unique memory manager ID.">getMMIndex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceCVC3.html#a492cd44a88003acd985d3c05cbd36ea8a4e7d647c7c01957f00b94b5a2c86e0a7">EXPR_SKOLEM</a>;}
<a name="l00711"></a>00711 
<a name="l00712"></a>00712 <span class="keyword">protected</span>:
<a name="l00713"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#a64883a16d22840e8dbfb6af24d070c0c">00713</a>   <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprSkolem.html#a64883a16d22840e8dbfb6af24d070c0c" title="Non-caching hash function which actually computes the hash.">computeHash</a>()<span class="keyword"> const </span>{
<a name="l00714"></a>00714     <span class="keywordtype">size_t</span> res = <a class="code" href="classCVC3_1_1ExprSkolem.html#a74d3801141f513953afe8001e85f6d8c">getExistential</a>().<a class="code" href="group__ExprPkg.html#ga9060193194020fee3dac69ed1876a940" title="Get the body of the closure Expr.">getBody</a>().<a class="code" href="group__ExprPkg.html#gadf3d59da15e4f78daf0c41ef7779a749">hash</a>();
<a name="l00715"></a>00715     res = <a class="code" href="expr__value_8h.html#ac4add2a227a10511e0128d63952030e8">PRIME</a>*res + <a class="code" href="classCVC3_1_1ExprSkolem.html#a3cd490dac8f01e059ee6c638d6ebb2dc">getBoundIndex</a>();
<a name="l00716"></a>00716     <span class="keywordflow">return</span> res;
<a name="l00717"></a>00717   }
<a name="l00718"></a>00718 
<a name="l00719"></a>00719   <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprSkolem.html#aecf96e5c8dcce7d539fc95ed445e0395" title="Equality between any two ExprValue objects (including subclasses)">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>&amp; ev2) <span class="keyword">const</span>;
<a name="l00720"></a>00720 <span class="comment"></span>
<a name="l00721"></a>00721 <span class="comment">  //! Make a clean copy of itself using the given memory manager</span>
<a name="l00722"></a>00722 <span class="comment"></span>  <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* <a class="code" href="classCVC3_1_1ExprSkolem.html#aa6412b4c6ffe1ebea37c066219af1d2a" title="Make a clean copy of itself using the given memory manager.">copy</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0) <span class="keyword">const</span>;
<a name="l00723"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#a5821755ee96164397f8efb15c21f4c1b">00723</a>   <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprSkolem.html#a5821755ee96164397f8efb15c21f4c1b" title="Uninterpreted constants.">isVar</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }
<a name="l00724"></a>00724    
<a name="l00725"></a>00725 <span class="keyword">public</span>:
<a name="l00726"></a>00726   <span class="comment">// Constructor</span>
<a name="l00727"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#aee958eb4fd8741e8d6ac80497a5e7bb3">00727</a>   <a class="code" href="classCVC3_1_1ExprSkolem.html#aee958eb4fd8741e8d6ac80497a5e7bb3">ExprSkolem</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <span class="keywordtype">int</span> index, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; exist, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00728"></a>00728     : <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>(em, <a class="code" href="kinds_8h.html#aa10c9e8951b8ccf714a59ec321bdac5ba73072b2c6fef896d006d6691e932cf37">SKOLEM_VAR</a>, idx), <a class="code" href="classCVC3_1_1ExprSkolem.html#a7150e40ca8510e397f6fcaa53afc5fe6" title="The quantified expression to skolemize.">d_quant</a>(exist), <a class="code" href="classCVC3_1_1ExprSkolem.html#aa1678d12963d8343b671f7b8614ac7d7" title="Variable index in the quantified expression.">d_idx</a>(index) { }
<a name="l00729"></a>00729   <span class="comment">// Destructor</span>
<a name="l00730"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#a87d041233e361a3d62443bf47177cbbc">00730</a>   <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprSkolem.html#a87d041233e361a3d62443bf47177cbbc">~ExprSkolem</a>() { }
<a name="l00731"></a>00731   <span class="comment">// Memory management</span>
<a name="l00732"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#a6cbbce920c3c038a27f73fab91ff4d31">00732</a>   <span class="keywordtype">void</span>* <a class="code" href="classCVC3_1_1ExprSkolem.html#a6cbbce920c3c038a27f73fab91ff4d31" title="Overload operator new.">operator new</a>(<span class="keywordtype">size_t</span> size, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00733"></a>00733     <span class="keywordflow">return</span> mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#a3db7efbc4b956bd423a73e1157d70ce0">newData</a>(size);
<a name="l00734"></a>00734   }
<a name="l00735"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#a27e664b7f6c9c1526cae65d04cb1e4c0">00735</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprSkolem.html#a27e664b7f6c9c1526cae65d04cb1e4c0">operator delete</a>(<span class="keywordtype">void</span>* pMem, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00736"></a>00736     mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#ad29fac88d3a07566d9a8f9dc8d8e059c">deleteData</a>(pMem);
<a name="l00737"></a>00737   }
<a name="l00738"></a><a class="code" href="classCVC3_1_1ExprSkolem.html#ab9a193f152a9752a03928f2149dc4837">00738</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprSkolem.html#ab9a193f152a9752a03928f2149dc4837" title="Overload operator delete.">operator delete</a>(<span class="keywordtype">void</span>*) { }
<a name="l00739"></a>00739 }; <span class="comment">// end of class ExprSkolem</span>
<a name="l00740"></a>00740 
<a name="l00741"></a><a class="code" href="classCVC3_1_1ExprRational.html">00741</a> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprRational.html">ExprRational</a>: <span class="keyword">public</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a> {
<a name="l00742"></a><a class="code" href="classCVC3_1_1ExprRational.html#aa33520359f6cc0f51b476790d39ed869">00742</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>;
<a name="l00743"></a><a class="code" href="classCVC3_1_1ExprRational.html#a53c627979d9a14928590601b9fd195c2">00743</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>;
<a name="l00744"></a>00744 <span class="keyword">private</span>:
<a name="l00745"></a><a class="code" href="classCVC3_1_1ExprRational.html#a4734935c4fb389cb78bcfdffaf9dae0b">00745</a>   <a class="code" href="classCVC3_1_1Rational.html">Rational</a> <a class="code" href="classCVC3_1_1ExprRational.html#a4734935c4fb389cb78bcfdffaf9dae0b">d_r</a>;
<a name="l00746"></a>00746 
<a name="l00747"></a><a class="code" href="classCVC3_1_1ExprRational.html#a61f8c45ec5b5980375158803d0452c80">00747</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Rational.html">Rational</a>&amp; <a class="code" href="classCVC3_1_1ExprRational.html#a61f8c45ec5b5980375158803d0452c80">getRational</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprRational.html#a4734935c4fb389cb78bcfdffaf9dae0b">d_r</a>; }
<a name="l00748"></a>00748 
<a name="l00749"></a>00749   <span class="comment">// Hash function for this subclass</span>
<a name="l00750"></a><a class="code" href="classCVC3_1_1ExprRational.html#a9c07dd287902d82dd0d4c6e0062836c1">00750</a>   <span class="keyword">static</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprRational.html#a9c07dd287902d82dd0d4c6e0062836c1">hash</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1Rational.html">Rational</a>&amp; r) {
<a name="l00751"></a>00751     <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprValue.html#ad7ecd8a88b735ceeedc18df079e640a3" title="Return child with greatest height.">s_charHash</a>(r.<a class="code" href="classCVC3_1_1Rational.html#a195c125a76cb9a6c5731369e244a2de3">toString</a>().c_str());
<a name="l00752"></a>00752   }
<a name="l00753"></a>00753 
<a name="l00754"></a>00754   <span class="comment">// Tell ExprManager who we are</span>
<a name="l00755"></a><a class="code" href="classCVC3_1_1ExprRational.html#a34b6ebb3a8750985833ca46a0a899ceb">00755</a>   <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprRational.html#a34b6ebb3a8750985833ca46a0a899ceb" title="Get unique memory manager ID.">getMMIndex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceCVC3.html#a492cd44a88003acd985d3c05cbd36ea8a424556ebe7d7485cbd13e5c1e5228811">EXPR_RATIONAL</a>; }
<a name="l00756"></a>00756 
<a name="l00757"></a>00757 <span class="keyword">protected</span>:
<a name="l00758"></a>00758 
<a name="l00759"></a><a class="code" href="classCVC3_1_1ExprRational.html#ae62f85eba37a27c56ca0de16e792810b">00759</a>   <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprRational.html#ae62f85eba37a27c56ca0de16e792810b" title="Non-caching hash function which actually computes the hash.">computeHash</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprValue.html#af56c36f0f7e4aab1a37cf35272d66198" title="Caching hash function.">hash</a>(<a class="code" href="classCVC3_1_1ExprRational.html#a4734935c4fb389cb78bcfdffaf9dae0b">d_r</a>); }
<a name="l00760"></a>00760   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprRational.html#a62494c541b3be07a0e8ee1c5a85a86cd" title="Equality between any two ExprValue objects (including subclasses)">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>&amp; ev2) <span class="keyword">const</span>;<span class="comment"></span>
<a name="l00761"></a>00761 <span class="comment">  //! Make a clean copy of itself using the given memory manager</span>
<a name="l00762"></a>00762 <span class="comment"></span>  <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* <a class="code" href="classCVC3_1_1ExprRational.html#a3d9af97e78644aac931a3d5bdb45d7d9" title="Make a clean copy of itself using the given memory manager.">copy</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0) <span class="keyword">const</span>;
<a name="l00763"></a><a class="code" href="classCVC3_1_1ExprRational.html#ac33f6dde70c4e5fc8d33bd6841fb80ef">00763</a>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprRational.html#ac33f6dde70c4e5fc8d33bd6841fb80ef" title="Rational number expression tester.">isRational</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }
<a name="l00764"></a>00764 
<a name="l00765"></a>00765 <span class="keyword">public</span>:
<a name="l00766"></a>00766   <span class="comment">// Constructor</span>
<a name="l00767"></a><a class="code" href="classCVC3_1_1ExprRational.html#aa7d395fb3f5aa8c0cf131ffa0fa395bd">00767</a>   <a class="code" href="classCVC3_1_1ExprRational.html#aa7d395fb3f5aa8c0cf131ffa0fa395bd">ExprRational</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Rational.html">Rational</a>&amp; r, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00768"></a>00768     : <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>(em, <a class="code" href="kinds_8h.html#aa10c9e8951b8ccf714a59ec321bdac5bae07a708ec52c578b62f8b0f701571d56">RATIONAL_EXPR</a>, idx), <a class="code" href="classCVC3_1_1ExprRational.html#a4734935c4fb389cb78bcfdffaf9dae0b">d_r</a>(r) { }
<a name="l00769"></a>00769   <span class="comment">// Destructor</span>
<a name="l00770"></a><a class="code" href="classCVC3_1_1ExprRational.html#a81d0cf364e41435ad8e991be15222bcd">00770</a>   <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprRational.html#a81d0cf364e41435ad8e991be15222bcd">~ExprRational</a>() { }
<a name="l00771"></a>00771   <span class="comment">// Memory management</span>
<a name="l00772"></a><a class="code" href="classCVC3_1_1ExprRational.html#a8e5c4661c5f6d519cf27d3338addb686">00772</a>   <span class="keywordtype">void</span>* <a class="code" href="classCVC3_1_1ExprRational.html#a8e5c4661c5f6d519cf27d3338addb686" title="Overload operator new.">operator new</a>(<span class="keywordtype">size_t</span> size, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00773"></a>00773     <span class="keywordflow">return</span> mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#a3db7efbc4b956bd423a73e1157d70ce0">newData</a>(size);
<a name="l00774"></a>00774   }
<a name="l00775"></a><a class="code" href="classCVC3_1_1ExprRational.html#a9263f8ed79422a05b9e745b108652cc6">00775</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprRational.html#a9263f8ed79422a05b9e745b108652cc6">operator delete</a>(<span class="keywordtype">void</span>* pMem, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00776"></a>00776     mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#ad29fac88d3a07566d9a8f9dc8d8e059c">deleteData</a>(pMem);
<a name="l00777"></a>00777   }
<a name="l00778"></a><a class="code" href="classCVC3_1_1ExprRational.html#a86622cdd0de50e2fabb9cc2dbe3b6b7b">00778</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprRational.html#a86622cdd0de50e2fabb9cc2dbe3b6b7b" title="Overload operator delete.">operator delete</a>(<span class="keywordtype">void</span>*) { }
<a name="l00779"></a>00779 }; <span class="comment">// end of class ExprRational</span>
<a name="l00780"></a>00780 
<a name="l00781"></a>00781 <span class="comment">// Uninterpreted constants (variables)</span>
<a name="l00782"></a><a class="code" href="classCVC3_1_1ExprVar.html">00782</a> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprVar.html">ExprVar</a>: <span class="keyword">public</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a> {
<a name="l00783"></a><a class="code" href="classCVC3_1_1ExprVar.html#aa33520359f6cc0f51b476790d39ed869">00783</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>;
<a name="l00784"></a><a class="code" href="classCVC3_1_1ExprVar.html#a53c627979d9a14928590601b9fd195c2">00784</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>;
<a name="l00785"></a>00785 <span class="keyword">private</span>:
<a name="l00786"></a><a class="code" href="classCVC3_1_1ExprVar.html#a4a3d0b1ca16adceaaa42b29b1b860520">00786</a>   std::string <a class="code" href="classCVC3_1_1ExprVar.html#a4a3d0b1ca16adceaaa42b29b1b860520">d_name</a>;
<a name="l00787"></a>00787 
<a name="l00788"></a><a class="code" href="classCVC3_1_1ExprVar.html#a7a80e161bc98205b0f57864149e24bd6">00788</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classCVC3_1_1ExprVar.html#a7a80e161bc98205b0f57864149e24bd6" title="Returns the string name of UCONST and BOUND_VAR expr&#39;s.">getName</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprVar.html#a4a3d0b1ca16adceaaa42b29b1b860520">d_name</a>; }
<a name="l00789"></a>00789 
<a name="l00790"></a>00790   <span class="comment">// Tell ExprManager who we are</span>
<a name="l00791"></a><a class="code" href="classCVC3_1_1ExprVar.html#ad9bcb5d5433a5a689cbf46a43dc42164">00791</a>   <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprVar.html#ad9bcb5d5433a5a689cbf46a43dc42164" title="Get unique memory manager ID.">getMMIndex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceCVC3.html#a492cd44a88003acd985d3c05cbd36ea8a82b57cae98f27f2d8f414efe70d1a1b1">EXPR_UCONST</a>; }
<a name="l00792"></a>00792 <span class="keyword">protected</span>:
<a name="l00793"></a>00793 
<a name="l00794"></a><a class="code" href="classCVC3_1_1ExprVar.html#a2e1ff8f2094e098e12a3673d82e3143b">00794</a>   <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprVar.html#a2e1ff8f2094e098e12a3673d82e3143b" title="Non-caching hash function which actually computes the hash.">computeHash</a>()<span class="keyword"> const </span>{
<a name="l00795"></a>00795     <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprValue.html#ad7ecd8a88b735ceeedc18df079e640a3" title="Return child with greatest height.">s_charHash</a>(<a class="code" href="classCVC3_1_1ExprVar.html#a4a3d0b1ca16adceaaa42b29b1b860520">d_name</a>.c_str());
<a name="l00796"></a>00796   }
<a name="l00797"></a><a class="code" href="classCVC3_1_1ExprVar.html#a229e97b35fc1f314925c047dc2875fcd">00797</a>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprVar.html#a229e97b35fc1f314925c047dc2875fcd" title="Uninterpreted constants.">isVar</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }
<a name="l00798"></a>00798 <span class="comment"></span>
<a name="l00799"></a>00799 <span class="comment">  //! Make a clean copy of itself using the given memory manager</span>
<a name="l00800"></a>00800 <span class="comment"></span>  <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* <a class="code" href="classCVC3_1_1ExprVar.html#ad1d7182255f34bf98de5cb67d6a7f8d2" title="Make a clean copy of itself using the given memory manager.">copy</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0) <span class="keyword">const</span>;
<a name="l00801"></a>00801 
<a name="l00802"></a>00802 <span class="keyword">public</span>:
<a name="l00803"></a>00803   <span class="comment">// Constructor</span>
<a name="l00804"></a><a class="code" href="classCVC3_1_1ExprVar.html#a6c3c58b697e9af41c6a4fa34c79f7c01">00804</a>   <a class="code" href="classCVC3_1_1ExprVar.html#a6c3c58b697e9af41c6a4fa34c79f7c01">ExprVar</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a> *em, <span class="keyword">const</span> std::string&amp; name, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00805"></a>00805     : <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>(em, <a class="code" href="kinds_8h.html#aa10c9e8951b8ccf714a59ec321bdac5ba2efaeb22f8803588598706b73cec8bda">UCONST</a>, idx), <a class="code" href="classCVC3_1_1ExprVar.html#a4a3d0b1ca16adceaaa42b29b1b860520">d_name</a>(name) { }
<a name="l00806"></a>00806   <span class="comment">// Destructor</span>
<a name="l00807"></a><a class="code" href="classCVC3_1_1ExprVar.html#a6ff53da3cea1f7f9b6b5cda284e0697f">00807</a>   <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprVar.html#a6ff53da3cea1f7f9b6b5cda284e0697f">~ExprVar</a>() { }
<a name="l00808"></a>00808 
<a name="l00809"></a>00809   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprVar.html#aeb66b16c91d7e7fde955ec63a3b2155a" title="Equality between any two ExprValue objects (including subclasses)">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>&amp; ev2) <span class="keyword">const</span>;
<a name="l00810"></a>00810   <span class="comment">// Memory management</span>
<a name="l00811"></a><a class="code" href="classCVC3_1_1ExprVar.html#a306691261884de66206347415086bd16">00811</a>   <span class="keywordtype">void</span>* <a class="code" href="classCVC3_1_1ExprVar.html#a306691261884de66206347415086bd16" title="Overload operator new.">operator new</a>(<span class="keywordtype">size_t</span> size, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00812"></a>00812     <span class="keywordflow">return</span> mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#a3db7efbc4b956bd423a73e1157d70ce0">newData</a>(size);
<a name="l00813"></a>00813   }
<a name="l00814"></a><a class="code" href="classCVC3_1_1ExprVar.html#a4f925f36c42b3c21e04a439bbfecf4a6">00814</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprVar.html#a4f925f36c42b3c21e04a439bbfecf4a6">operator delete</a>(<span class="keywordtype">void</span>* pMem, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00815"></a>00815     mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#ad29fac88d3a07566d9a8f9dc8d8e059c">deleteData</a>(pMem);
<a name="l00816"></a>00816   }
<a name="l00817"></a><a class="code" href="classCVC3_1_1ExprVar.html#abdfc6d431887a0622dd1156e807a1632">00817</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprVar.html#abdfc6d431887a0622dd1156e807a1632" title="Overload operator delete.">operator delete</a>(<span class="keywordtype">void</span>*) { }
<a name="l00818"></a>00818 }; <span class="comment">// end of class ExprVar</span>
<a name="l00819"></a>00819 
<a name="l00820"></a>00820 <span class="comment">// Interpreted symbols: similar to UCONST, but returns false for isVar().</span>
<a name="l00821"></a><a class="code" href="classCVC3_1_1ExprSymbol.html">00821</a> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprSymbol.html">ExprSymbol</a>: <span class="keyword">public</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a> {
<a name="l00822"></a><a class="code" href="classCVC3_1_1ExprSymbol.html#aa33520359f6cc0f51b476790d39ed869">00822</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>;
<a name="l00823"></a><a class="code" href="classCVC3_1_1ExprSymbol.html#a53c627979d9a14928590601b9fd195c2">00823</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>;
<a name="l00824"></a>00824 <span class="keyword">private</span>:
<a name="l00825"></a><a class="code" href="classCVC3_1_1ExprSymbol.html#a6115efd11683d02237d45a8eaf690003">00825</a>   std::string <a class="code" href="classCVC3_1_1ExprSymbol.html#a6115efd11683d02237d45a8eaf690003">d_name</a>;
<a name="l00826"></a>00826 
<a name="l00827"></a><a class="code" href="classCVC3_1_1ExprSymbol.html#a2fee651fb0f939b95a0d5b83873d13d2">00827</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classCVC3_1_1ExprSymbol.html#a2fee651fb0f939b95a0d5b83873d13d2" title="Returns the string name of UCONST and BOUND_VAR expr&#39;s.">getName</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprSymbol.html#a6115efd11683d02237d45a8eaf690003">d_name</a>; }
<a name="l00828"></a>00828 
<a name="l00829"></a>00829   <span class="comment">// Tell ExprManager who we are</span>
<a name="l00830"></a><a class="code" href="classCVC3_1_1ExprSymbol.html#abe367584fb2773d7c633376f180078cc">00830</a>   <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprSymbol.html#abe367584fb2773d7c633376f180078cc" title="Get unique memory manager ID.">getMMIndex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceCVC3.html#a492cd44a88003acd985d3c05cbd36ea8a54fe96ba026d0bef6191b315f7190262">EXPR_SYMBOL</a>; }
<a name="l00831"></a>00831 <span class="keyword">protected</span>:
<a name="l00832"></a>00832 
<a name="l00833"></a><a class="code" href="classCVC3_1_1ExprSymbol.html#a09f33e7bff4c27eb7f1642dbf80df541">00833</a>   <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprSymbol.html#a09f33e7bff4c27eb7f1642dbf80df541" title="Non-caching hash function which actually computes the hash.">computeHash</a>()<span class="keyword"> const </span>{
<a name="l00834"></a>00834     <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprValue.html#ad7ecd8a88b735ceeedc18df079e640a3" title="Return child with greatest height.">s_charHash</a>(<a class="code" href="classCVC3_1_1ExprSymbol.html#a6115efd11683d02237d45a8eaf690003">d_name</a>.c_str())*<a class="code" href="expr__value_8h.html#ac4add2a227a10511e0128d63952030e8">PRIME</a> + <a class="code" href="classCVC3_1_1ExprValue.html#af4a750864a9d0e561e4b0ca924540198">s_intHash</a>(<a class="code" href="classCVC3_1_1ExprValue.html#a4984ceea8831c2c175530910174985b4" title="The kind of the expression. In particular, it determines which subclass of ExprValue is used to store...">d_kind</a>);
<a name="l00835"></a>00835   }<span class="comment"></span>
<a name="l00836"></a>00836 <span class="comment">  //! Make a clean copy of itself using the given memory manager</span>
<a name="l00837"></a>00837 <span class="comment"></span>  <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* <a class="code" href="classCVC3_1_1ExprSymbol.html#a1d545499f7a5c73c312a1e8fea68f709" title="Make a clean copy of itself using the given memory manager.">copy</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0) <span class="keyword">const</span>;
<a name="l00838"></a><a class="code" href="classCVC3_1_1ExprSymbol.html#ae90e8432e709dd2ed8e7fc0f444c251a">00838</a>   <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprSymbol.html#ae90e8432e709dd2ed8e7fc0f444c251a" title="Special named symbol.">isSymbol</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }
<a name="l00839"></a>00839 
<a name="l00840"></a>00840 <span class="keyword">public</span>:
<a name="l00841"></a>00841   <span class="comment">// Constructor</span>
<a name="l00842"></a><a class="code" href="classCVC3_1_1ExprSymbol.html#ad74cbf007f9415b3e1940b796d511078">00842</a>   <a class="code" href="classCVC3_1_1ExprSymbol.html#ad74cbf007f9415b3e1940b796d511078">ExprSymbol</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a> *em, <span class="keywordtype">int</span> kind, <span class="keyword">const</span> std::string&amp; name,
<a name="l00843"></a>00843              <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00844"></a>00844     : <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>(em, kind, idx), <a class="code" href="classCVC3_1_1ExprSymbol.html#a6115efd11683d02237d45a8eaf690003">d_name</a>(name) { }
<a name="l00845"></a>00845   <span class="comment">// Destructor</span>
<a name="l00846"></a><a class="code" href="classCVC3_1_1ExprSymbol.html#aafe6ad528417a639c342c22de47ba95e">00846</a>   <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprSymbol.html#aafe6ad528417a639c342c22de47ba95e">~ExprSymbol</a>() { }
<a name="l00847"></a>00847 
<a name="l00848"></a>00848   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprSymbol.html#af4cbd999ce3ae3dd63bd331702057577" title="Equality between any two ExprValue objects (including subclasses)">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>&amp; ev2) <span class="keyword">const</span>;
<a name="l00849"></a>00849   <span class="comment">// Memory management</span>
<a name="l00850"></a><a class="code" href="classCVC3_1_1ExprSymbol.html#a70f2d71990e9d20a2377cc46e6e25e70">00850</a>   <span class="keywordtype">void</span>* <a class="code" href="classCVC3_1_1ExprSymbol.html#a70f2d71990e9d20a2377cc46e6e25e70" title="Overload operator new.">operator new</a>(<span class="keywordtype">size_t</span> size, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00851"></a>00851     <span class="keywordflow">return</span> mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#a3db7efbc4b956bd423a73e1157d70ce0">newData</a>(size);
<a name="l00852"></a>00852   }
<a name="l00853"></a><a class="code" href="classCVC3_1_1ExprSymbol.html#aab0c733525abd0882dd8197067357f3e">00853</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprSymbol.html#aab0c733525abd0882dd8197067357f3e">operator delete</a>(<span class="keywordtype">void</span>* pMem, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00854"></a>00854     mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#ad29fac88d3a07566d9a8f9dc8d8e059c">deleteData</a>(pMem);
<a name="l00855"></a>00855   }
<a name="l00856"></a><a class="code" href="classCVC3_1_1ExprSymbol.html#ae420a1dba6c0a10d6cb74392628d9e54">00856</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprSymbol.html#ae420a1dba6c0a10d6cb74392628d9e54" title="Overload operator delete.">operator delete</a>(<span class="keywordtype">void</span>*) { }
<a name="l00857"></a>00857 }; <span class="comment">// end of class ExprSymbol</span>
<a name="l00858"></a>00858 
<a name="l00859"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html">00859</a> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprBoundVar.html">ExprBoundVar</a>: <span class="keyword">public</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a> {
<a name="l00860"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#aa33520359f6cc0f51b476790d39ed869">00860</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>;
<a name="l00861"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#a53c627979d9a14928590601b9fd195c2">00861</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>;
<a name="l00862"></a>00862 <span class="keyword">private</span>:
<a name="l00863"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#afb672ef190abe04e9b7f548b25039033">00863</a>   std::string <a class="code" href="classCVC3_1_1ExprBoundVar.html#afb672ef190abe04e9b7f548b25039033">d_name</a>;
<a name="l00864"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#ad76c31594ce8da868867ffaec7669b3b">00864</a>   std::string <a class="code" href="classCVC3_1_1ExprBoundVar.html#ad76c31594ce8da868867ffaec7669b3b">d_uid</a>;
<a name="l00865"></a>00865 
<a name="l00866"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#aa39ffcdf8ffc7cee971b3500f9d591fc">00866</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classCVC3_1_1ExprBoundVar.html#aa39ffcdf8ffc7cee971b3500f9d591fc" title="Returns the string name of UCONST and BOUND_VAR expr&#39;s.">getName</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprBoundVar.html#afb672ef190abe04e9b7f548b25039033">d_name</a>; }
<a name="l00867"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#a5a8bdb9ebd6a6eb2b613441304fd4b4b">00867</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classCVC3_1_1ExprBoundVar.html#a5a8bdb9ebd6a6eb2b613441304fd4b4b">getUid</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprBoundVar.html#ad76c31594ce8da868867ffaec7669b3b">d_uid</a>; }
<a name="l00868"></a>00868 
<a name="l00869"></a>00869   <span class="comment">// Tell ExprManager who we are</span>
<a name="l00870"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#aff9cabb507294318f15da1c0f22a4684">00870</a>   <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprBoundVar.html#aff9cabb507294318f15da1c0f22a4684" title="Get unique memory manager ID.">getMMIndex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceCVC3.html#a492cd44a88003acd985d3c05cbd36ea8a58a9f13ea5962be2ef65dc0693743d81">EXPR_BOUND_VAR</a>; }
<a name="l00871"></a>00871 <span class="keyword">protected</span>:
<a name="l00872"></a>00872 
<a name="l00873"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#af6e764f471cc4e0ce46fca1be122fb6f">00873</a>   <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprBoundVar.html#af6e764f471cc4e0ce46fca1be122fb6f" title="Non-caching hash function which actually computes the hash.">computeHash</a>()<span class="keyword"> const </span>{
<a name="l00874"></a>00874     <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprValue.html#ad7ecd8a88b735ceeedc18df079e640a3" title="Return child with greatest height.">s_charHash</a>(<a class="code" href="classCVC3_1_1ExprBoundVar.html#afb672ef190abe04e9b7f548b25039033">d_name</a>.c_str())*<a class="code" href="expr__value_8h.html#ac4add2a227a10511e0128d63952030e8">PRIME</a> + <a class="code" href="classCVC3_1_1ExprValue.html#ad7ecd8a88b735ceeedc18df079e640a3" title="Return child with greatest height.">s_charHash</a>(<a class="code" href="classCVC3_1_1ExprBoundVar.html#ad76c31594ce8da868867ffaec7669b3b">d_uid</a>.c_str());
<a name="l00875"></a>00875   }
<a name="l00876"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#ade9c751983350426473a892f39197418">00876</a>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprBoundVar.html#ade9c751983350426473a892f39197418" title="Uninterpreted constants.">isVar</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }<span class="comment"></span>
<a name="l00877"></a>00877 <span class="comment">  //! Make a clean copy of itself using the given memory manager</span>
<a name="l00878"></a>00878 <span class="comment"></span>  <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* <a class="code" href="classCVC3_1_1ExprBoundVar.html#a725cc70819afe83d681da8b5e6d5c465" title="Make a clean copy of itself using the given memory manager.">copy</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0) <span class="keyword">const</span>;
<a name="l00879"></a>00879 
<a name="l00880"></a>00880 <span class="keyword">public</span>:
<a name="l00881"></a>00881   <span class="comment">// Constructor</span>
<a name="l00882"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#a03e7b07ca59de46b70c5a2827675a7c3">00882</a>   <a class="code" href="classCVC3_1_1ExprBoundVar.html#a03e7b07ca59de46b70c5a2827675a7c3">ExprBoundVar</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a> *em, <span class="keyword">const</span> std::string&amp; name,
<a name="l00883"></a>00883                <span class="keyword">const</span> std::string&amp; uid, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00884"></a>00884     : <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>(em, <a class="code" href="kinds_8h.html#aa10c9e8951b8ccf714a59ec321bdac5ba462c38186c36e12c2f38a6d0d43feddf">BOUND_VAR</a>, idx), <a class="code" href="classCVC3_1_1ExprBoundVar.html#afb672ef190abe04e9b7f548b25039033">d_name</a>(name), <a class="code" href="classCVC3_1_1ExprBoundVar.html#ad76c31594ce8da868867ffaec7669b3b">d_uid</a>(uid) { }
<a name="l00885"></a>00885   <span class="comment">// Destructor</span>
<a name="l00886"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#a2d6a3d525cec1400719d2f3d28cd8f93">00886</a>   <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprBoundVar.html#a2d6a3d525cec1400719d2f3d28cd8f93">~ExprBoundVar</a>() { }
<a name="l00887"></a>00887 
<a name="l00888"></a>00888   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprBoundVar.html#a7c23a77bf1e2f6be4cd5b67335667520" title="Equality between any two ExprValue objects (including subclasses)">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>&amp; ev2) <span class="keyword">const</span>;
<a name="l00889"></a>00889   <span class="comment">// Memory management</span>
<a name="l00890"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#a8ab09a651603d1924ce24b47c6641f18">00890</a>   <span class="keywordtype">void</span>* <a class="code" href="classCVC3_1_1ExprBoundVar.html#a8ab09a651603d1924ce24b47c6641f18" title="Overload operator new.">operator new</a>(<span class="keywordtype">size_t</span> size, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00891"></a>00891     <span class="keywordflow">return</span> mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#a3db7efbc4b956bd423a73e1157d70ce0">newData</a>(size);
<a name="l00892"></a>00892   }
<a name="l00893"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#a5135303d554fa0fd66af50a68b8ba35a">00893</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprBoundVar.html#a5135303d554fa0fd66af50a68b8ba35a">operator delete</a>(<span class="keywordtype">void</span>* pMem, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00894"></a>00894     mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#ad29fac88d3a07566d9a8f9dc8d8e059c">deleteData</a>(pMem);
<a name="l00895"></a>00895   }
<a name="l00896"></a><a class="code" href="classCVC3_1_1ExprBoundVar.html#ad891ddc71457c27eb3514f64d2d3bc7a">00896</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprBoundVar.html#ad891ddc71457c27eb3514f64d2d3bc7a" title="Overload operator delete.">operator delete</a>(<span class="keywordtype">void</span>*) { }
<a name="l00897"></a>00897 }; <span class="comment">// end of class ExprBoundVar</span>
<a name="l00898"></a>00898 <span class="comment"></span>
<a name="l00899"></a>00899 <span class="comment">/*! @brief A &quot;closure&quot; expression which binds variables used in the</span>
<a name="l00900"></a>00900 <span class="comment">  &quot;body&quot;.  Used by LAMBDA and quantifiers. */</span>
<a name="l00901"></a><a class="code" href="classCVC3_1_1ExprClosure.html">00901</a> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprClosure.html" title="A &quot;closure&quot; expression which binds variables used in the &quot;body&quot;. Used by LAMBDA and quantifiers...">ExprClosure</a>: <span class="keyword">public</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a> {
<a name="l00902"></a><a class="code" href="classCVC3_1_1ExprClosure.html#aa33520359f6cc0f51b476790d39ed869">00902</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>;
<a name="l00903"></a><a class="code" href="classCVC3_1_1ExprClosure.html#a53c627979d9a14928590601b9fd195c2">00903</a>   <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>;
<a name="l00904"></a>00904 <span class="keyword">private</span>:<span class="comment"></span>
<a name="l00905"></a>00905 <span class="comment">  //! Bound variables</span>
<a name="l00906"></a><a class="code" href="classCVC3_1_1ExprClosure.html#a1a780225d6b380bcb8e70b7aad6afcd9">00906</a> <span class="comment"></span>  std::vector&lt;Expr&gt; <a class="code" href="classCVC3_1_1ExprClosure.html#a1a780225d6b380bcb8e70b7aad6afcd9" title="Bound variables.">d_vars</a>;<span class="comment"></span>
<a name="l00907"></a>00907 <span class="comment">  //! The body of the quantifier/lambda</span>
<a name="l00908"></a><a class="code" href="classCVC3_1_1ExprClosure.html#a52ea7bc0c709276a526023bff75b22df">00908</a> <span class="comment"></span>  <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a> <a class="code" href="classCVC3_1_1ExprClosure.html#a52ea7bc0c709276a526023bff75b22df" title="The body of the quantifier/lambda.">d_body</a>;<span class="comment"></span>
<a name="l00909"></a>00909 <span class="comment">  //! Manual triggers. // added by yeting</span>
<a name="l00910"></a>00910 <span class="comment"></span>  <span class="comment">// Note that due to expr caching, only the most recent triggers specified for a given formula will be used.</span>
<a name="l00911"></a><a class="code" href="classCVC3_1_1ExprClosure.html#ae562a70aa45933ab897755e59586c5ea">00911</a>   std::vector&lt;std::vector&lt;Expr&gt; &gt; <a class="code" href="classCVC3_1_1ExprClosure.html#ae562a70aa45933ab897755e59586c5ea" title="Manual triggers. // added by yeting.">d_manual_triggers</a>;<span class="comment"></span>
<a name="l00912"></a>00912 <span class="comment">  //! Tell ExprManager who we are</span>
<a name="l00913"></a><a class="code" href="classCVC3_1_1ExprClosure.html#a4c77585f13ed65198748dcce7d63ebeb">00913</a> <span class="comment"></span>  <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprClosure.html#a4c77585f13ed65198748dcce7d63ebeb" title="Tell ExprManager who we are.">getMMIndex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceCVC3.html#a492cd44a88003acd985d3c05cbd36ea8a93c8095a1c01d7a11081e615b94a3b2b">EXPR_CLOSURE</a>; }
<a name="l00914"></a>00914 
<a name="l00915"></a><a class="code" href="classCVC3_1_1ExprClosure.html#ae620c1d3c479f7335e3018c28d744ba4">00915</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; <a class="code" href="classCVC3_1_1ExprClosure.html#ae620c1d3c479f7335e3018c28d744ba4">getVars</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprClosure.html#a1a780225d6b380bcb8e70b7aad6afcd9" title="Bound variables.">d_vars</a>; }
<a name="l00916"></a><a class="code" href="classCVC3_1_1ExprClosure.html#ac53af27e93829100ce627c1396f2224d">00916</a>   <span class="keyword">virtual</span> <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_1ExprClosure.html#ac53af27e93829100ce627c1396f2224d">getBody</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprClosure.html#a52ea7bc0c709276a526023bff75b22df" title="The body of the quantifier/lambda.">d_body</a>; }
<a name="l00917"></a><a class="code" href="classCVC3_1_1ExprClosure.html#ac5a8b4bfa2be7fcca103aa006f54c7bd">00917</a>   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprClosure.html#ac5a8b4bfa2be7fcca103aa006f54c7bd">setTriggers</a>(<span class="keyword">const</span> std::vector&lt;std::vector&lt;Expr&gt; &gt;&amp; triggers) { <a class="code" href="classCVC3_1_1ExprClosure.html#ae562a70aa45933ab897755e59586c5ea" title="Manual triggers. // added by yeting.">d_manual_triggers</a> = triggers; }
<a name="l00918"></a><a class="code" href="classCVC3_1_1ExprClosure.html#ab1e5706a15cd27dae0dc98a6408ab2da">00918</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;std::vector&lt;Expr&gt; &gt;&amp;  <a class="code" href="classCVC3_1_1ExprClosure.html#ab1e5706a15cd27dae0dc98a6408ab2da">getTriggers</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprClosure.html#ae562a70aa45933ab897755e59586c5ea" title="Manual triggers. // added by yeting.">d_manual_triggers</a>; }
<a name="l00919"></a>00919 
<a name="l00920"></a>00920 <span class="keyword">protected</span>:
<a name="l00921"></a>00921 
<a name="l00922"></a>00922   <span class="keywordtype">size_t</span> <a class="code" href="classCVC3_1_1ExprClosure.html#a951f66c6e23cc85e9971d3635a5ca32f" title="Non-caching hash function which actually computes the hash.">computeHash</a>() <span class="keyword">const</span>;
<a name="l00923"></a><a class="code" href="classCVC3_1_1ExprClosure.html#a79e25ba45878808a6bc469b59067af9e">00923</a>   <a class="code" href="classCVC3_1_1Unsigned.html">Unsigned</a> <a class="code" href="classCVC3_1_1ExprClosure.html#a79e25ba45878808a6bc469b59067af9e" title="Non-caching size function which actually computes the size.">computeSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCVC3_1_1ExprClosure.html#a52ea7bc0c709276a526023bff75b22df" title="The body of the quantifier/lambda.">d_body</a>.<a class="code" href="group__ExprPkg.html#ga3a08bea4e8715a268083e1671e340a2e">d_expr</a>-&gt;<a class="code" href="classCVC3_1_1ExprValue.html#a68254536adeffd89a4c6837df4c0095f" title="Return DAG-size of Expr.">getSize</a>() + 1; }<span class="comment"></span>
<a name="l00924"></a>00924 <span class="comment">  //! Make a clean copy of itself using the given memory manager</span>
<a name="l00925"></a>00925 <span class="comment"></span>  <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>* <a class="code" href="classCVC3_1_1ExprClosure.html#ab6e542c95c172b7808b5482f07b98ece" title="Make a clean copy of itself using the given memory manager.">copy</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a>* em, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0) <span class="keyword">const</span>;
<a name="l00926"></a>00926 
<a name="l00927"></a>00927 <span class="keyword">public</span>:
<a name="l00928"></a>00928   <span class="comment">// Constructor</span>
<a name="l00929"></a><a class="code" href="classCVC3_1_1ExprClosure.html#ad52fb63de9d007420ed477924eb456fd">00929</a>   <a class="code" href="classCVC3_1_1ExprClosure.html#ad52fb63de9d007420ed477924eb456fd">ExprClosure</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a> *em, <span class="keywordtype">int</span> kind, <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; var,
<a name="l00930"></a>00930               <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; body, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00931"></a>00931     : <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>(em, kind, idx), <a class="code" href="classCVC3_1_1ExprClosure.html#a52ea7bc0c709276a526023bff75b22df" title="The body of the quantifier/lambda.">d_body</a>(body) { <a class="code" href="classCVC3_1_1ExprClosure.html#a1a780225d6b380bcb8e70b7aad6afcd9" title="Bound variables.">d_vars</a>.push_back(var); }
<a name="l00932"></a>00932 
<a name="l00933"></a><a class="code" href="classCVC3_1_1ExprClosure.html#aad6b166e1599049c4c31dfefe8321bdd">00933</a>   <a class="code" href="classCVC3_1_1ExprClosure.html#ad52fb63de9d007420ed477924eb456fd">ExprClosure</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a> *em, <span class="keywordtype">int</span> kind, <span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; vars,
<a name="l00934"></a>00934               <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; body, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00935"></a>00935     : <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>(em, kind, idx), <a class="code" href="classCVC3_1_1ExprClosure.html#a1a780225d6b380bcb8e70b7aad6afcd9" title="Bound variables.">d_vars</a>(vars), <a class="code" href="classCVC3_1_1ExprClosure.html#a52ea7bc0c709276a526023bff75b22df" title="The body of the quantifier/lambda.">d_body</a>(body) { }
<a name="l00936"></a>00936 
<a name="l00937"></a><a class="code" href="classCVC3_1_1ExprClosure.html#a9bf2a4d839ea73ac2822574159ef4dde">00937</a>   <a class="code" href="classCVC3_1_1ExprClosure.html#ad52fb63de9d007420ed477924eb456fd">ExprClosure</a>(<a class="code" href="classCVC3_1_1ExprManager.html">ExprManager</a> *em, <span class="keywordtype">int</span> kind, <span class="keyword">const</span> std::vector&lt;Expr&gt;&amp; vars, 
<a name="l00938"></a>00938               <span class="keyword">const</span> <a class="code" href="classCVC3_1_1Expr.html" title="Data structure of expressions in CVC3.">Expr</a>&amp; body, <span class="keyword">const</span> std::vector&lt;std::vector&lt;Expr&gt; &gt;&amp;  trigs, <a class="code" href="namespaceCVC3.html#a4233916514848331ee104548acbab912" title="Expression index type.">ExprIndex</a> idx = 0)
<a name="l00939"></a>00939     : <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>(em, kind, idx), <a class="code" href="classCVC3_1_1ExprClosure.html#a1a780225d6b380bcb8e70b7aad6afcd9" title="Bound variables.">d_vars</a>(vars), <a class="code" href="classCVC3_1_1ExprClosure.html#a52ea7bc0c709276a526023bff75b22df" title="The body of the quantifier/lambda.">d_body</a>(body),  <a class="code" href="classCVC3_1_1ExprClosure.html#ae562a70aa45933ab897755e59586c5ea" title="Manual triggers. // added by yeting.">d_manual_triggers</a>(trigs) { }
<a name="l00940"></a>00940 
<a name="l00941"></a>00941   <span class="comment">// Destructor</span>
<a name="l00942"></a><a class="code" href="classCVC3_1_1ExprClosure.html#a7a22d1afd2fb54a503632dbea90bb8fd">00942</a>   <span class="keyword">virtual</span> <a class="code" href="classCVC3_1_1ExprClosure.html#a7a22d1afd2fb54a503632dbea90bb8fd">~ExprClosure</a>() { }
<a name="l00943"></a>00943 
<a name="l00944"></a>00944   <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprClosure.html#a5436ff96ddf0bc10741e5704e017b9e5" title="Equality between any two ExprValue objects (including subclasses)">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCVC3_1_1ExprValue.html" title="The base class for holding the actual data in expressions.">ExprValue</a>&amp; ev2) <span class="keyword">const</span>;
<a name="l00945"></a>00945   <span class="comment">// Memory management</span>
<a name="l00946"></a><a class="code" href="classCVC3_1_1ExprClosure.html#ad7761a9c1c4fd14141d0a708c056c822">00946</a>   <span class="keywordtype">void</span>* <a class="code" href="classCVC3_1_1ExprClosure.html#ad7761a9c1c4fd14141d0a708c056c822" title="Overload operator new.">operator new</a>(<span class="keywordtype">size_t</span> size, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00947"></a>00947     <span class="keywordflow">return</span> mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#a3db7efbc4b956bd423a73e1157d70ce0">newData</a>(size);
<a name="l00948"></a>00948   }
<a name="l00949"></a><a class="code" href="classCVC3_1_1ExprClosure.html#a1034f4299eeaaec6f21838a8578efe03">00949</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprClosure.html#a1034f4299eeaaec6f21838a8578efe03">operator delete</a>(<span class="keywordtype">void</span>* pMem, <a class="code" href="classCVC3_1_1MemoryManager.html">MemoryManager</a>* mm) {
<a name="l00950"></a>00950     mm-&gt;<a class="code" href="classCVC3_1_1MemoryManager.html#ad29fac88d3a07566d9a8f9dc8d8e059c">deleteData</a>(pMem);
<a name="l00951"></a>00951   }
<a name="l00952"></a><a class="code" href="classCVC3_1_1ExprClosure.html#a411df5da1aab06e9520c59b7f9f80500">00952</a>   <span class="keywordtype">void</span> <a class="code" href="classCVC3_1_1ExprClosure.html#a411df5da1aab06e9520c59b7f9f80500" title="Overload operator delete.">operator delete</a>(<span class="keywordtype">void</span>*) { }
<a name="l00953"></a><a class="code" href="classCVC3_1_1ExprClosure.html#a8ce919aadc4c527ad3133adb84eed089">00953</a>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classCVC3_1_1ExprClosure.html#a8ce919aadc4c527ad3133adb84eed089" title="A LAMBDA-expression or a quantifier.">isClosure</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }
<a name="l00954"></a>00954 }; <span class="comment">// end of class ExprClosure</span>
<a name="l00955"></a>00955 
<a name="l00956"></a>00956 
<a name="l00957"></a>00957 } <span class="comment">// end of namespace CVC3</span>
<a name="l00958"></a>00958 
<a name="l00959"></a>00959 <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>