itemptr.h 3.0 KB
Newer Older
1 2
/*-------------------------------------------------------------------------
 *
3
 * itemptr.h
4
 *	  POSTGRES disk item pointer definitions.
5 6
 *
 *
B
Add:  
Bruce Momjian 已提交
7 8
 * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
 * Portions Copyright (c) 1994, Regents of the University of California
9
 *
V
misc  
Vadim B. Mikheev 已提交
10
 * $Id: itemptr.h,v 1.15 2000/07/04 01:49:44 vadim Exp $
11 12 13
 *
 *-------------------------------------------------------------------------
 */
14
#ifndef ITEMPTR_H
15 16
#define ITEMPTR_H

17
#include "storage/block.h"
B
Bruce Momjian 已提交
18
#include "storage/off.h"
19 20 21 22 23 24 25 26

/*
 * ItemPointer:
 *
 * this is a pointer to an item on another disk page in the same file.
 * blkid tells us which block, posid tells us which entry in the linp
 * (ItemIdData) array we want.
 */
27 28
typedef struct ItemPointerData
{
29 30
	BlockIdData ip_blkid;
	OffsetNumber ip_posid;
31
} ItemPointerData;
32

V
misc  
Vadim B. Mikheev 已提交
33 34 35
#define	SizeOfIptrData	\
	(offsetof(ItemPointerData, ip_posid) + sizeof(OffsetNumber))

36
typedef ItemPointerData *ItemPointer;
37 38

/* ----------------
39
 *		support macros
40 41 42 43
 * ----------------
 */

/*
B
Bruce Momjian 已提交
44
 * ItemPointerIsValid
45
 *		True iff the disk item pointer is not NULL.
46 47
 */
#define ItemPointerIsValid(pointer) \
48
	((bool) (PointerIsValid(pointer) && ((pointer)->ip_posid != 0)))
49 50

/*
B
Bruce Momjian 已提交
51
 * ItemPointerGetBlockNumber
52
 *		Returns the block number of a disk item pointer.
53 54
 */
#define ItemPointerGetBlockNumber(pointer) \
55 56 57 58
( \
	AssertMacro(ItemPointerIsValid(pointer)), \
	BlockIdGetBlockNumber(&(pointer)->ip_blkid) \
)
59 60

/*
B
Bruce Momjian 已提交
61
 * ItemPointerGetOffsetNumber
62
 *		Returns the offset number of a disk item pointer.
63 64
 */
#define ItemPointerGetOffsetNumber(pointer) \
65 66 67 68
( \
	AssertMacro(ItemPointerIsValid(pointer)), \
	(pointer)->ip_posid \
)
69 70

/*
B
Bruce Momjian 已提交
71
 * ItemPointerSet
72
 *		Sets a disk item pointer to the specified block and offset.
73 74
 */
#define ItemPointerSet(pointer, blockNumber, offNum) \
75 76 77 78 79
( \
	AssertMacro(PointerIsValid(pointer)), \
	BlockIdSet(&((pointer)->ip_blkid), blockNumber), \
	(pointer)->ip_posid = offNum \
)
80 81

/*
B
Bruce Momjian 已提交
82
 * ItemPointerSetBlockNumber
83
 *		Sets a disk item pointer to the specified block.
84 85
 */
#define ItemPointerSetBlockNumber(pointer, blockNumber) \
86 87 88 89
( \
	AssertMacro(PointerIsValid(pointer)), \
	BlockIdSet(&((pointer)->ip_blkid), blockNumber) \
)
90 91

/*
B
Bruce Momjian 已提交
92
 * ItemPointerSetOffsetNumber
93
 *		Sets a disk item pointer to the specified offset.
94 95
 */
#define ItemPointerSetOffsetNumber(pointer, offsetNumber) \
96 97 98 99
( \
	AssertMacro(PointerIsValid(pointer)), \
	(pointer)->ip_posid = (offsetNumber) \
)
100 101

/*
B
Bruce Momjian 已提交
102
 * ItemPointerCopy
103
 *		Copies the contents of one disk item pointer to another.
104 105
 */
#define ItemPointerCopy(fromPointer, toPointer) \
106 107 108 109 110
( \
	AssertMacro(PointerIsValid(toPointer)), \
	AssertMacro(PointerIsValid(fromPointer)), \
	*(toPointer) = *(fromPointer) \
)
111 112

/*
B
Bruce Momjian 已提交
113
 * ItemPointerSetInvalid
114
 *		Sets a disk item pointer to be invalid.
115 116
 */
#define ItemPointerSetInvalid(pointer) \
117 118 119 120 121
( \
	AssertMacro(PointerIsValid(pointer)), \
	BlockIdSet(&((pointer)->ip_blkid), InvalidBlockNumber), \
	(pointer)->ip_posid = InvalidOffsetNumber \
)
122 123

/* ----------------
124
 *		externs
125 126 127
 * ----------------
 */

128
extern bool ItemPointerEquals(ItemPointer pointer1, ItemPointer pointer2);
129

130
#endif	 /* ITEMPTR_H */