📄 cliproto_8h-source.html
字号:
00183 <span class="preprocessor"></span>
00184
00185
00186
00187 <span class="keyword">inline</span> <span class="keywordtype">char</span>* pack2(<span class="keywordtype">char</span>* dst, int2 val) {
00188 *dst++ = char(val >> 8);
00189 *dst++ = char(val);
00190 <span class="keywordflow">return</span> dst;
00191 }
00192
00193 <span class="keyword">inline</span> <span class="keywordtype">char</span>* pack2(<span class="keywordtype">char</span>* dst, <span class="keywordtype">char</span>* src) {
00194 <span class="keywordflow">return</span> pack2(dst, *(int2*)src);
00195 }
00196
00197 <span class="keyword">inline</span> <span class="keywordtype">void</span> pack2(int2& val) {
00198 <span class="preprocessor">#if BYTE_ORDER != BIG_ENDIAN</span>
00199 <span class="preprocessor"></span><span class="preprocessor">#ifdef USE_HTON_NTOH</span>
00200 <span class="preprocessor"></span> val = htons(val);
00201 <span class="preprocessor">#else</span>
00202 <span class="preprocessor"></span> pack2((<span class="keywordtype">char</span>*)&val, val);
00203 <span class="preprocessor">#endif</span>
00204 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
00205 <span class="preprocessor"></span>}
00206
00207
00208 <span class="keyword">inline</span> <span class="keywordtype">char</span>* pack4(<span class="keywordtype">char</span>* dst, int4 val) {
00209 *dst++ = char(val >> 24);
00210 *dst++ = char(val >> 16);
00211 *dst++ = char(val >> 8);
00212 *dst++ = char(val);
00213 <span class="keywordflow">return</span> dst;
00214 }
00215
00216 <span class="keyword">inline</span> <span class="keywordtype">char</span>* pack4(<span class="keywordtype">char</span>* dst, <span class="keywordtype">char</span>* src) {
00217 <span class="keywordflow">return</span> pack4(dst, *(int4*)src);
00218 }
00219
00220 <span class="keyword">inline</span> <span class="keywordtype">void</span> pack4(int4& val) {
00221 <span class="preprocessor">#if BYTE_ORDER != BIG_ENDIAN</span>
00222 <span class="preprocessor"></span><span class="preprocessor">#ifdef USE_HTON_NTOH</span>
00223 <span class="preprocessor"></span> val = htonl(val);
00224 <span class="preprocessor">#else</span>
00225 <span class="preprocessor"></span> pack4((<span class="keywordtype">char</span>*)&val, val);
00226 <span class="preprocessor">#endif</span>
00227 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
00228 <span class="preprocessor"></span>}
00229
00230
00231 <span class="keyword">inline</span> <span class="keywordtype">char</span>* pack8(<span class="keywordtype">char</span>* dst, <span class="keywordtype">char</span>* src) {
00232 <span class="preprocessor">#if BYTE_ORDER == BIG_ENDIAN</span>
00233 <span class="preprocessor"></span> <span class="keywordflow">return</span> pack4( pack4(dst, src), src + 4);
00234 <span class="preprocessor">#else</span>
00235 <span class="preprocessor"></span> <span class="keywordflow">return</span> pack4( pack4(dst, src + 4), src);
00236 <span class="preprocessor">#endif</span>
00237 <span class="preprocessor"></span>}
00238
00239 <span class="keyword">inline</span> <span class="keywordtype">char</span>* pack8(<span class="keywordtype">char</span>* dst, db_int8 val) {
00240 <span class="keywordflow">return</span> pack8(dst, (<span class="keywordtype">char</span>*)&val);
00241 }
00242
00243 <span class="keyword">inline</span> <span class="keywordtype">char</span>* pack_oid(<span class="keywordtype">char</span>* dst, cli_oid_t oid)
00244 {
00245 <span class="keywordflow">return</span> (<span class="keyword">sizeof</span>(oid) == 4) ? pack4(dst, oid) : pack8(dst, (char*)&oid);
00246 }
00247
00248 <span class="keyword">inline</span> <span class="keywordtype">char</span>* pack_rectangle(<span class="keywordtype">char</span>* dst, cli_rectangle_t* rect)
00249 {
00250 <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(cli_coord_t) == 4) {
00251 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < CLI_RECTANGLE_DIMENSION*2; i++) {
00252 dst = pack4(dst, (<span class="keywordtype">char</span>*)&rect->boundary[i]);
00253 }
00254 } <span class="keywordflow">else</span> {
00255 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < CLI_RECTANGLE_DIMENSION*2; i++) {
00256 dst = pack8(dst, (<span class="keywordtype">char</span>*)&rect->boundary[i]);
00257 }
00258 }
00259 <span class="keywordflow">return</span> dst;
00260 }
00261
00262 <span class="keyword">inline</span> int2 unpack2(<span class="keywordtype">char</span>* src) {
00263 nat1* s = (nat1*)src;
00264 <span class="keywordflow">return</span> (s[0] << 8) + s[1];
00265 }
00266
00267 <span class="keyword">inline</span> <span class="keywordtype">char</span>* unpack2(<span class="keywordtype">char</span>* dst, <span class="keywordtype">char</span>* src) {
00268 *(int2*)dst = unpack2(src);
00269 <span class="keywordflow">return</span> src + 2;
00270 }
00271
00272 <span class="keyword">inline</span> <span class="keywordtype">void</span> unpack2(int2& val) {
00273 <span class="preprocessor">#if BYTE_ORDER != BIG_ENDIAN</span>
00274 <span class="preprocessor"></span><span class="preprocessor">#ifdef USE_HTON_NTOH</span>
00275 <span class="preprocessor"></span> val = ntohs(val);
00276 <span class="preprocessor">#else</span>
00277 <span class="preprocessor"></span> val = unpack2((<span class="keywordtype">char</span>*)&val);
00278 <span class="preprocessor">#endif</span>
00279 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
00280 <span class="preprocessor"></span>}
00281
00282
00283 <span class="keyword">inline</span> int4 unpack4(<span class="keywordtype">char</span>* src) {
00284 nat1* s = (nat1*)src;
00285 <span class="keywordflow">return</span> (((((s[0] << 8) + s[1]) << 8) + s[2]) << 8) + s[3];
00286 }
00287
00288 <span class="keyword">inline</span> <span class="keywordtype">char</span>* unpack4(<span class="keywordtype">char</span>* dst, <span class="keywordtype">char</span>* src) {
00289 *(int4*)dst = unpack4(src);
00290 <span class="keywordflow">return</span> src + 4;
00291 }
00292
00293 <span class="keyword">inline</span> <span class="keywordtype">void</span> unpack4(int4& val) {
00294 <span class="preprocessor">#if BYTE_ORDER != BIG_ENDIAN</span>
00295 <span class="preprocessor"></span><span class="preprocessor">#ifdef USE_HTON_NTOH</span>
00296 <span class="preprocessor"></span> val = ntohl(val);
00297 <span class="preprocessor">#else</span>
00298 <span class="preprocessor"></span> val = unpack4((<span class="keywordtype">char</span>*)&val);
00299 <span class="preprocessor">#endif</span>
00300 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
00301 <span class="preprocessor"></span>}
00302
00303 <span class="keyword">inline</span> <span class="keywordtype">char</span>* unpack8(<span class="keywordtype">char</span>* dst, <span class="keywordtype">char</span>* src) {
00304 <span class="preprocessor">#if BYTE_ORDER == BIG_ENDIAN</span>
00305 <span class="preprocessor"></span> *(int4*)dst = unpack4(src);
00306 *((int4*)dst+1) = unpack4(src+4);
00307 <span class="preprocessor">#else</span>
00308 <span class="preprocessor"></span> *(int4*)dst = unpack4(src+4);
00309 *((int4*)dst+1) = unpack4(src);
00310 <span class="preprocessor">#endif</span>
00311 <span class="preprocessor"></span> <span class="keywordflow">return</span> src + 8;
00312 }
00313
00314 <span class="keyword">inline</span> db_int8 unpack8(<span class="keywordtype">char</span>* src) {
00315 db_int8 val;
00316 unpack8((<span class="keywordtype">char</span>*)&val, src);
00317 <span class="keywordflow">return</span> val;
00318 }
00319
00320 <span class="keyword">inline</span> cli_oid_t unpack_oid(<span class="keywordtype">char</span>* src)
00321 {
00322 cli_oid_t oid;
00323 <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(oid) == 4) {
00324 oid = unpack4(src);
00325 } <span class="keywordflow">else</span> {
00326 unpack8((<span class="keywordtype">char</span>*)&oid, src);
00327 }
00328 <span class="keywordflow">return</span> oid;
00329 }
00330
00331 <span class="keyword">inline</span> <span class="keywordtype">char</span>* unpack_rectangle(cli_rectangle_t* rect, <span class="keywordtype">char</span>* src)
00332 {
00333 <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(cli_coord_t) == 4) {
00334 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < CLI_RECTANGLE_DIMENSION*2; i++) {
00335 src = unpack4((<span class="keywordtype">char</span>*)&rect->boundary[i], src);
00336 }
00337 } <span class="keywordflow">else</span> {
00338 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < CLI_RECTANGLE_DIMENSION*2; i++) {
00339 src = unpack8((<span class="keywordtype">char</span>*)&rect->boundary[i], src);
00340 }
00341 }
00342 <span class="keywordflow">return</span> src;
00343 }
00344
00345 <span class="keyword">struct </span>cli_request {
00346 int4 length;
00347 int4 cmd;
00348 int4 stmt_id;
00349
00350 <span class="keywordtype">void</span> pack() {
00351 pack4(length);
00352 pack4(cmd);
00353 pack4(stmt_id);
00354 }
00355
00356 <span class="keywordtype">void</span> unpack() {
00357 unpack4(length);
00358 unpack4(cmd);
00359 unpack4(stmt_id);
00360 }
00361 };
00362
00363 END_FASTDB_NAMESPACE
00364
00365 <span class="preprocessor">#endif</span>
</pre></div><hr><address style="align: right;"><small>Generated on Thu Feb 14 12:42:30 2008 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.18 </small></address>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -