40 lines
1.6 KiB
C
40 lines
1.6 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* multibitmapset.h
|
|
* Lists of Bitmapsets
|
|
*
|
|
* A multibitmapset is useful in situations where members of a set can
|
|
* be identified by two small integers; for example, varno and varattno
|
|
* of a group of Vars within a query. The implementation is a List of
|
|
* Bitmapsets, so that the empty set can be represented by NIL. (But,
|
|
* as with Bitmapsets, that's not the only allowed representation.)
|
|
* The zero-based index of a List element is the first identifying value,
|
|
* and the (also zero-based) index of a bit within that Bitmapset is
|
|
* the second identifying value. There is no expectation that the
|
|
* Bitmapsets should all be the same size.
|
|
*
|
|
* The available operations on multibitmapsets are intended to parallel
|
|
* those on bitmapsets, for example union and intersection. So far only
|
|
* a small fraction of that has been built out; we'll add more as needed.
|
|
*
|
|
*
|
|
* Copyright (c) 2022-2023, PostgreSQL Global Development Group
|
|
*
|
|
* src/include/nodes/multibitmapset.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef MULTIBITMAPSET_H
|
|
#define MULTIBITMAPSET_H
|
|
|
|
#include "nodes/bitmapset.h"
|
|
#include "nodes/pg_list.h"
|
|
|
|
extern List *mbms_add_member(List *a, int listidx, int bitidx);
|
|
extern List *mbms_add_members(List *a, const List *b);
|
|
extern List *mbms_int_members(List *a, const List *b);
|
|
extern bool mbms_is_member(int listidx, int bitidx, const List *a);
|
|
extern Bitmapset *mbms_overlap_sets(const List *a, const List *b);
|
|
|
|
#endif /* MULTIBITMAPSET_H */
|