]> granicus.if.org Git - postgresql/blob - src/include/nodes/tidbitmap.h
Update CVS HEAD for 2007 copyright. Back branches are typically not
[postgresql] / src / include / nodes / tidbitmap.h
1 /*-------------------------------------------------------------------------
2  *
3  * tidbitmap.h
4  *        PostgreSQL tuple-id (TID) bitmap package
5  *
6  * This module provides bitmap data structures that are spiritually
7  * similar to Bitmapsets, but are specially adapted to store sets of
8  * tuple identifiers (TIDs), or ItemPointers.  In particular, the division
9  * of an ItemPointer into BlockNumber and OffsetNumber is catered for.
10  * Also, since we wish to be able to store very large tuple sets in
11  * memory with this data structure, we support "lossy" storage, in which
12  * we no longer remember individual tuple offsets on a page but only the
13  * fact that a particular page needs to be visited.
14  *
15  *
16  * Copyright (c) 2003-2007, PostgreSQL Global Development Group
17  *
18  * $PostgreSQL: pgsql/src/include/nodes/tidbitmap.h,v 1.5 2007/01/05 22:19:56 momjian Exp $
19  *
20  *-------------------------------------------------------------------------
21  */
22 #ifndef TIDBITMAP_H
23 #define TIDBITMAP_H
24
25 #include "storage/itemptr.h"
26
27
28 /*
29  * Actual bitmap representation is private to tidbitmap.c.      Callers can
30  * do IsA(x, TIDBitmap) on it, but nothing else.
31  */
32 typedef struct TIDBitmap TIDBitmap;
33
34 /* Result structure for tbm_iterate */
35 typedef struct
36 {
37         BlockNumber blockno;            /* page number containing tuples */
38         int                     ntuples;                /* -1 indicates lossy result */
39         OffsetNumber offsets[1];        /* VARIABLE LENGTH ARRAY */
40 } TBMIterateResult;                             /* VARIABLE LENGTH STRUCT */
41
42 /* function prototypes in nodes/tidbitmap.c */
43
44 extern TIDBitmap *tbm_create(long maxbytes);
45 extern void tbm_free(TIDBitmap *tbm);
46
47 extern void tbm_add_tuples(TIDBitmap *tbm, const ItemPointer tids, int ntids);
48
49 extern void tbm_union(TIDBitmap *a, const TIDBitmap *b);
50 extern void tbm_intersect(TIDBitmap *a, const TIDBitmap *b);
51
52 extern bool tbm_is_empty(const TIDBitmap *tbm);
53
54 extern void tbm_begin_iterate(TIDBitmap *tbm);
55 extern TBMIterateResult *tbm_iterate(TIDBitmap *tbm);
56
57 #endif   /* TIDBITMAP_H */