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

📄 compiler_8h-source.html

📁 俄罗斯牛人KK的作品,著名的ORDBMS,这里上传最新的3.39版本源代码.希望了解对象关系数据库的同好,请不要错过.
💻 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_NAMESPACE00020 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 dbvmLastCode00030 };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     tpVoid00047 };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_token00116 };    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 + -