Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > ffa1e6f5ad04360808fe8840fe3ba036 > files > 161

vrq-devel-1.0.88-1.fc14.i686.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>vrq: CNode Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
  <table border="0" cellspacing="0" cellpadding="0" width="100%">
   <tr>
    <td width="180"><a href="index.html"><img src="vrq.png" width="150" height="100" border="0" alt="vrq"></a></td>
    <td background="top_bg.png" align="right" width="100%">
      <img src="glyth.png" width="500" height="100" border="0" alt="">
    </td>
   </tr>
   <tr>
    <td background="#FFFFFF" align="right" width="50" height="4"></td>
   </tr>
  </table>
</head><body>
<!-- Generated by Doxygen 1.7.1 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
      <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a>  </div>
  <div class="headertitle">
<h1>CNode Class Reference</h1>  </div>
</div>
<div class="contents">
<!-- doxytag: class="CNode" --><!-- doxytag: inherits="CObject" -->
<p>Primary data structure representing parse tree nodes.  
<a href="#_details">More...</a></p>

<p><code>#include &lt;<a class="el" href="cnode_8h_source.html">cnode.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for CNode:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classCNode.png" usemap="#CNode_map" alt=""/>
  <map id="CNode_map" name="CNode_map">
<area href="classCObject.html" alt="CObject" shape="rect" coords="0,0,58,24"/>
</map>
</div>

<p><a href="classCNode-members.html">List of all members.</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#ad959ad79c878000832b757937e71a63f">CNode</a> (<a class="el" href="structCoord__t.html">Coord_t</a> *aLoc, <a class="el" href="cnode__def_8h.html#a21e7e2c6d95679cd908f0b20e8408513">NodeOp_t</a> aOp)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constructor for parse node.  <a href="#ad959ad79c878000832b757937e71a63f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structCoord__t.html">Coord_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a4822c9360f069b308f6ed62debb28151">GetCoord</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get node's file coordinates.  <a href="#a4822c9360f069b308f6ed62debb28151"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="cnode__def_8h.html#a21e7e2c6d95679cd908f0b20e8408513">NodeOp_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#aea4bcc23b1bba68d0a243e729b9da0ce">GetOp</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return node's operation type.  <a href="#aea4bcc23b1bba68d0a243e729b9da0ce"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a16b5c099d1ac314ca36121a760f81c88">SetOp</a> (<a class="el" href="cnode__def_8h.html#a21e7e2c6d95679cd908f0b20e8408513">NodeOp_t</a> aOp)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set node's operation type.  <a href="#a16b5c099d1ac314ca36121a760f81c88"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#aa033841783882d505e2be1a38ed1a32c">Hash</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate hash of tree.  <a href="#aa033841783882d505e2be1a38ed1a32c"></a><br/></td></tr>
<tr><td class="memTemplParams" colspan="2">template&lt;class T &gt; </td></tr>
<tr><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classCNode__sp.html">CNode_sp</a>&lt; T &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classCNode.html#a380e5e5cec5d65afc871ea9c64c27135">Arg</a> (int index)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get a node's operand.  <a href="#a380e5e5cec5d65afc871ea9c64c27135"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a8112f4008e9237d8cbd78429446c68bb">ArgCount</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of operands for the node.  <a href="#a8112f4008e9237d8cbd78429446c68bb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCNode.html">CNode</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a9141bcdb51320383820d0d268c50eb71">Clone</a> (<a class="el" href="classCObstack.html">CObstack</a> *heap=stack)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Replicate tree.  <a href="#a9141bcdb51320383820d0d268c50eb71"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a9de9394f1024fcdd68f7ed82609c347e">Precedence</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the precedence of the operator represented by the node.  <a href="#a9de9394f1024fcdd68f7ed82609c347e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a474cb6a7eeff6e6182359381c1f5753a">PostVisit1</a> (void(*callback)(<a class="el" href="classCNode.html">CNode</a> *, void *), void *data)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Walk tree invoking callback on each node after children have been visited.  <a href="#a474cb6a7eeff6e6182359381c1f5753a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCNode.html">CNode</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a4302c1d26a33a5a4169b79d30daccd8a">PostSubVisit1</a> (<a class="el" href="classCNode.html">CNode</a> *(*callback)(<a class="el" href="classCNode.html">CNode</a> *, void *), void *data)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Walk tree invoking callback on each node after children have been visited.  <a href="#a4302c1d26a33a5a4169b79d30daccd8a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a99e57d389a0c4042f2b38eb8d2b7f164">PreVisit1</a> (int(*callback)(<a class="el" href="classCNode.html">CNode</a> *, void *), void *data)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Walk tree invoking callback on each node before children have been visited.  <a href="#a99e57d389a0c4042f2b38eb8d2b7f164"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCNode.html">CNode</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a8589a7f9323bb6374cb43219ecfbbd84">Simplify</a> (<a class="el" href="glue_8h.html#a0cb58e7e6f0bad369840a52e54a56ae0">INT32</a> newWidth, <a class="el" href="cdatatype_8h.html#aff499c00c9873bf3fcf1c46bf2652790">NodeType_t</a> newType)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create simplified expression tree with given width and type.  <a href="#a8589a7f9323bb6374cb43219ecfbbd84"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a3f3afd2955807122314575a0e4e150ca">IsNonX</a> (int integerIsNonX=0, char *exclude=NULL)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Checks expression tree to see if expression can result in an X or Z.  <a href="#a3f3afd2955807122314575a0e4e150ca"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a502e4db2e95f5a117c38f87bb5215de5">IsConstant</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Checks expression tree to see if it is constant.  <a href="#a502e4db2e95f5a117c38f87bb5215de5"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#ad279202102b4f81c9d25ad8727ecc7d9">IsEvaluateable</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Checks to see if expression tree can be evaluated.  <a href="#ad279202102b4f81c9d25ad8727ecc7d9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a7ca286cfec44b3a6d9f38bfc1cb780a6">IsVolatile</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Checks to see if expression tree is volatile.  <a href="#a7ca286cfec44b3a6d9f38bfc1cb780a6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="glue_8h.html#a0cb58e7e6f0bad369840a52e54a56ae0">INT32</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a4b83e73f220c7487b38a3fba0a1f12f2">EvalINT32</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Evaluates expression tree and returns value as a 32 bit integer.  <a href="#a4b83e73f220c7487b38a3fba0a1f12f2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a5503573dc2dabfcb88815576831a4a55">EvalVector</a> (<a class="el" href="classCVector.html">CVector</a> &amp;v)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Evaluates expression tree evaluated in unconstrainted context.  <a href="#a5503573dc2dabfcb88815576831a4a55"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#aad1dc12e541826b1f2e17f6aef39632e">EvalVector</a> (<a class="el" href="classCVector.html">CVector</a> &amp;v, <a class="el" href="glue_8h.html#a0cb58e7e6f0bad369840a52e54a56ae0">INT32</a> newWidth, <a class="el" href="cdatatype_8h.html#aff499c00c9873bf3fcf1c46bf2652790">NodeType_t</a> newType)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Evaluates expression tree evaluated in the specified context.  <a href="#aad1dc12e541826b1f2e17f6aef39632e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a4b059e1817976d9f53bec0898d1d4b3b">EvalReal</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Evaluates expression tree evaluated in a real context.  <a href="#a4b059e1817976d9f53bec0898d1d4b3b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a0b468e037caf218454a6a210b98697d2">Dump</a> (FILE *f)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print a compact representation of the parse tree.  <a href="#a0b468e037caf218454a6a210b98697d2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#acc4d0c6b5cea6949754e4ebfcfd14bca">IsWidthConstant</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Evaluates if expression width is constant.  <a href="#acc4d0c6b5cea6949754e4ebfcfd14bca"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a4c58242c86884ca9ba9a7244a9a0970c">IsWidthVolatile</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Evaluates if expression width is volatile.  <a href="#a4c58242c86884ca9ba9a7244a9a0970c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#ab7a798650fb20d393f357b300b60737e">IsWidthEvaluateable</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Evaluates if expression width can be evaluated.  <a href="#ab7a798650fb20d393f357b300b60737e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCNode.html">CNode</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#ac30e190c8020b215eae31d1a1e7353f1">GetWidthExp</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create expression representing width of expression.  <a href="#ac30e190c8020b215eae31d1a1e7353f1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="glue_8h.html#a0cb58e7e6f0bad369840a52e54a56ae0">INT32</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#acc0ddc36117388a91352e39e449f6f0e">GetWidth</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Evaluate width of expression.  <a href="#acc0ddc36117388a91352e39e449f6f0e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#abc3c773a01f308a86a2e3b6134c31c61">IsScalar</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determine if expression is a 1 bit signed or unsigned value.  <a href="#abc3c773a01f308a86a2e3b6134c31c61"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a11d5eea07e5095ff6bf5b4f3fee2aea0">IsVector</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determine if expression is a multi-bit signed or unsigned value.  <a href="#a11d5eea07e5095ff6bf5b4f3fee2aea0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a24ad7d7060bfa89e16c1b5ea751dcc2a">IsReal</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determine if expression is real.  <a href="#a24ad7d7060bfa89e16c1b5ea751dcc2a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCNode.html">CNode</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#ad70eb3f37a5aa3c4459765bff21a6c8e">GetAttributes</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get attributes attached to operation.  <a href="#ad70eb3f37a5aa3c4459765bff21a6c8e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a913e3feeeb243fc89f7fe30ba9ef1bad">SetAttributes</a> (<a class="el" href="classCNode.html">CNode</a> *attr)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Attach attributes to operation.  <a href="#a913e3feeeb243fc89f7fe30ba9ef1bad"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#ae60a066d098bcecb904c436aa514f99e">HasAttribute</a> (const char *name, <a class="el" href="classCNode.html">CNode</a> *n=NULL, int init=1)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determine if node has the given attribute.  <a href="#ae60a066d098bcecb904c436aa514f99e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCAttr.html">CAttr</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#ab64a772f477c5970a5ad6cc806f87174">GetAttribute</a> (const char *name, <a class="el" href="classCNode.html">CNode</a> *n=NULL, int init=1)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get attribute attached to node with the given attribute.  <a href="#ab64a772f477c5970a5ad6cc806f87174"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="cdatatype_8h.html#aff499c00c9873bf3fcf1c46bf2652790">NodeType_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a04082f01000bc79c004e063d77841755">GetNodeType</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get node expression type.  <a href="#a04082f01000bc79c004e063d77841755"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classCObstack.html">CObstack</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#ac6e8859a1a0ff907ce428f1d416a3e50">CurrentHeap</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets pointer to current heap allocator.  <a href="#ac6e8859a1a0ff907ce428f1d416a3e50"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#aceb010903a1eed3faf9b624efe39b59f">UseEvalStack</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Use evaluation stack.  <a href="#aceb010903a1eed3faf9b624efe39b59f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a3cc9d5a6aa558b8329cb74aaca59ee16">SetBuildStack</a> (<a class="el" href="classCObstack.html">CObstack</a> *aStack)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set heap to a specific heap.  <a href="#a3cc9d5a6aa558b8329cb74aaca59ee16"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a8e136fbeb5667916489f13eb25857150">ResetBuildStack</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Restore previous heap.  <a href="#a8e136fbeb5667916489f13eb25857150"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a00647caded505eb712d2087d552e9c95">EnableLabelCache</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enable cache of labeled nodes to be tracked.  <a href="#a00647caded505eb712d2087d552e9c95"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCNode.html#a7821d44f84eb78f006d3019d5e9c6bcd">DisableAndClearLabelCache</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Disable caching of label info (width and type) and clear all accumulated data.  <a href="#a7821d44f84eb78f006d3019d5e9c6bcd"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>Primary data structure representing parse tree nodes. </p>
<p>Each parse tree node is represented as a forest of binary <a class="el" href="classCNode.html" title="Primary data structure representing parse tree nodes.">CNode</a> objects. Nodes are always balenced with left to right construction.</p>
<p><a class="el" href="classCNode.html" title="Primary data structure representing parse tree nodes.">CNode</a> uses the <a class="el" href="classCObstack.html" title="Bulk object allocation object.">CObstack</a> memory allocator (via <a class="el" href="classCObject.html" title="Base class for vrq objects.">CObject</a>). This allows memory to be allocated in large slabs and released enmasse.</p>
<p>Each parse node represents an operation, represented by NodeOp_t. Additionally expression nodes may also be decorated with file/line info, verilog attributes, and temporary tags. All decorations are only valid on the <a class="el" href="classCNode.html" title="Primary data structure representing parse tree nodes.">CNode</a> at the root of the parse nodes <a class="el" href="classCNode.html" title="Primary data structure representing parse tree nodes.">CNode</a> graph.</p>
<p>The operands of a parse tree node are referenced using the method Arg. A description of the parse tree nodes and there arguments can be found here: <a class="el" href="parse_tree_node.html">Parse Tree Nodes</a> . </p>
<hr/><h2>Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="ad959ad79c878000832b757937e71a63f"></a><!-- doxytag: member="CNode::CNode" ref="ad959ad79c878000832b757937e71a63f" args="(Coord_t *aLoc, NodeOp_t aOp)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">CNode::CNode </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structCoord__t.html">Coord_t</a> *&nbsp;</td>
          <td class="paramname"> <em>aLoc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="cnode__def_8h.html#a21e7e2c6d95679cd908f0b20e8408513">NodeOp_t</a>&nbsp;</td>
          <td class="paramname"> <em>aOp</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Constructor for parse node. </p>
