⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compiler_8h-source.html

📁 最新版本!fastdb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>compiler.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.18 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </center>
<hr><h1>compiler.h</h1><div class="fragment"><pre>00001 <span class="comment">//-&lt; COMPILE.H &gt;-----------------------------------------------------*--------*</span>
00002 <span class="comment">// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *</span>
00003 <span class="comment">// (Main Memory Database Management System)                          *   /\|  *</span>
00004 <span class="comment">//                                                                   *  /  \  *</span>
00005 <span class="comment">//                          Created:     20-Nov-98    K.A. Knizhnik  * / [] \ *</span>
00006 <span class="comment">//                          Last update: 17-Jan-99    K.A. Knizhnik  * GARRET *</span>
00007 <span class="comment">//-------------------------------------------------------------------*--------*</span>
00008 <span class="comment">// Conditional expresion compiler</span>
00009 <span class="comment">//-------------------------------------------------------------------*--------*</span>
00010 
00011 <span class="preprocessor">#ifndef __COMPILER_H__</span>
00012 <span class="preprocessor"></span><span class="preprocessor">#define __COMPILER_H__</span>
00013 <span class="preprocessor"></span>
00014 <span class="preprocessor">#include &lt;setjmp.h&gt;</span>
00015 <span class="preprocessor">#ifdef USE_REGEX</span>
00016 <span class="preprocessor"></span><span class="preprocessor">#include &lt;regex.h&gt;</span>
00017 <span class="preprocessor">#endif</span>
00018 <span class="preprocessor"></span>
00019 BEGIN_FASTDB_NAMESPACE
00020 
00021 <span class="preprocessor">#if defined(__osf__) || defined(__FreeBSD__)</span>
00022 <span class="preprocessor"></span><span class="preprocessor">#define longjmp(b,s) _longjmp(b,s) // do not restore signal context</span>
00023 <span class="preprocessor"></span><span class="preprocessor">#define setjmp(b)  _setjmp(b)</span>
00024 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
00025 <span class="preprocessor"></span>
00026 <span class="keyword">enum</span> dbvmCodes { 
00027 <span class="preprocessor">#define DBVM(cop, type, n_operands, commutative) cop,</span>
00028 <span class="preprocessor"></span><span class="preprocessor">#include "compiler.d"</span>
00029 dbvmLastCode
00030 };
00031 
00032 <span class="preprocessor">#define IS_CONSTANT(c) \</span>
00033 <span class="preprocessor">    (unsigned(c) - dbvmLoadVarBool &lt;= (unsigned)dbvmLoadRectangleConstant - dbvmLoadVarBool)</span>
00034 <span class="preprocessor"></span>
00035 <span class="keyword">enum</span> nodeType { 
00036     tpInteger,
00037     tpBoolean,
00038     tpReal,
00039     tpString,
00040     tpReference,
00041     tpRectangle,
00042     tpArray,
00043     tpRawBinary, 
00044     tpFreeVar,  <span class="comment">// index of EXISTS clause </span>
00045     tpList,     <span class="comment">// list of expressions</span>
00046     tpVoid
00047 };
00048 
00049 <span class="keyword">enum</span> tokens { 
00050     tkn_ident,
00051     tkn_lpar,
00052     tkn_rpar,
00053     tkn_lbr,
00054     tkn_rbr,
00055     tkn_dot,
00056     tkn_comma,
00057     tkn_power,
00058     tkn_iconst,
00059     tkn_sconst,
00060     tkn_fconst,
00061     tkn_add,
00062     tkn_sub,
00063     tkn_mul,
00064     tkn_div,
00065     tkn_and,
00066     tkn_or,
00067     tkn_not,
00068     tkn_null,
00069     tkn_neg,
00070     tkn_eq,
00071     tkn_ne,
00072     tkn_gt,
00073     tkn_ge,
00074     tkn_lt,
00075     tkn_le,
00076     tkn_between,
00077     tkn_escape,
00078     tkn_exists,
00079     tkn_like,
00080     tkn_limit,
00081     tkn_in,
00082     tkn_length,
00083     tkn_lower,
00084     tkn_upper,
00085     tkn_abs,
00086     tkn_area,
00087     tkn_is,
00088     tkn_integer,
00089     tkn_real,
00090     tkn_string,
00091     tkn_first,
00092     tkn_last,
00093     tkn_current,
00094     tkn_var,
00095     tkn_col,
00096     tkn_true,
00097     tkn_false,
00098     tkn_where, 
00099     tkn_follow,
00100     tkn_start,
00101     tkn_from,
00102     tkn_order,
00103     tkn_overlaps,
00104     tkn_by,
00105     tkn_asc,
00106     tkn_desc, 
00107     tkn_eof,
00108     tkn_insert, 
00109     tkn_into, 
00110     tkn_select, 
00111     tkn_table,
00112     tkn_error,
00113     tkn_all, 
00114     tkn_match,
00115     tkn_last_token
00116 };    
00117 
00118 <span class="keyword">struct </span>dbStrLiteral { 
00119     <span class="keywordtype">char</span>* str;
00120     <span class="keywordtype">int</span>   len;
00121 };
00122 
00123 
00124 <span class="keyword">class </span><a class="code" href="classdbUserFunction.html">dbUserFunction</a>;
00125 <span class="keyword">class </span>dbExprNodeSegment;
00126 
00127 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbExprNodeAllocator { 
00128   <span class="keyword">private</span>:
00129     <span class="keyword">friend</span> <span class="keyword">class </span>dbExprNodeSegment;
00130     dbExprNode*        freeNodeList;
00131     dbExprNodeSegment* segmentList;
00132     dbMutex            mutex;
00133     
00134   <span class="keyword">public</span>:  
00135     dbMutex&amp;    getMutex() {
00136         <span class="keywordflow">return</span> mutex;
00137     }
00138     dbExprNode* allocate();
00139     <span class="keywordtype">void</span>        deallocate(dbExprNode* node);
00140     <span class="keywordtype">void</span>        reset();
00141 
00142     ~dbExprNodeAllocator();
00143     <span class="keyword">static</span> dbExprNodeAllocator instance;
00144 };
00145 
00146 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbExprNode { 
00147     <span class="keyword">friend</span> <span class="keyword">class </span>dbExprNodeSegment;
00148   <span class="keyword">public</span>:
00149     nat1 cop;
00150     nat1 type;
00151     nat2 offs;
00152 
00153     <span class="keyword">static</span> <span class="keyword">const</span> nat1  nodeTypes[];
00154     <span class="keyword">static</span> <span class="keyword">const</span> nat1  nodeOperands[];
00155     <span class="keyword">static</span> <span class="keyword">const</span> nat1  commutativeOperator[];
00156 
00157     <span class="keyword">struct </span>ref_operands { 
00158         dbExprNode*         base;  <span class="comment">// the same as operand[0]</span>
00159         <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>*  field;
00160     };
00161 
00162     <span class="keyword">struct </span>func_operands { 
00163         dbExprNode*         arg[3]; 
00164         <span class="keywordtype">void</span>*               fptr;
00165     };
00166 
00167 <span class="preprocessor">#ifdef USE_REGEX</span>
00168 <span class="preprocessor"></span>    <span class="keyword">struct </span>regex_operands { 
00169         dbExprNode*         opd;  
00170         regex_t             re;
00171     };
00172 <span class="preprocessor">#endif</span>
00173 <span class="preprocessor"></span>
00174     <span class="keyword">union </span>{ 
00175         dbExprNode*    operand[3];
00176         dbExprNode*    next;
00177         oid_t          oid;
00178         db_int8        ivalue;
00179         real8          fvalue;
00180         <a class="code" href="classrectangle.html">rectangle</a>      rvalue;
00181         dbStrLiteral   svalue;
00182         <span class="keywordtype">void</span> <span class="keyword">const</span>*    var;
00183         ref_operands   ref;
00184         func_operands  func;
00185 <span class="preprocessor">#ifdef USE_REGEX</span>
00186 <span class="preprocessor"></span>        regex_operands regex;
00187 <span class="preprocessor">#endif</span>
00188 <span class="preprocessor"></span>    };
00189 
00190     dbExprNode(dbExprNode* node);
00191 
00192     dbExprNode(<span class="keywordtype">int</span> cop, dbExprNode* left = NULL, dbExprNode* right = NULL, 
00193                dbExprNode* right2 = NULL)
00194     {
00195         this-&gt;cop = cop;
00196         type = nodeTypes[cop];
00197         operand[0] = left;
00198         operand[1] = right;
00199         operand[2] = right2;
00200     }
00201     dbExprNode(<span class="keywordtype">int</span> cop, dbExprNode* expr1, dbExprNode* expr2, <span class="keywordtype">int</span> offs) { 
00202         this-&gt;cop = cop;
00203         this-&gt;offs = (nat2)offs;
00204         type = nodeTypes[cop];
00205         operand[0] = expr1;
00206         operand[1] = expr2;
00207     }
00208     dbExprNode(<span class="keywordtype">int</span> cop, dbExprNode* expr, <span class="keywordtype">int</span> offs) { 
00209         this-&gt;cop = cop;
00210         this-&gt;offs = (nat2)offs;
00211         type = nodeTypes[cop];
00212         operand[0] = expr;
00213     }
00214     dbExprNode(<span class="keywordtype">int</span> cop, <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* field, dbExprNode* base = NULL) 
00215     {
00216         this-&gt;cop = cop;
00217         this-&gt;offs = (nat2)field-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm17">dbsOffs</a>;
00218         type = nodeTypes[cop];
00219         ref.field = field;
00220         ref.base = base;
00221     }
00222     dbExprNode(<span class="keywordtype">int</span> cop, db_int8 ivalue) { 
00223         this-&gt;cop = cop;
00224         this-&gt;ivalue = ivalue;
00225         type = tpInteger;
00226     }
00227     dbExprNode(<span class="keywordtype">int</span> cop, real8 fvalue) { 
00228         this-&gt;cop = cop;
00229         this-&gt;fvalue = fvalue;
00230         type = tpReal;
00231     }
00232     dbExprNode(<span class="keywordtype">int</span> cop, <a class="code" href="classrectangle.html">rectangle</a> rvalue) {
00233         this-&gt;cop = cop;
00234         this-&gt;rvalue = rvalue;
00235         type = tpRectangle;
00236     }
00237     dbExprNode(<span class="keywordtype">int</span> cop, dbStrLiteral&amp; svalue) { 
00238         this-&gt;cop = cop;
00239         this-&gt;svalue = svalue;
00240         type = tpString;
00241     }
00242     dbExprNode(<span class="keywordtype">int</span> cop, <span class="keywordtype">void</span> <span class="keyword">const</span>* var) { 
00243         this-&gt;cop = cop;
00244         this-&gt;var = var;
00245         type = nodeTypes[cop];
00246     }
00247     dbExprNode(<span class="keywordtype">int</span> cop, <span class="keywordtype">void</span>* fptr, dbExprNode* expr1, dbExprNode* expr2 = NULL, dbExprNode* expr3 = NULL) { 
00248         this-&gt;cop = cop;
00249         func.arg[0] = expr1;
00250         func.arg[1] = expr2;
00251         func.arg[2] = expr3;
00252         func.fptr = fptr;
00253         type = nodeTypes[cop];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -