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> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </center><hr><h1>cliproto.h</h1><div class="fragment"><pre>00001 <font class="comment">//-< CLIPROTO.H >----------------------------------------------------*--------*</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 <sys/param.h></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 <netinet/in.h></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) && _M_IX86 >= 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 >> 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& 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>*)&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 >> 24);00128 *dst++ = char(val >> 16); 00129 *dst++ = char(val >> 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& 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>*)&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>*)&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*)&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] << 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& 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>*)&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] << 8) + s[1]) << 8) + s[2]) << 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& 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>*)&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>*)&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>*)&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 + -
显示快捷键?