<p>Note this routine will create a linked set of <a class="el" href="classCNode.html" title="Primary data structure representing parse tree nodes.">CNode</a> for nodes with more than 2 operands. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>aLoc</em>&nbsp;</td><td>is file info for the parse node. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>aOp</em>&nbsp;</td><td>is the parse node operation. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<hr/><h2>Member Function Documentation</h2>
<a class="anchor" id="a380e5e5cec5d65afc871ea9c64c27135"></a><!-- doxytag: member="CNode::Arg" ref="a380e5e5cec5d65afc871ea9c64c27135" args="(int index)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classCNode__sp.html">CNode_sp</a>&lt; T &gt; CNode::Arg </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>index</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get a node's operand. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>is a the operand number (zero based). </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>type safe operand "number" of node </dd></dl>

</div>
</div>
<a class="anchor" id="a8112f4008e9237d8cbd78429446c68bb"></a><!-- doxytag: member="CNode::ArgCount" ref="a8112f4008e9237d8cbd78429446c68bb" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int CNode::ArgCount </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the number of operands for the node. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>number of operands. </dd></dl>

</div>
</div>
<a class="anchor" id="a9141bcdb51320383820d0d268c50eb71"></a><!-- doxytag: member="CNode::Clone" ref="a9141bcdb51320383820d0d268c50eb71" args="(CObstack *heap=stack)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classCNode.html">CNode</a> * CNode::Clone </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classCObstack.html">CObstack</a> *&nbsp;</td>
          <td class="paramname"> <em>heap</em> = <code>stack</code></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Replicate tree. </p>
