1 /*-------------------------------------------------------------------------
2  *
3  * off.h
4  *	  POSTGRES disk "offset" definitions.
5  *
6  *
7  * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/storage/off.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef OFF_H
15 #define OFF_H
16 
17 #include "storage/itemid.h"
18 /*
19  * OffsetNumber:
20  *
21  * this is a 1-based index into the linp (ItemIdData) array in the
22  * header of each disk page.
23  */
24 typedef uint16 OffsetNumber;
25 
26 #define InvalidOffsetNumber		((OffsetNumber) 0)
27 #define FirstOffsetNumber		((OffsetNumber) 1)
28 #define MaxOffsetNumber			((OffsetNumber) (BLCKSZ / sizeof(ItemIdData)))
29 
30 /* ----------------
31  *		support macros
32  * ----------------
33  */
34 
35 /*
36  * OffsetNumberIsValid
37  *		True iff the offset number is valid.
38  */
39 #define OffsetNumberIsValid(offsetNumber) \
40 	((bool) ((offsetNumber != InvalidOffsetNumber) && \
41 			 (offsetNumber <= MaxOffsetNumber)))
42 
43 /*
44  * OffsetNumberNext
45  * OffsetNumberPrev
46  *		Increments/decrements the argument.  These macros look pointless
47  *		but they help us disambiguate the different manipulations on
48  *		OffsetNumbers (e.g., sometimes we subtract one from an
49  *		OffsetNumber to move back, and sometimes we do so to form a
50  *		real C array index).
51  */
52 #define OffsetNumberNext(offsetNumber) \
53 	((OffsetNumber) (1 + (offsetNumber)))
54 #define OffsetNumberPrev(offsetNumber) \
55 	((OffsetNumber) (-1 + (offsetNumber)))
56 
57 #endif							/* OFF_H */
58