summaryrefslogtreecommitdiff
path: root/contrib/bit/varbit.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bit/varbit.h')
-rw-r--r--contrib/bit/varbit.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/contrib/bit/varbit.h b/contrib/bit/varbit.h
new file mode 100644
index 00000000000..af55f486ea3
--- /dev/null
+++ b/contrib/bit/varbit.h
@@ -0,0 +1,48 @@
+#include "postgres.h"
+
+typedef bits8 *VarBit;
+typedef uint32 BitIndex;
+
+#define HEXDIG(z) (z)<10 ? ((z)+'0') : ((z)-10+'A')
+
+
+#define BITSPERBYTE 8
+#define VARBITHDRSZ sizeof(int32)
+/* Number of bits in this bit string */
+#define VARBITLEN(PTR) (((struct varlena *)VARDATA(PTR))->vl_len)
+/* Pointer tp the first byte containing bit string data */
+#define VARBITS(PTR) (((struct varlena *)VARDATA(PTR))->vl_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 */
+#define VARBITPAD(PTR) (VARBITBYTES(PTR)*BITSPERBYTE - VARBITLEN(PTR))
+/* Number of bytes needed to store a bit string of a given length */
+#define VARBITDATALEN(BITLEN) (BITLEN/BITSPERBYTE + \
+ (BITLEN%BITSPERBYTE > 0 ? 1 : 0) + \
+ 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. BITSPERBYTE bits */
+#define BITMASK 0xFF
+#define BITHIGH 0x80
+
+
+char * zpbitin(char *s, int dummy, int32 atttypmod);
+char * zpbitout(char *s);
+char * zpbitsout(char *s);
+char * varbitin(char *s, int dummy, int32 atttypmod);
+bool biteq (char *arg1, char *arg2);
+bool bitne (char *arg1, char *arg2);
+bool bitge (char *arg1, char *arg2);
+bool bitgt (char *arg1, char *arg2);
+bool bitle (char *arg1, char *arg2);
+bool bitlt (char *arg1, char *arg2);
+int bitcmp (char *arg1, char *arg2);
+char * bitand (char * arg1, char * arg2);
+char * bitor (char * arg1, char * arg2);
+char * bitxor (char * arg1, char * arg2);
+char * bitnot (char * arg);
+char * bitshiftright (char * arg, int shft);
+char * bitshiftleft (char * arg, int shft);
+char * bitcat (char *arg1, char *arg2);
+char * bitsubstr (char *arg, int32 s, int32 l);