mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-30 19:01:19 +02:00
df816f6ad5
The set is implemented as a B-tree, with a compact representation at leaf items, using Simple-8b algorithm, so that clusters of nearby values use less memory. The IntegerSet isn't used for anything yet, aside from the test code, but we have two patches in the works that would benefit from this: A patch to allow GiST vacuum to delete empty pages, and a patch to reduce heap VACUUM's memory usage, by storing the list of dead TIDs more efficiently and lifting the 1 GB limit on its size. This includes a unit test module, in src/test/modules/test_integerset. It can be used to verify correctness, as a regression test, but if you run it manully, it can also print memory usage and execution time of some of the tests. Author: Heikki Linnakangas, Andrey Borodin Reviewed-by: Julien Rouhaud Discussion: https://www.postgresql.org/message-id/b5e82599-1966-5783-733c-1a947ddb729f@iki.fi
25 lines
716 B
C
25 lines
716 B
C
/*
|
|
* integerset.h
|
|
* In-memory data structure to hold a large set of integers efficiently
|
|
*
|
|
* Portions Copyright (c) 2012-2019, PostgreSQL Global Development Group
|
|
*
|
|
* src/include/lib/integerset.h
|
|
*/
|
|
#ifndef INTEGERSET_H
|
|
#define INTEGERSET_H
|
|
|
|
typedef struct IntegerSet IntegerSet;
|
|
|
|
extern IntegerSet *intset_create(void);
|
|
extern void intset_add_member(IntegerSet *intset, uint64 x);
|
|
extern bool intset_is_member(IntegerSet *intset, uint64 x);
|
|
|
|
extern uint64 intset_num_entries(IntegerSet *intset);
|
|
extern uint64 intset_memory_usage(IntegerSet *intset);
|
|
|
|
extern void intset_begin_iterate(IntegerSet *intset);
|
|
extern bool intset_iterate_next(IntegerSet *intset, uint64 *next);
|
|
|
|
#endif /* INTEGERSET_H */
|