Skip to content

Commit aeb767c

Browse files
committed
Convert macros to static inline functions (itemptr.h)
Reviewed-by: Amul Sul <sulamul@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/5b558da8-99fb-0a99-83dd-f72f05388517%40enterprisedb.com
1 parent e1df03b commit aeb767c

File tree

1 file changed

+73
-56
lines changed

1 file changed

+73
-56
lines changed

src/include/storage/itemptr.h

Lines changed: 73 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -71,85 +71,95 @@ typedef ItemPointerData *ItemPointer;
7171

7272

7373
/* ----------------
74-
* support macros
74+
* support functions
7575
* ----------------
7676
*/
7777

7878
/*
7979
* ItemPointerIsValid
8080
* True iff the disk item pointer is not NULL.
8181
*/
82-
#define ItemPointerIsValid(pointer) \
83-
((bool) (PointerIsValid(pointer) && ((pointer)->ip_posid != 0)))
82+
static inline bool
83+
ItemPointerIsValid(const ItemPointerData *pointer)
84+
{
85+
return PointerIsValid(pointer) && pointer->ip_posid != 0;
86+
}
8487

8588
/*
8689
* ItemPointerGetBlockNumberNoCheck
8790
* Returns the block number of a disk item pointer.
8891
*/
89-
#define ItemPointerGetBlockNumberNoCheck(pointer) \
90-
( \
91-
BlockIdGetBlockNumber(&(pointer)->ip_blkid) \
92-
)
92+
static inline BlockNumber
93+
ItemPointerGetBlockNumberNoCheck(const ItemPointerData *pointer)
94+
{
95+
return BlockIdGetBlockNumber(&pointer->ip_blkid);
96+
}
9397

9498
/*
9599
* ItemPointerGetBlockNumber
96100
* As above, but verifies that the item pointer looks valid.
97101
*/
98-
#define ItemPointerGetBlockNumber(pointer) \
99-
( \
100-
AssertMacro(ItemPointerIsValid(pointer)), \
101-
ItemPointerGetBlockNumberNoCheck(pointer) \
102-
)
102+
static inline BlockNumber
103+
ItemPointerGetBlockNumber(const ItemPointerData *pointer)
104+
{
105+
Assert(ItemPointerIsValid(pointer));
106+
return ItemPointerGetBlockNumberNoCheck(pointer);
107+
}
103108

104109
/*
105110
* ItemPointerGetOffsetNumberNoCheck
106111
* Returns the offset number of a disk item pointer.
107112
*/
108-
#define ItemPointerGetOffsetNumberNoCheck(pointer) \
109-
( \
110-
(pointer)->ip_posid \
111-
)
113+
static inline OffsetNumber
114+
ItemPointerGetOffsetNumberNoCheck(const ItemPointerData *pointer)
115+
{
116+
return pointer->ip_posid;
117+
}
112118

113119
/*
114120
* ItemPointerGetOffsetNumber
115121
* As above, but verifies that the item pointer looks valid.
116122
*/
117-
#define ItemPointerGetOffsetNumber(pointer) \
118-
( \
119-
AssertMacro(ItemPointerIsValid(pointer)), \
120-
ItemPointerGetOffsetNumberNoCheck(pointer) \
121-
)
123+
static inline OffsetNumber
124+
ItemPointerGetOffsetNumber(const ItemPointerData *pointer)
125+
{
126+
Assert(ItemPointerIsValid(pointer));
127+
return ItemPointerGetOffsetNumberNoCheck(pointer);
128+
}
122129

123130
/*
124131
* ItemPointerSet
125132
* Sets a disk item pointer to the specified block and offset.
126133
*/
127-
#define ItemPointerSet(pointer, blockNumber, offNum) \
128-
( \
129-
AssertMacro(PointerIsValid(pointer)), \
130-
BlockIdSet(&((pointer)->ip_blkid), blockNumber), \
131-
(pointer)->ip_posid = offNum \
132-
)
134+
static inline void
135+
ItemPointerSet(ItemPointerData *pointer, BlockNumber blockNumber, OffsetNumber offNum)
136+
{
137+
Assert(PointerIsValid(pointer));
138+
BlockIdSet(&pointer->ip_blkid, blockNumber);
139+
pointer->ip_posid = offNum;
140+
}
133141