<p>Leaf nodes are not replicated. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>heap</em>&nbsp;</td><td>heap to use for allocation, defaults to current node heap. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>shallow copy of tree. </dd></dl>

</div>
</div>
<a class="anchor" id="ac6e8859a1a0ff907ce428f1d416a3e50"></a><!-- doxytag: member="CNode::CurrentHeap" ref="ac6e8859a1a0ff907ce428f1d416a3e50" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static <a class="el" href="classCObstack.html">CObstack</a>* CNode::CurrentHeap </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Gets pointer to current heap allocator. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to current heap allocator </dd></dl>

</div>
</div>
<a class="anchor" id="a7821d44f84eb78f006d3019d5e9c6bcd"></a><!-- doxytag: member="CNode::DisableAndClearLabelCache" ref="a7821d44f84eb78f006d3019d5e9c6bcd" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void CNode::DisableAndClearLabelCache </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Disable caching of label info (width and type) and clear all accumulated data. </p>

</div>
</div>
<a class="anchor" id="a0b468e037caf218454a6a210b98697d2"></a><!-- doxytag: member="CNode::Dump" ref="a0b468e037caf218454a6a210b98697d2" args="(FILE *f)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void CNode::Dump </td>
          <td>(</td>
          <td class="paramtype">FILE *&nbsp;</td>
          <td class="paramname"> <em>f</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Print a compact representation of the parse tree. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>f</em>&nbsp;</td><td>file descriptor to print output. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a00647caded505eb712d2087d552e9c95"></a><!-- doxytag: member="CNode::EnableLabelCache" ref="a00647caded505eb712d2087d552e9c95" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void CNode::EnableLabelCache </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Enable cache of labeled nodes to be tracked. </p>
<p>This greatly speeds up operations which utilize expression width and type information. However it should only be enabled when you know you are not changing the tree structures in such a way that the type and width properties change. This cache should always be disable and cleared when your done with it. </p>

</div>
</div>
<a class="anchor" id="a4b83e73f220c7487b38a3fba0a1f12f2"></a><!-- doxytag: member="CNode::EvalINT32" ref="a4b83e73f220c7487b38a3fba0a1f12f2" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="glue_8h.html#a0cb58e7e6f0bad369840a52e54a56ae0">INT32</a> CNode::EvalINT32 </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Evaluates expression tree and returns value as a 32 bit integer. </p>
<p>Expression tree must be evaluateable otherwise results are undefined. * </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>expression value evaluated as an integer. </dd></dl>

</div>
</div>
<a class="anchor" id="a4b059e1817976d9f53bec0898d1d4b3b"></a><!-- doxytag: member="CNode::EvalReal" ref="a4b059e1817976d9f53bec0898d1d4b3b" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">double CNode::EvalReal </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Evaluates expression tree evaluated in a real context. </p>
<p>Expression tree must be evaluateable otherwise results are undefined. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>expression value evaluated as a real. </dd></dl>

</div>
</div>
<a class="anchor" id="a5503573dc2dabfcb88815576831a4a55"></a><!-- doxytag: member="CNode::EvalVector" ref="a5503573dc2dabfcb88815576831a4a55" args="(CVector &amp;v)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void CNode::EvalVector </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classCVector.html">CVector</a> &amp;&nbsp;</td>
          <td class="paramname"> <em>v</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Evaluates expression tree evaluated in unconstrainted context. </p>
<p>Result is returned as a vector. Expression tree must be evaluateable otherwise results are undefined. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>v</em>&nbsp;</td><td>reference to vector to store result </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="aad1dc12e541826b1f2e17f6aef39632e"></a><!-- doxytag: member="CNode::EvalVector" ref="aad1dc12e541826b1f2e17f6aef39632e" args="(CVector &amp;v, INT32 newWidth, NodeType_t newType)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void CNode::EvalVector </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classCVector.html">CVector</a> &amp;&nbsp;</td>
          <td class="paramname"> <em>v</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="glue_8h.html#a0cb58e7e6f0bad369840a52e54a56ae0">INT32</a>&nbsp;</td>
          <td class="paramname"> <em>newWidth</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="cdatatype_8h.html#aff499c00c9873bf3fcf1c46bf2652790">NodeType_t</a>&nbsp;</td>
          <td class="paramname"> <em>newType</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Evaluates expression tree evaluated in the specified context. </p>
<p>Result is returned as a vector. Expression tree must be evaluateable otherwise results are undefined. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>v</em>&nbsp;</td><td>reference to vector to store result </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>newWidth</em>&nbsp;</td><td>width of evaluating context. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>newType</em>&nbsp;</td><td>type of evaluating context. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ab64a772f477c5970a5ad6cc806f87174"></a><!-- doxytag: member="CNode::GetAttribute" ref="ab64a772f477c5970a5ad6cc806f87174" args="(const char *name, CNode *n=NULL, int init=1)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classCAttr.html">CAttr</a> * CNode::GetAttribute </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classCNode.html">CNode</a> *&nbsp;</td>
          <td class="paramname"> <em>n</em> = <code>NULL</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>init</em> = <code>1</code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get attribute attached to node with the given attribute. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>name of attribute to search for. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>n</em>&nbsp;</td><td>don't supply this argument. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>init</em>&nbsp;</td><td>don't supply this argument. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>attribute matching name. NULL if none. </dd></dl>

</div>
</div>
<a class="anchor" id="ad70eb3f37a5aa3c4459765bff21a6c8e"></a><!-- doxytag: member="CNode::GetAttributes" ref="ad70eb3f37a5aa3c4459765bff21a6c8e" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classCNode.html">CNode</a>* CNode::GetAttributes </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get attributes attached to operation. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>attribute parse tree. NULL if no attibutes are attached. </dd></dl>

</div>
</div>
<a class="anchor" id="a4822c9360f069b308f6ed62debb28151"></a><!-- doxytag: member="CNode::GetCoord" ref="a4822c9360f069b308f6ed62debb28151" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structCoord__t.html">Coord_t</a>* CNode::GetCoord </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get node's file coordinates. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to node's file coordinates </dd></dl>

</div>
</div>
<a class="anchor" id="a04082f01000bc79c004e063d77841755"></a><!-- doxytag: member="CNode::GetNodeType" ref="a04082f01000bc79c004e063d77841755" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="cdatatype_8h.html#aff499c00c9873bf3fcf1c46bf2652790">NodeType_t</a> CNode::GetNodeType </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get node expression type. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>expression type. </dd></dl>

</div>
</div>
<a class="anchor" id="aea4bcc23b1bba68d0a243e729b9da0ce"></a><!-- doxytag: member="CNode::GetOp" ref="aea4bcc23b1bba68d0a243e729b9da0ce" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="cnode__def_8h.html#a21e7e2c6d95679cd908f0b20e8408513">NodeOp_t</a> CNode::GetOp </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Return node's operation type. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>node's operation type </dd></dl>

</div>
</div>
<a class="anchor" id="acc0ddc36117388a91352e39e449f6f0e"></a><!-- doxytag: member="CNode::GetWidth" ref="acc0ddc36117388a91352e39e449f6f0e" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="glue_8h.html#a0cb58e7e6f0bad369840a52e54a56ae0">INT32</a> CNode::GetWidth </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Evaluate width of expression. </p>
<p>Width must be evaluateable, otherwise the results are undefined. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>width of expression. </dd></dl>

</div>
</div>
<a class="anchor" id="ac30e190c8020b215eae31d1a1e7353f1"></a><!-- doxytag: member="CNode::GetWidthExp" ref="ac30e190c8020b215eae31d1a1e7353f1" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classCNode.html">CNode</a> * CNode::GetWidthExp </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Create expression representing width of expression. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>expression representing width of expression </dd></dl>

</div>
</div>
<a class="anchor" id="ae60a066d098bcecb904c436aa514f99e"></a><!-- doxytag: member="CNode::HasAttribute" ref="ae60a066d098bcecb904c436aa514f99e" args="(const char *name, CNode *n=NULL, int init=1)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int CNode::HasAttribute </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classCNode.html">CNode</a> *&nbsp;</td>
          <td class="paramname"> <em>n</em> = <code>NULL</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>init</em> = <code>1</code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Determine if node has the given attribute. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>name of attribute to search for. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>n</em>&nbsp;</td><td>don't supply this argument. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>init</em>&nbsp;</td><td>don't supply this argument. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>non-zero if node has attribute </dd></dl>

</div>
</div>
<a class="anchor" id="aa033841783882d505e2be1a38ed1a32c"></a><!-- doxytag: member="CNode::Hash" ref="aa033841783882d505e2be1a38ed1a32c" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">unsigned CNode::Hash </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Calculate hash of tree. </p>
<p>Equivilent(n1,n2) =&gt; Hash(n1)==Hash(n2) </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>tree hash code. </dd></dl>

</div>
</div>
<a class="anchor" id="a502e4db2e95f5a117c38f87bb5215de5"></a><!-- doxytag: member="CNode::IsConstant" ref="a502e4db2e95f5a117c38f87bb5215de5" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int CNode::IsConstant </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Checks expression tree to see if it is constant. </p>
<p>i.e. Dependent on constants and parameters only. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>non-zero indicates expression is constant. </dd></dl>

</div>
</div>
<a class="anchor" id="ad279202102b4f81c9d25ad8727ecc7d9"></a><!-- doxytag: member="CNode::IsEvaluateable" ref="ad279202102b4f81c9d25ad8727ecc7d9" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int CNode::IsEvaluateable </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Checks to see if expression tree can be evaluated. </p>
<p>Expressions may not be able to be evaluated for a variety of reasons:</p>
<ul>
<li>Contains a construct the expression evaluator doesn't support.</li>
<li>Contains a reference to a variable.</li>
<li>Constains an external reference. <dl class="return"><dt><b>Returns:</b></dt><dd>non-zero if expression can be evaluated. </dd></dl>
</li>
</ul>

</div>
</div>
<a class="anchor" id="a3f3afd2955807122314575a0e4e150ca"></a><!-- doxytag: member="CNode::IsNonX" ref="a3f3afd2955807122314575a0e4e150ca" args="(int integerIsNonX=0, char *exclude=NULL)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int CNode::IsNonX </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>integerIsNonX</em> = <code>0</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&nbsp;</td>
          <td class="paramname"> <em>exclude</em> = <code>NULL</code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Checks expression tree to see if expression can result in an X or Z. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>integerIsNonX</em>&nbsp;</td><td>non-zero specifies that integers should considered to never take on X or Z values. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>exclude</em>&nbsp;</td><td>specifies an attribute name that indicates the declaration will never be X or Z. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>non-zero indicates the expression will never be X or Z. </dd></dl>

</div>
</div>
<a class="anchor" id="a24ad7d7060bfa89e16c1b5ea751dcc2a"></a><!-- doxytag: member="CNode::IsReal" ref="a24ad7d7060bfa89e16c1b5ea751dcc2a" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int CNode::IsReal </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Determine if expression is real. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>non-zero if expression is a real. </dd></dl>

</div>
</div>
<a class="anchor" id="abc3c773a01f308a86a2e3b6134c31c61"></a><!-- doxytag: member="CNode::IsScalar" ref="abc3c773a01f308a86a2e3b6134c31c61" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int CNode::IsScalar </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Determine if expression is a 1 bit signed or unsigned value. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>non-zero if expression is scalar. </dd></dl>

</div>
</div>
<a class="anchor" id="a11d5eea07e5095ff6bf5b4f3fee2aea0"></a><!-- doxytag: member="CNode::IsVector" ref="a11d5eea07e5095ff6bf5b4f3fee2aea0" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int CNode::IsVector </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Determine if expression is a multi-bit signed or unsigned value. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>non-zero if expression is a vector. </dd></dl>

</div>
</div>
<a class="anchor" id="a7ca286cfec44b3a6d9f38bfc1cb780a6"></a><!-- doxytag: member="CNode::IsVolatile" ref="a7ca286cfec44b3a6d9f38bfc1cb780a6" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int CNode::IsVolatile </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Checks to see if expression tree is volatile. </p>
<p>i.e. Dependent upon parameters and variables. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>non-zero if expression is volatile. </dd></dl>

</div>
</div>
<a class="anchor" id="acc4d0c6b5cea6949754e4ebfcfd14bca"></a><!-- doxytag: member="CNode::IsWidthConstant" ref="acc4d0c6b5cea6949754e4ebfcfd14bca" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int CNode::IsWidthConstant </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Evaluates if expression width is constant. </p>
<p>i.e. Depends upon parameters and constants only. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>non-zero if expression width is constant. </dd></dl>

</div>
</div>
<a class="anchor" id="ab7a798650fb20d393f357b300b60737e"></a><!-- doxytag: member="CNode::IsWidthEvaluateable" ref="ab7a798650fb20d393f357b300b60737e" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int CNode::IsWidthEvaluateable </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Evaluates if expression width can be evaluated. </p>
<p>Widths may not be able to be evaluated for a variety of reasons:</p>
<ul>
<li>Contains a construct the expression evaluator doesn't support.</li>
<li>Contains a reference to a variable.</li>
<li>Constains an external reference. <dl class="return"><dt><b>Returns:</b></dt><dd>non-zero if expression width is volatile. </dd></dl>
</li>
</ul>

</div>
</div>
<a class="anchor" id="a4c58242c86884ca9ba9a7244a9a0970c"></a><!-- doxytag: member="CNode::IsWidthVolatile" ref="a4c58242c86884ca9ba9a7244a9a0970c" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int CNode::IsWidthVolatile </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Evaluates if expression width is volatile. </p>
<p>i.e. Depends upon parameters and variables. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>non-zero if expression width is volatile. </dd></dl>

</div>
</div>
<a class="anchor" id="a4302c1d26a33a5a4169b79d30daccd8a"></a><!-- doxytag: member="CNode::PostSubVisit1" ref="a4302c1d26a33a5a4169b79d30daccd8a" args="(CNode *(*callback)(CNode *, void *), void *data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classCNode.html">CNode</a> * CNode::PostSubVisit1 </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classCNode.html">CNode</a> *(*)(<a class="el" href="classCNode.html">CNode</a> *, void *)&nbsp;</td>
          <td class="paramname"> <em>callback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>data</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Walk tree invoking callback on each node after children have been visited. </p>
<p>callback may modify tree and return a modified subtree. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>callback</em>&nbsp;</td><td>function to be called for each node </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>opaque argument passed to callback function </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>modified child subtree. </dd></dl>

</div>
</div>
<a class="anchor" id="a474cb6a7eeff6e6182359381c1f5753a"></a><!-- doxytag: member="CNode::PostVisit1" ref="a474cb6a7eeff6e6182359381c1f5753a" args="(void(*callback)(CNode *, void *), void *data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void CNode::PostVisit1 </td>
          <td>(</td>
          <td class="paramtype">void(*)(<a class="el" href="classCNode.html">CNode</a> *, void *)&nbsp;</td>
          <td class="paramname"> <em>callback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>data</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Walk tree invoking callback on each node after children have been visited. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>callback</em>&nbsp;</td><td>function to be called for each node </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>opaque argument passed to callback function </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a9de9394f1024fcdd68f7ed82609c347e"></a><!-- doxytag: member="CNode::Precedence" ref="a9de9394f1024fcdd68f7ed82609c347e" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int CNode::Precedence </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the precedence of the operator represented by the node. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>precedence of the operator </dd></dl>

</div>
</div>
<a class="anchor" id="a99e57d389a0c4042f2b38eb8d2b7f164"></a><!-- doxytag: member="CNode::PreVisit1" ref="a99e57d389a0c4042f2b38eb8d2b7f164" args="(int(*callback)(CNode *, void *), void *data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void CNode::PreVisit1 </td>
          <td>(</td>
          <td class="paramtype">int(*)(<a class="el" href="classCNode.html">CNode</a> *, void *)&nbsp;</td>
          <td class="paramname"> <em>callback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>data</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Walk tree invoking callback on each node before children have been visited. </p>
<p>callback can terminate transversal early. callback returns 0 to terminate transversal early. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>callback</em>&nbsp;</td><td>function to be called for each node </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>opaque argument passed to callback function </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a8e136fbeb5667916489f13eb25857150"></a><!-- doxytag: member="CNode::ResetBuildStack" ref="a8e136fbeb5667916489f13eb25857150" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void CNode::ResetBuildStack </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Restore previous heap. </p>

</div>
</div>
<a class="anchor" id="a913e3feeeb243fc89f7fe30ba9ef1bad"></a><!-- doxytag: member="CNode::SetAttributes" ref="a913e3feeeb243fc89f7fe30ba9ef1bad" args="(CNode *attr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void CNode::SetAttributes </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classCNode.html">CNode</a> *&nbsp;</td>
          <td class="paramname"> <em>attr</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Attach attributes to operation. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>attr</em>&nbsp;</td><td>attributes to attach to operation. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a3cc9d5a6aa558b8329cb74aaca59ee16"></a><!-- doxytag: member="CNode::SetBuildStack" ref="a3cc9d5a6aa558b8329cb74aaca59ee16" args="(CObstack *aStack)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void CNode::SetBuildStack </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classCObstack.html">CObstack</a> *&nbsp;</td>
          <td class="paramname"> <em>aStack</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Set heap to a specific heap. </p>
<p>Save previous heap in stack so it can be restored </p>

</div>
</div>
<a class="anchor" id="a16b5c099d1ac314ca36121a760f81c88"></a><!-- doxytag: member="CNode::SetOp" ref="a16b5c099d1ac314ca36121a760f81c88" args="(NodeOp_t aOp)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void CNode::SetOp </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="cnode__def_8h.html#a21e7e2c6d95679cd908f0b20e8408513">NodeOp_t</a>&nbsp;</td>
          <td class="paramname"> <em>aOp</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Set node's operation type. </p>
<p>Asserts if number arguments in new type are different than old. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>aOp</em>&nbsp;</td><td>is the new operation type. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a8589a7f9323bb6374cb43219ecfbbd84"></a><!-- doxytag: member="CNode::Simplify" ref="a8589a7f9323bb6374cb43219ecfbbd84" args="(INT32 newWidth, NodeType_t newType)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classCNode.html">CNode</a> * CNode::Simplify </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="glue_8h.html#a0cb58e7e6f0bad369840a52e54a56ae0">INT32</a>&nbsp;</td>
          <td class="paramname"> <em>newWidth</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="cdatatype_8h.html#aff499c00c9873bf3fcf1c46bf2652790">NodeType_t</a>&nbsp;</td>
          <td class="paramname"> <em>newType</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Create simplified expression tree with given width and type. </p>
<p>Evaluates non-volatile constant expressions. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>newWidth</em>&nbsp;</td><td>width of resulting expression. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>newType</em>&nbsp;</td><td>type of resulting expression. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>simplified expression if expression can be simplified, otherwise original expression is returned. </dd></dl>

</div>
</div>
<a class="anchor" id="aceb010903a1eed3faf9b624efe39b59f"></a><!-- doxytag: member="CNode::UseEvalStack" ref="aceb010903a1eed3faf9b624efe39b59f" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void CNode::UseEvalStack </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Use evaluation stack. </p>
<p>Track recursive call so that eval heap is only freed when all uses are complete. Note that nodes on the eval stack should *NEVER* point to nodes that are not. If you do the labelCache will cause stale information to be used with bizare results. Usually this means that subtrees attached to evalStack allocated node should be cloned on to the evalStack. </p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>/net/fileserver/nas/home/mdh/vrq/src/<a class="el" href="cnode_8h_source.html">cnode.h</a></li>
<li>/net/fileserver/nas/home/mdh/vrq/src/<a class="el" href="main_8cc.html">main.cc</a></li>
<li>/net/fileserver/nas/home/mdh/vrq/src/<a class="el" href="cnode__def_8h_source.html">cnode_def.h</a></li>
<li>/net/fileserver/nas/home/mdh/vrq/src/<a class="el" href="cnode_8cc.html">cnode.cc</a></li>
</ul>
</div>
<hr class="footer"/><address class="footer"><small>Generated by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>