cliproto_8h-source.html

来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· HTML 代码 · 共 268 行

HTML
268
字号
<!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>cliproto.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.15 --><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>cliproto.h</h1><div class="fragment"><pre>00001 <font class="comment">//-&lt; CLIPROTO.H &gt;----------------------------------------------------*--------*</font>00002 <font class="comment">// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *</font>00003 <font class="comment">// (Main Memory Database Management System)                          *   /\|  *</font>00004 <font class="comment">//                                                                   *  /  \  *</font>00005 <font class="comment">//                          Created:     13-Jan-2000  K.A. Knizhnik  * / [] \ *</font>00006 <font class="comment">//                          Last update: 13-Jan-2000  K.A. Knizhnik  * GARRET *</font>00007 <font class="comment">//-------------------------------------------------------------------*--------*</font>00008 <font class="comment">// Client-server communication protocol</font>00009 <font class="comment">//-------------------------------------------------------------------*--------*</font>00010 00011 <font class="preprocessor">#ifndef __CLIPROTO_H__</font>00012 <font class="preprocessor"></font><font class="preprocessor">#define __CLIPROTO_H__</font>00013 <font class="preprocessor"></font>00014 <font class="keyword">enum</font> cli_commands { 00015     cli_cmd_close_session, 00016     cli_cmd_prepare_and_execute,00017     cli_cmd_execute,00018     cli_cmd_get_first, 00019     cli_cmd_get_last, 00020     cli_cmd_get_next,00021     cli_cmd_get_prev,00022     cli_cmd_free_statement,00023     cli_cmd_abort,00024     cli_cmd_commit,00025     cli_cmd_update,00026     cli_cmd_remove,00027     cli_cmd_insert,00028     cli_cmd_prepare_and_insert,00029     cli_cmd_describe_table,00030     cli_cmd_show_tables,00031     cli_cmd_precommit00032 };00033 00034 <font class="keyword">static</font> <font class="keyword">const</font> <font class="keywordtype">int</font> sizeof_type[] = { 00035     <font class="keyword">sizeof</font>(cli_oid_t), 00036     <font class="keyword">sizeof</font>(cli_bool_t), 00037     <font class="keyword">sizeof</font>(cli_int1_t), 00038     <font class="keyword">sizeof</font>(cli_int2_t), 00039     <font class="keyword">sizeof</font>(cli_int4_t), 00040     <font class="keyword">sizeof</font>(cli_int8_t), 00041     <font class="keyword">sizeof</font>(cli_real4_t), 00042     <font class="keyword">sizeof</font>(cli_real8_t),00043     0, <font class="comment">// cli_asciiz, </font>00044     0, <font class="comment">// cli_pasciiz,</font>00045     0, <font class="comment">// cli_array_of_oid,</font>00046     0, <font class="comment">// cli_array_of_bool,</font>00047     0, <font class="comment">// cli_array_of_int1,</font>00048     0, <font class="comment">// cli_array_of_int2,</font>00049     0, <font class="comment">// cli_array_of_int4,</font>00050     0, <font class="comment">// cli_array_of_int8,</font>00051     0, <font class="comment">// cli_array_of_real4,</font>00052     0, <font class="comment">// cli_array_of_real8, </font>00053     4  <font class="comment">// cli_autoincrement</font>00054 };00055 00056 <font class="keyword">static</font> <font class="keyword">const</font> <font class="keywordtype">int</font> fd2cli_type_mapping[] = {00057     cli_bool,00058     cli_int1,00059     cli_int2,00060     cli_int4,00061     cli_int8,00062     cli_real4,00063     cli_real8,00064     cli_asciiz,00065     cli_oid00066 };00067 00068 <font class="preprocessor">#if defined(__FreeBSD__)</font>00069 <font class="preprocessor"></font><font class="preprocessor">#include &lt;sys/param.h&gt;</font>00070 <font class="preprocessor">#define USE_HTON_NTOH</font>00071 <font class="preprocessor"></font><font class="preprocessor">#elif defined(__linux__)</font>00072 <font class="preprocessor"></font><font class="comment">//</font>00073 <font class="comment">// At Linux inline assembly declarations of ntohl, htonl... are available</font>00074 <font class="comment">//</font>00075 <font class="preprocessor">#include &lt;netinet/in.h&gt;</font>00076 <font class="preprocessor">#define USE_HTON_NTOH</font>00077 <font class="preprocessor"></font><font class="preprocessor">#else</font>00078 <font class="preprocessor"></font><font class="preprocessor">#if defined(_WIN32) &amp;&amp; _M_IX86 &gt;= 400</font>00079 <font class="preprocessor"></font><font class="preprocessor">#pragma warning(disable:4035) // disable "no return" warning</font>00080 <font class="preprocessor"></font><font class="keyword">inline</font> <font class="keywordtype">int</font> swap_bytes_in_dword(<font class="keywordtype">int</font> val) {00081     __asm {00082           mov eax, val00083           bswap eax00084     }00085 }00086 <font class="keyword">inline</font> <font class="keywordtype">short</font> swap_bytes_in_word(<font class="keywordtype">short</font> val) {00087     __asm {00088           mov ax, val00089           xchg al,ah00090     }00091 }00092 <font class="preprocessor">#pragma warning(default:4035)</font>00093 <font class="preprocessor"></font><font class="preprocessor">#define ntohl(w) swap_bytes_in_dword(w)</font>00094 <font class="preprocessor"></font><font class="preprocessor">#define htonl(w) swap_bytes_in_dword(w)</font>00095 <font class="preprocessor"></font><font class="preprocessor">#define ntohs(w) swap_bytes_in_word(w)</font>00096 <font class="preprocessor"></font><font class="preprocessor">#define htons(w) swap_bytes_in_word(w)</font>00097 <font class="preprocessor"></font>00098 <font class="preprocessor">#define USE_HTON_NTOH</font>00099 <font class="preprocessor"></font><font class="preprocessor">#endif</font>00100 <font class="preprocessor"></font><font class="preprocessor">#endif</font>00101 <font class="preprocessor"></font>00102 00103 00104 00105 <font class="keyword">inline</font> <font class="keywordtype">char</font>* pack2(<font class="keywordtype">char</font>* dst, int2 val) { 00106     *dst++ = char(val &gt;&gt; 8);00107     *dst++ = char(val);     00108     <font class="keywordflow">return</font> dst;00109 }00110 00111 <font class="keyword">inline</font> <font class="keywordtype">char</font>* pack2(<font class="keywordtype">char</font>* dst, <font class="keywordtype">char</font>* src) { 00112     <font class="keywordflow">return</font> pack2(dst, *(int2*)src); 00113 }00114 00115 <font class="keyword">inline</font> <font class="keywordtype">void</font> pack2(int2&amp; val) { 00116 <font class="preprocessor">#if BYTE_ORDER != BIG_ENDIAN</font>00117 <font class="preprocessor"></font><font class="preprocessor">#ifdef USE_HTON_NTOH</font>00118 <font class="preprocessor"></font>    val = htons(val);00119 <font class="preprocessor">#else</font>00120 <font class="preprocessor"></font>    pack2((<font class="keywordtype">char</font>*)&amp;val, val); 00121 <font class="preprocessor">#endif</font>00122 <font class="preprocessor"></font><font class="preprocessor">#endif</font>00123 <font class="preprocessor"></font>}00124 00125 00126 <font class="keyword">inline</font> <font class="keywordtype">char</font>* pack4(<font class="keywordtype">char</font>* dst, int4 val) { 00127     *dst++ = char(val &gt;&gt; 24);00128     *dst++ = char(val &gt;&gt; 16);     00129     *dst++ = char(val &gt;&gt; 8); 00130     *dst++ = char(val);00131     <font class="keywordflow">return</font> dst;00132 }00133 00134 <font class="keyword">inline</font> <font class="keywordtype">char</font>* pack4(<font class="keywordtype">char</font>* dst, <font class="keywordtype">char</font>* src) { 00135     <font class="keywordflow">return</font> pack4(dst, *(int4*)src); 00136 }00137 00138 <font class="keyword">inline</font> <font class="keywordtype">void</font> pack4(int4&amp; val) { 00139 <font class="preprocessor">#if BYTE_ORDER != BIG_ENDIAN</font>00140 <font class="preprocessor"></font><font class="preprocessor">#ifdef USE_HTON_NTOH</font>00141 <font class="preprocessor"></font>    val = htonl(val);00142 <font class="preprocessor">#else</font>00143 <font class="preprocessor"></font>    pack4((<font class="keywordtype">char</font>*)&amp;val, val); 00144 <font class="preprocessor">#endif</font>00145 <font class="preprocessor"></font><font class="preprocessor">#endif</font>00146 <font class="preprocessor"></font>}00147 00148 00149 <font class="keyword">inline</font> <font class="keywordtype">char</font>* pack8(<font class="keywordtype">char</font>* dst, <font class="keywordtype">char</font>* src) { 00150 <font class="preprocessor">#if BYTE_ORDER == BIG_ENDIAN</font>00151 <font class="preprocessor"></font>    <font class="keywordflow">return</font> pack4( pack4(dst, src), src + 4);00152 <font class="preprocessor">#else</font>00153 <font class="preprocessor"></font>    <font class="keywordflow">return</font> pack4( pack4(dst, src + 4), src);00154 <font class="preprocessor">#endif</font>00155 <font class="preprocessor"></font>}00156 00157 <font class="keyword">inline</font> <font class="keywordtype">char</font>* pack8(<font class="keywordtype">char</font>* dst, db_int8 val) { 00158     <font class="keywordflow">return</font> pack8(dst, (<font class="keywordtype">char</font>*)&amp;val);00159 }00160 00161 <font class="keyword">inline</font> <font class="keywordtype">char</font>* pack_oid(<font class="keywordtype">char</font>* dst, cli_oid_t oid)00162 {00163     <font class="keywordflow">return</font> (<font class="keyword">sizeof</font>(oid) == 4) ? pack4(dst, oid) : pack8(dst, (char*)&amp;oid);00164 }00165 00166 <font class="keyword">inline</font> int2 unpack2(<font class="keywordtype">char</font>* src) { 00167     nat1* s = (nat1*)src;00168     <font class="keywordflow">return</font> (s[0] &lt;&lt; 8) + s[1]; 00169 }00170 00171 <font class="keyword">inline</font> <font class="keywordtype">char</font>* unpack2(<font class="keywordtype">char</font>* dst, <font class="keywordtype">char</font>* src) { 00172     *(int2*)dst = unpack2(src);00173     <font class="keywordflow">return</font> src + 2;00174 }00175 00176 <font class="keyword">inline</font> <font class="keywordtype">void</font>  unpack2(int2&amp; val) { 00177 <font class="preprocessor">#if BYTE_ORDER != BIG_ENDIAN</font>00178 <font class="preprocessor"></font><font class="preprocessor">#ifdef USE_HTON_NTOH</font>00179 <font class="preprocessor"></font>    val = ntohs(val);00180 <font class="preprocessor">#else</font>00181 <font class="preprocessor"></font>    val = unpack2((<font class="keywordtype">char</font>*)&amp;val); 00182 <font class="preprocessor">#endif</font>00183 <font class="preprocessor"></font><font class="preprocessor">#endif</font>00184 <font class="preprocessor"></font>}00185 00186 00187 <font class="keyword">inline</font> int4  unpack4(<font class="keywordtype">char</font>* src) { 00188     nat1* s = (nat1*)src;00189     <font class="keywordflow">return</font> (((((s[0] &lt;&lt; 8) + s[1]) &lt;&lt; 8) + s[2]) &lt;&lt; 8) + s[3];00190 } 00191 00192 <font class="keyword">inline</font> <font class="keywordtype">char</font>* unpack4(<font class="keywordtype">char</font>* dst, <font class="keywordtype">char</font>* src) { 00193     *(int4*)dst = unpack4(src);00194     <font class="keywordflow">return</font> src + 4;00195 }00196 00197 <font class="keyword">inline</font> <font class="keywordtype">void</font> unpack4(int4&amp; val) { 00198 <font class="preprocessor">#if BYTE_ORDER != BIG_ENDIAN</font>00199 <font class="preprocessor"></font><font class="preprocessor">#ifdef USE_HTON_NTOH</font>00200 <font class="preprocessor"></font>    val = ntohl(val);00201 <font class="preprocessor">#else</font>00202 <font class="preprocessor"></font>    val = unpack4((<font class="keywordtype">char</font>*)&amp;val); 00203 <font class="preprocessor">#endif</font>00204 <font class="preprocessor"></font><font class="preprocessor">#endif</font>00205 <font class="preprocessor"></font>}00206 00207 <font class="keyword">inline</font> <font class="keywordtype">char</font>* unpack8(<font class="keywordtype">char</font>* dst, <font class="keywordtype">char</font>* src) { 00208 <font class="preprocessor">#if BYTE_ORDER == BIG_ENDIAN</font>00209 <font class="preprocessor"></font>    *(int4*)dst = unpack4(src);00210     *((int4*)dst+1) = unpack4(src+4);00211 <font class="preprocessor">#else</font>00212 <font class="preprocessor"></font>    *(int4*)dst = unpack4(src+4);00213     *((int4*)dst+1) = unpack4(src);00214 <font class="preprocessor">#endif</font>00215 <font class="preprocessor"></font>    <font class="keywordflow">return</font> src + 8;00216 }00217 00218 <font class="keyword">inline</font> db_int8 unpack8(<font class="keywordtype">char</font>* src) { 00219     db_int8 val;00220     unpack8((<font class="keywordtype">char</font>*)&amp;val, src);00221     <font class="keywordflow">return</font> val;00222 }00223 00224 <font class="keyword">inline</font> cli_oid_t unpack_oid(<font class="keywordtype">char</font>* src)00225 {00226     cli_oid_t oid;00227     <font class="keywordflow">if</font> (<font class="keyword">sizeof</font>(oid) == 4) {00228         oid = unpack4(src);00229     } <font class="keywordflow">else</font> { 00230         unpack8((<font class="keywordtype">char</font>*)&amp;oid, src);00231     }00232     <font class="keywordflow">return</font> oid;00233 }00234 00235 <font class="keyword">struct </font>cli_request { 00236     int4 length;00237     int4 cmd;00238     int4 stmt_id;00239     00240     <font class="keywordtype">void</font> pack() { 00241         pack4(length);00242         pack4(cmd);00243         pack4(stmt_id);00244     }00245 00246     <font class="keywordtype">void</font> unpack() { 00247         unpack4(length);00248         unpack4(cmd);00249         unpack4(stmt_id);00250     }00251 };00252 00253 <font class="preprocessor">#endif</font></pre></div><hr><address align="right"><small>Generated on Fri Nov 15 21:06:28 2002 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.15 </small></address></body></html>

⌨️ 快捷键说明

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