db_swap.h

来自「这是linux下运行的mysql软件包,可用于linux 下安装 php + m」· C头文件 代码 · 共 117 行

H
117
字号
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 1996-2002 *	Sleepycat Software.  All rights reserved. *//* * Copyright (c) 1990, 1993, 1994 *	The Regents of the University of California.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $Id: db_swap.h,v 11.8 2002/01/11 15:52:26 bostic Exp $ */#ifndef _DB_SWAP_H_#define	_DB_SWAP_H_/* * Little endian <==> big endian 32-bit swap macros. *	M_32_SWAP	swap a memory location *	P_32_COPY	copy potentially unaligned 4 byte quantities *	P_32_SWAP	swap a referenced memory location */#define	M_32_SWAP(a) {							\	u_int32_t _tmp;							\	_tmp = a;							\	((u_int8_t *)&a)[0] = ((u_int8_t *)&_tmp)[3];			\	((u_int8_t *)&a)[1] = ((u_int8_t *)&_tmp)[2];			\	((u_int8_t *)&a)[2] = ((u_int8_t *)&_tmp)[1];			\	((u_int8_t *)&a)[3] = ((u_int8_t *)&_tmp)[0];			\}#define	P_32_COPY(a, b) {						\	((u_int8_t *)b)[0] = ((u_int8_t *)a)[0];			\	((u_int8_t *)b)[1] = ((u_int8_t *)a)[1];			\	((u_int8_t *)b)[2] = ((u_int8_t *)a)[2];			\	((u_int8_t *)b)[3] = ((u_int8_t *)a)[3];			\}#define	P_32_SWAP(a) {							\	u_int32_t _tmp;							\	P_32_COPY(a, &_tmp);						\	((u_int8_t *)a)[0] = ((u_int8_t *)&_tmp)[3];			\	((u_int8_t *)a)[1] = ((u_int8_t *)&_tmp)[2];			\	((u_int8_t *)a)[2] = ((u_int8_t *)&_tmp)[1];			\	((u_int8_t *)a)[3] = ((u_int8_t *)&_tmp)[0];			\}/* * Little endian <==> big endian 16-bit swap macros. *	M_16_SWAP	swap a memory location *	P_16_COPY	copy potentially unaligned 2 byte quantities *	P_16_SWAP	swap a referenced memory location */#define	M_16_SWAP(a) {							\	u_int16_t _tmp;							\	_tmp = (u_int16_t)a;						\	((u_int8_t *)&a)[0] = ((u_int8_t *)&_tmp)[1];			\	((u_int8_t *)&a)[1] = ((u_int8_t *)&_tmp)[0];			\}#define	P_16_COPY(a, b) {						\	((u_int8_t *)b)[0] = ((u_int8_t *)a)[0];			\	((u_int8_t *)b)[1] = ((u_int8_t *)a)[1];			\}#define	P_16_SWAP(a) {							\	u_int16_t _tmp;							\	P_16_COPY(a, &_tmp);						\	((u_int8_t *)a)[0] = ((u_int8_t *)&_tmp)[1];			\	((u_int8_t *)a)[1] = ((u_int8_t *)&_tmp)[0];			\}#define	SWAP32(p) {							\	P_32_SWAP(p);							\	(p) += sizeof(u_int32_t);					\}#define	SWAP16(p) {							\	P_16_SWAP(p);							\	(p) += sizeof(u_int16_t);					\}/* * Berkeley DB has local versions of htonl() and ntohl() that operate on * pointers to the right size memory locations; the portability magic for * finding the real system functions isn't worth the effort. */#define	DB_HTONL(p) do {						\	if (!__db_isbigendian())					\		P_32_SWAP(p);						\} while (0)#define	DB_NTOHL(p) do {						\	if (!__db_isbigendian())					\		P_32_SWAP(p);						\} while (0)#endif /* !_DB_SWAP_H_ */

⌨️ 快捷键说明

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