PostgreSQL Source Code: contrib/intarray/_int.h Source File (original) (raw)

1

2

3

4#ifndef ___INT_H__

5#define ___INT_H__

6

9

10

11#define G_INT_NUMRANGES_DEFAULT 100

12#define G_INT_NUMRANGES_MAX ((GISTMaxIndexKeySize - VARHDRSZ) / \

13 (2 * sizeof(int32)))

14#define G_INT_GET_NUMRANGES() (PG_HAS_OPCLASS_OPTIONS() ? \

15 ((GISTIntArrayOptions *) PG_GET_OPCLASS_OPTIONS())->num_ranges : \

16 G_INT_NUMRANGES_DEFAULT)

17

18

19typedef struct

20{

21 int32 vl_len_;

24

25

26#define ARRPTR(x) ( (int32 *) ARR_DATA_PTR(x) )

27#define ARRNELEMS(x) ArrayGetNItems(ARR_NDIM(x), ARR_DIMS(x))

28

29

30#define CHECKARRVALID(x) \

31 do { \

32 if (ARR_HASNULL(x) && array_contains_nulls(x)) \

33 ereport(ERROR, \

34 (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), \

35 errmsg("array must not contain nulls"))); \

36 } while(0)

37

38#define ARRISEMPTY(x) (ARRNELEMS(x) == 0)

39

40

41#define SORT(x) \

42 do { \

43 int _nelems_ = ARRNELEMS(x); \

44 bool _ascending = true; \

45 isort(ARRPTR(x), _nelems_, &_ascending); \

46 } while(0)

47

48

49#define PREPAREARR(x) \

50 do { \

51 int _nelems_ = ARRNELEMS(x); \

52 bool _ascending = true; \

53 isort(ARRPTR(x), _nelems_, &_ascending); \

54 (x) = _int_unique(x); \

55 } while(0)

56

57

58#define WISH_F(a,b,c) (double)( -(double)(((a)-(b))*((a)-(b))*((a)-(b)))*(c) )

59

60

61

62#define SIGLEN_DEFAULT (63 * 4)

63#define SIGLEN_MAX GISTMaxIndexKeySize

64#define SIGLENBIT(siglen) ((siglen) * BITS_PER_BYTE)

65#define GET_SIGLEN() (PG_HAS_OPCLASS_OPTIONS() ? \

66 ((GISTIntArrayBigOptions *) PG_GET_OPCLASS_OPTIONS())->siglen : \

67 SIGLEN_DEFAULT)

68

70

71#define LOOPBYTE(siglen) \

72 for (i = 0; i < siglen; i++)

73

74

75#define GETBYTE(x,i) ( *( (BITVECP)(x) + (int)( (i) / BITS_PER_BYTE ) ) )

76#define GETBITBYTE(x,i) ( (*((char*)(x)) >> (i)) & 0x01 )

77#define CLRBIT(x,i) GETBYTE(x,i) &= ~( 0x01 << ( (i) % BITS_PER_BYTE ) )

78#define SETBIT(x,i) GETBYTE(x,i) |= ( 0x01 << ( (i) % BITS_PER_BYTE ) )

79#define GETBIT(x,i) ( (GETBYTE(x,i) >> ( (i) % BITS_PER_BYTE )) & 0x01 )

80#define HASHVAL(val, siglen) (((unsigned int)(val)) % SIGLENBIT(siglen))

81#define HASH(sign, val, siglen) SETBIT((sign), HASHVAL(val, siglen))

82

83

84typedef struct

85{

86 int32 vl_len_;

87 int siglen;

89

90

91

92

93typedef struct

94{

95 int32 vl_len_;

99

100#define ALLISTRUE 0x04

101

102#define ISALLTRUE(x) ( ((GISTTYPE*)x)->flag & ALLISTRUE )

103

104#define GTHDRSIZE (VARHDRSZ + sizeof(int32))

105#define CALCGTSIZE(flag, siglen) ( GTHDRSIZE+(((flag) & ALLISTRUE) ? 0 : (siglen)) )

106

107#define GETSIGN(x) ( (BITVECP)( (char*)x+GTHDRSIZE ) )

108

109

110

111

128

129

130

131

132

133

134#define BooleanSearchStrategy 20

135

136

137

138

139

141{

146

148{

149 int32 vl_len_;

153

154#define HDRSIZEQT offsetof(QUERYTYPE, items)

155#define COMPUTESIZE(size) ( HDRSIZEQT + (size) * sizeof(ITEM) )

156#define QUERYTYPEMAXITEMS ((MaxAllocSize - HDRSIZEQT) / sizeof(ITEM))

157#define GETQUERY(x) ( (x)->items )

158

159

160#define END 0

161#define ERR 1

162#define VAL 2

163#define OPR 3

164#define OPEN 4

165#define CLOSE 5

166

167

168#define DatumGetQueryTypeP(X) ((QUERYTYPE *) PG_DETOAST_DATUM(X))

169#define DatumGetQueryTypePCopy(X) ((QUERYTYPE *) PG_DETOAST_DATUM_COPY(X))

170#define PG_GETARG_QUERYTYPE_P(n) DatumGetQueryTypeP(PG_GETARG_DATUM(n))

171#define PG_GETARG_QUERYTYPE_P_COPY(n) DatumGetQueryTypePCopy(PG_GETARG_DATUM(n))

172

175

178

179

180#define QSORT(a, direction) \

181 do { \

182 int _nelems_ = ARRNELEMS(a); \

183 bool _ascending = (direction) ? true : false; \

184 isort(ARRPTR(a), _nelems_, &_ascending); \

185 } while(0)

186

187#endif

bool inner_int_overlap(ArrayType *a, ArrayType *b)

ArrayType * int_to_intset(int32 elem)

ArrayType * intarray_concat_arrays(ArrayType *a, ArrayType *b)

ArrayType * new_intArrayType(int num)

ArrayType * inner_int_union(ArrayType *a, ArrayType *b)

bool inner_int_contains(ArrayType *a, ArrayType *b)

int32 intarray_match_first(ArrayType *a, int32 elem)

int internal_size(int *a, int len)

ArrayType * copy_intArrayType(ArrayType *a)

bool signconsistent(QUERYTYPE *query, BITVECP sign, int siglen, bool calcnot)

ArrayType * intarray_add_elem(ArrayType *a, int32 elem)

ArrayType * inner_int_inter(ArrayType *a, ArrayType *b)

void isort(int32 *a, size_t len, void *arg)

void rt__int_size(ArrayType *a, float *size)

struct QUERYTYPE QUERYTYPE

bool query_has_required_values(QUERYTYPE *query)

ArrayType * resize_intArrayType(ArrayType *a, int num)

void gensign(BITVECP sign, int *a, int len, int siglen)

bool execconsistent(QUERYTYPE *query, ArrayType *array, bool calcnot)

ArrayType * _int_unique(ArrayType *r)

bool gin_bool_consistent(QUERYTYPE *query, bool *check)

#define FLEXIBLE_ARRAY_MEMBER

ITEM items[FLEXIBLE_ARRAY_MEMBER]