134142
/*
135143
* ItemPointerSetBlockNumber
136144
* Sets a disk item pointer to the specified block.
137145
*/
138-
#define ItemPointerSetBlockNumber(pointer, blockNumber) \
139-
( \
140-
AssertMacro(PointerIsValid(pointer)), \
141-
BlockIdSet(&((pointer)->ip_blkid), blockNumber) \
142-
)
146+
static inline void
147+
ItemPointerSetBlockNumber(ItemPointerData *pointer, BlockNumber blockNumber)
148+
{
149+
Assert(PointerIsValid(pointer));
150+
BlockIdSet(&pointer->ip_blkid, blockNumber);
151+
}
143152

144153
/*
145154
* ItemPointerSetOffsetNumber
146155
* Sets a disk item pointer to the specified offset.
147156
*/
148-
#define ItemPointerSetOffsetNumber(pointer, offsetNumber) \
149-
( \
150-
AssertMacro(PointerIsValid(pointer)), \
151-
(pointer)->ip_posid = (offsetNumber) \
152-
)
157+
static inline void
158+
ItemPointerSetOffsetNumber(ItemPointerData *pointer, OffsetNumber offsetNumber)
159+
{
160+
Assert(PointerIsValid(pointer));
161+
pointer->ip_posid = offsetNumber;
162+
}
153163

154164
/*
155165
* ItemPointerCopy
@@ -158,42 +168,49 @@ typedef ItemPointerData *ItemPointer;
158168
* Should there ever be padding in an ItemPointer this would need to be handled
159169
* differently as it's used as hash key.
160170
*/
161-
#define ItemPointerCopy(fromPointer, toPointer) \
162-
( \
163-
AssertMacro(PointerIsValid(toPointer)), \
164-
AssertMacro(PointerIsValid(fromPointer)), \
165-
*(toPointer) = *(fromPointer) \
166-
)
171+
static inline void
172+
ItemPointerCopy(const ItemPointerData *fromPointer, ItemPointerData *toPointer)
173+
{
174+
Assert(PointerIsValid(toPointer));
175+
Assert(PointerIsValid(fromPointer));
176+
*toPointer = *fromPointer;
177+
}
167178

168179
/*
169180
* ItemPointerSetInvalid
170181
* Sets a disk item pointer to be invalid.
171182
*/
172-
#define ItemPointerSetInvalid(pointer) \
173-
( \
174-
AssertMacro(PointerIsValid(pointer)), \
175-
BlockIdSet(&((pointer)->ip_blkid), InvalidBlockNumber), \
176-
(pointer)->ip_posid = InvalidOffsetNumber \
177-
)
183+
static inline void
184+
ItemPointerSetInvalid(ItemPointerData *pointer)
185+
{
186+
Assert(PointerIsValid(pointer));
187+
BlockIdSet(&pointer->ip_blkid, InvalidBlockNumber);
188+
pointer->ip_posid = InvalidOffsetNumber;
189+
}
178190

179191
/*
180192
* ItemPointerIndicatesMovedPartitions
181193
* True iff the block number indicates the tuple has moved to another
182194
* partition.
183195
*/
184-
#define ItemPointerIndicatesMovedPartitions(pointer) \
185-
( \
186-
ItemPointerGetOffsetNumber(pointer) == MovedPartitionsOffsetNumber && \
187-
ItemPointerGetBlockNumberNoCheck(pointer) == MovedPartitionsBlockNumber \
188-
)
196+
static inline bool
197+
ItemPointerIndicatesMovedPartitions(const ItemPointerData *pointer)
198+
{
199+
return
200+
ItemPointerGetOffsetNumber(pointer) == MovedPartitionsOffsetNumber &&
201+
ItemPointerGetBlockNumberNoCheck(pointer) == MovedPartitionsBlockNumber;
202+
}
189203

190204
/*
191205
* ItemPointerSetMovedPartitions
192206
* Indicate that the item referenced by the itempointer has moved into a
193207
* different partition.
194208
*/
195-
#define ItemPointerSetMovedPartitions(pointer) \
196-
ItemPointerSet((pointer), MovedPartitionsBlockNumber, MovedPartitionsOffsetNumber)
209+
static inline void
210+
ItemPointerSetMovedPartitions(ItemPointerData *pointer)
211+
{
212+
ItemPointerSet(pointer, MovedPartitionsBlockNumber, MovedPartitionsOffsetNumber);
213+
}
197214

198215
/* ----------------
199216
* externs

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy