PostgreSQL Source Code: src/include/nodes/bitmapset.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18#ifndef BITMAPSET_H

19#define BITMAPSET_H

20

22

23

24

25

27

28

29

30

31

32

33

34

35#if SIZEOF_VOID_P >= 8

36

37#define BITS_PER_BITMAPWORD 64

40

41#else

42

43#define BITS_PER_BITMAPWORD 32

46

47#endif

48

50{

51 pg_node_attr(custom_copy_equal, special_read_write, no_query_jumble)

52

54 int nwords;

57

58

59

60typedef enum

61{

63 BMS_SUBSET1,

64 BMS_SUBSET2,

67

68

69typedef enum

70{

75

76

77#if BITS_PER_BITMAPWORD == 32

78#define bmw_leftmost_one_pos(w) pg_leftmost_one_pos32(w)

79#define bmw_rightmost_one_pos(w) pg_rightmost_one_pos32(w)

80#define bmw_popcount(w) pg_popcount32(w)

81#elif BITS_PER_BITMAPWORD == 64

82#define bmw_leftmost_one_pos(w) pg_leftmost_one_pos64(w)

83#define bmw_rightmost_one_pos(w) pg_rightmost_one_pos64(w)

84#define bmw_popcount(w) pg_popcount64(w)

85#else

86#error "invalid BITS_PER_BITMAPWORD"

87#endif

88

89

90

91

92

93

99

113

114

116

117

118#define bms_is_empty(a) ((a) == NULL)

119

120

121

130

131

134

135

138extern int bitmap_match(const void *key1, const void *key2, Size keysize);

139

140#endif

Bitmapset * bms_replace_members(Bitmapset *a, const Bitmapset *b)

Bitmapset * bms_difference(const Bitmapset *a, const Bitmapset *b)

int bms_prev_member(const Bitmapset *a, int prevbit)

Bitmapset * bms_make_singleton(int x)

Bitmapset * bms_int_members(Bitmapset *a, const Bitmapset *b)

Bitmapset * bms_intersect(const Bitmapset *a, const Bitmapset *b)

uint32 bitmap_hash(const void *key, Size keysize)

bool bms_equal(const Bitmapset *a, const Bitmapset *b)

BMS_Comparison bms_subset_compare(const Bitmapset *a, const Bitmapset *b)

int bms_next_member(const Bitmapset *a, int prevbit)

uint32 bms_hash_value(const Bitmapset *a)

Bitmapset * bms_del_members(Bitmapset *a, const Bitmapset *b)

Bitmapset * bms_add_range(Bitmapset *a, int lower, int upper)

Bitmapset * bms_del_member(Bitmapset *a, int x)

bool bms_is_subset(const Bitmapset *a, const Bitmapset *b)

int bms_singleton_member(const Bitmapset *a)

void bms_free(Bitmapset *a)

int bms_num_members(const Bitmapset *a)

bool bms_is_member(int x, const Bitmapset *a)

Bitmapset * bms_add_member(Bitmapset *a, int x)

Bitmapset * bms_add_members(Bitmapset *a, const Bitmapset *b)

Bitmapset * bms_union(const Bitmapset *a, const Bitmapset *b)

int bitmap_match(const void *key1, const void *key2, Size keysize)

BMS_Membership bms_membership(const Bitmapset *a)

int bms_member_index(Bitmapset *a, int x)

bool bms_overlap(const Bitmapset *a, const Bitmapset *b)

bool bms_overlap_list(const Bitmapset *a, const struct List *b)

int bms_compare(const Bitmapset *a, const Bitmapset *b)

bool bms_get_singleton_member(const Bitmapset *a, int *member)

Bitmapset * bms_join(Bitmapset *a, Bitmapset *b)

bool bms_nonempty_difference(const Bitmapset *a, const Bitmapset *b)

struct Bitmapset Bitmapset

Bitmapset * bms_copy(const Bitmapset *a)

#define FLEXIBLE_ARRAY_MEMBER

Datum lower(PG_FUNCTION_ARGS)

Datum upper(PG_FUNCTION_ARGS)

pg_node_attr(custom_copy_equal, special_read_write, no_query_jumble) NodeTag type

bitmapword words[FLEXIBLE_ARRAY_MEMBER]