varbit.h

来自「PostgreSQL 8.2中增加了很多企业用户所需要的功能和性能上的提高,其开」· C头文件 代码 · 共 97 行

H
97
字号
/*------------------------------------------------------------------------- * * varbit.h *	  Functions for the SQL datatypes BIT() and BIT VARYING(). * * Code originally contributed by Adriaan Joubert. * * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * $PostgreSQL: pgsql/src/include/utils/varbit.h,v 1.23 2006/03/05 15:59:08 momjian Exp $ * *------------------------------------------------------------------------- */#ifndef VARBIT_H#define VARBIT_H#include "fmgr.h"/* * Modeled on struct varlena from postgres.h, but data type is bits8. */typedef struct{	int32		vl_len;			/* standard varlena header (total size in								 * bytes) */	int32		bit_len;		/* number of valid bits */	bits8		bit_dat[1];		/* bit string, most sig. byte first */} VarBit;/* * fmgr interface macros * * BIT and BIT VARYING are toastable varlena types.  They are the same * as far as representation goes, so we just have one set of macros. */#define DatumGetVarBitP(X)		   ((VarBit *) PG_DETOAST_DATUM(X))#define DatumGetVarBitPCopy(X)	   ((VarBit *) PG_DETOAST_DATUM_COPY(X))#define VarBitPGetDatum(X)		   PointerGetDatum(X)#define PG_GETARG_VARBIT_P(n)	   DatumGetVarBitP(PG_GETARG_DATUM(n))#define PG_GETARG_VARBIT_P_COPY(n) DatumGetVarBitPCopy(PG_GETARG_DATUM(n))#define PG_RETURN_VARBIT_P(x)	   return VarBitPGetDatum(x)/* Header overhead *in addition to* VARHDRSZ */#define VARBITHDRSZ			sizeof(int32)/* Number of bits in this bit string */#define VARBITLEN(PTR)		(((VarBit *) (PTR))->bit_len)/* Pointer to the first byte containing bit string data */#define VARBITS(PTR)		(((VarBit *) (PTR))->bit_dat)/* Number of bytes in the data section of a bit string */#define VARBITBYTES(PTR)	(VARSIZE(PTR) - VARHDRSZ - VARBITHDRSZ)/* Padding of the bit string at the end (in bits) */#define VARBITPAD(PTR)		(VARBITBYTES(PTR)*BITS_PER_BYTE - VARBITLEN(PTR))/* Number of bytes needed to store a bit string of a given length */#define VARBITTOTALLEN(BITLEN)	(((BITLEN) + BITS_PER_BYTE-1)/BITS_PER_BYTE + \								 VARHDRSZ + VARBITHDRSZ)/* pointer beyond the end of the bit string (like end() in STL containers) */#define VARBITEND(PTR)		(((bits8 *) (PTR)) + VARSIZE(PTR))/* Mask that will cover exactly one byte, i.e. BITS_PER_BYTE bits */#define BITMASK 0xFFextern Datum bit_in(PG_FUNCTION_ARGS);extern Datum bit_out(PG_FUNCTION_ARGS);extern Datum bit_recv(PG_FUNCTION_ARGS);extern Datum bit_send(PG_FUNCTION_ARGS);extern Datum varbit_in(PG_FUNCTION_ARGS);extern Datum varbit_out(PG_FUNCTION_ARGS);extern Datum varbit_recv(PG_FUNCTION_ARGS);extern Datum varbit_send(PG_FUNCTION_ARGS);extern Datum bit(PG_FUNCTION_ARGS);extern Datum varbit(PG_FUNCTION_ARGS);extern Datum biteq(PG_FUNCTION_ARGS);extern Datum bitne(PG_FUNCTION_ARGS);extern Datum bitlt(PG_FUNCTION_ARGS);extern Datum bitle(PG_FUNCTION_ARGS);extern Datum bitgt(PG_FUNCTION_ARGS);extern Datum bitge(PG_FUNCTION_ARGS);extern Datum bitcmp(PG_FUNCTION_ARGS);extern Datum bitand(PG_FUNCTION_ARGS);extern Datum bitor(PG_FUNCTION_ARGS);extern Datum bitxor(PG_FUNCTION_ARGS);extern Datum bitnot(PG_FUNCTION_ARGS);extern Datum bitshiftleft(PG_FUNCTION_ARGS);extern Datum bitshiftright(PG_FUNCTION_ARGS);extern Datum bitcat(PG_FUNCTION_ARGS);extern Datum bitsubstr(PG_FUNCTION_ARGS);extern Datum bitlength(PG_FUNCTION_ARGS);extern Datum bitoctetlength(PG_FUNCTION_ARGS);extern Datum bitfromint4(PG_FUNCTION_ARGS);extern Datum bittoint4(PG_FUNCTION_ARGS);extern Datum bitfromint8(PG_FUNCTION_ARGS);extern Datum bittoint8(PG_FUNCTION_ARGS);extern Datum bitposition(PG_FUNCTION_ARGS);#endif

⌨️ 快捷键说明

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