Convert macros to static inline functions (itemptr.h)
authorPeter Eisentraut <[email protected]>
Wed, 13 Jul 2022 12:33:03 +0000 (14:33 +0200)
committerPeter Eisentraut <[email protected]>
Wed, 13 Jul 2022 12:47:36 +0000 (14:47 +0200)
Reviewed-by: Amul Sul <[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/5b558da8-99fb-0a99-83dd-f72f05388517%40enterprisedb.com

src/include/storage/itemptr.h

index 81947bc6575c3c7134c7b54761db004973bbf014..3ec88a68df1148cd160f5ffbf60ad77ce57354e1 100644 (file)
@@ -71,7 +71,7 @@ typedef ItemPointerData *ItemPointer;
 
 
 /* ----------------
- *     support macros
+ *     support functions
  * ----------------
  */
 
@@ -79,77 +79,87 @@ typedef ItemPointerData *ItemPointer;
  * ItemPointerIsValid
  *     True iff the disk item pointer is not NULL.
  */
-#define ItemPointerIsValid(pointer) \
-   ((bool) (PointerIsValid(pointer) && ((pointer)->ip_posid != 0)))
+static inline bool
+ItemPointerIsValid(const ItemPointerData *pointer)
+{
+   return PointerIsValid(pointer) && pointer->ip_posid != 0;
+}
 
 /*
  * ItemPointerGetBlockNumberNoCheck
  *     Returns the block number of a disk item pointer.
  */
-#define ItemPointerGetBlockNumberNoCheck(pointer) \
-( \
-   BlockIdGetBlockNumber(&(pointer)->ip_blkid) \
-)
+static inline BlockNumber
+ItemPointerGetBlockNumberNoCheck(const ItemPointerData *pointer)
+{
+   return BlockIdGetBlockNumber(&pointer->ip_blkid);
+}
 
 /*
  * ItemPointerGetBlockNumber
  *     As above, but verifies that the item pointer looks valid.
  */
-#define ItemPointerGetBlockNumber(pointer) \
-( \
-   AssertMacro(ItemPointerIsValid(pointer)), \
-   ItemPointerGetBlockNumberNoCheck(pointer) \
-)
+static inline BlockNumber
+ItemPointerGetBlockNumber(const ItemPointerData *pointer)
+{
+   Assert(ItemPointerIsValid(pointer));
+   return ItemPointerGetBlockNumberNoCheck(pointer);
+}
 
 /*
  * ItemPointerGetOffsetNumberNoCheck
  *     Returns the offset number of a disk item pointer.
  */
-#define ItemPointerGetOffsetNumberNoCheck(pointer) \
-( \
-   (pointer)->ip_posid \
-)
+static inline OffsetNumber
+ItemPointerGetOffsetNumberNoCheck(const ItemPointerData *pointer)
+{
+   return pointer->ip_posid;
+}
 
 /*
  * ItemPointerGetOffsetNumber
  *     As above, but verifies that the item pointer looks valid.
  */
-#define ItemPointerGetOffsetNumber(pointer) \
-( \
-   AssertMacro(ItemPointerIsValid(pointer)), \
-   ItemPointerGetOffsetNumberNoCheck(pointer) \
-)
+static inline OffsetNumber
+ItemPointerGetOffsetNumber(const ItemPointerData *pointer)
+{
+   Assert(ItemPointerIsValid(pointer));
+   return ItemPointerGetOffsetNumberNoCheck(pointer);
+}
 
 /*
  * ItemPointerSet
  *     Sets a disk item pointer to the specified block and offset.
  */
-#define ItemPointerSet(pointer, blockNumber, offNum) \
-( \
-   AssertMacro(PointerIsValid(pointer)), \
-   BlockIdSet(&((pointer)->ip_blkid), blockNumber), \
-   (pointer)->ip_posid = offNum \
-)
+static inline void
+ItemPointerSet(ItemPointerData *pointer, BlockNumber blockNumber, OffsetNumber offNum)
+{
+   Assert(PointerIsValid(pointer));
+   BlockIdSet(&pointer->ip_blkid, blockNumber);
+   pointer->ip_posid = offNum;
+}
 
 /*
  * ItemPointerSetBlockNumber
  *     Sets a disk item pointer to the specified block.
  */
-#define ItemPointerSetBlockNumber(pointer, blockNumber) \
-( \
-   AssertMacro(PointerIsValid(pointer)), \
-   BlockIdSet(&((pointer)->ip_blkid), blockNumber) \
-)
+static inline void
+ItemPointerSetBlockNumber(ItemPointerData *pointer, BlockNumber blockNumber)
+{
+   Assert(PointerIsValid(pointer));
+   BlockIdSet(&pointer->ip_blkid, blockNumber);
+}
 
 /*
  * ItemPointerSetOffsetNumber
  *     Sets a disk item pointer to the specified offset.
  */
-#define ItemPointerSetOffsetNumber(pointer, offsetNumber) \
-( \
-   AssertMacro(PointerIsValid(pointer)), \
-   (pointer)->ip_posid = (offsetNumber) \
-)
+static inline void
+ItemPointerSetOffsetNumber(ItemPointerData *pointer, OffsetNumber offsetNumber)
+{
+   Assert(PointerIsValid(pointer));
+   pointer->ip_posid = offsetNumber;
+}
 
 /*
  * ItemPointerCopy
@@ -158,42 +168,49 @@ typedef ItemPointerData *ItemPointer;
  * Should there ever be padding in an ItemPointer this would need to be handled
  * differently as it's used as hash key.
  */
-#define ItemPointerCopy(fromPointer, toPointer) \
-( \
-   AssertMacro(PointerIsValid(toPointer)), \
-   AssertMacro(PointerIsValid(fromPointer)), \
-   *(toPointer) = *(fromPointer) \
-)
+static inline void
+ItemPointerCopy(const ItemPointerData *fromPointer, ItemPointerData *toPointer)
+{
+   Assert(PointerIsValid(toPointer));
+   Assert(PointerIsValid(fromPointer));
+   *toPointer = *fromPointer;
+}
 
 /*
  * ItemPointerSetInvalid
  *     Sets a disk item pointer to be invalid.
  */
-#define ItemPointerSetInvalid(pointer) \
-( \
-   AssertMacro(PointerIsValid(pointer)), \
-   BlockIdSet(&((pointer)->ip_blkid), InvalidBlockNumber), \
-   (pointer)->ip_posid = InvalidOffsetNumber \
-)
+static inline void
+ItemPointerSetInvalid(ItemPointerData *pointer)
+{
+   Assert(PointerIsValid(pointer));
+   BlockIdSet(&pointer->ip_blkid, InvalidBlockNumber);
+   pointer->ip_posid = InvalidOffsetNumber;
+}
 
 /*
  * ItemPointerIndicatesMovedPartitions
  *     True iff the block number indicates the tuple has moved to another
  *     partition.
  */
-#define ItemPointerIndicatesMovedPartitions(pointer) \
-( \
-   ItemPointerGetOffsetNumber(pointer) == MovedPartitionsOffsetNumber && \
-   ItemPointerGetBlockNumberNoCheck(pointer) == MovedPartitionsBlockNumber \
-)
+static inline bool
+ItemPointerIndicatesMovedPartitions(const ItemPointerData *pointer)
+{
+   return
+       ItemPointerGetOffsetNumber(pointer) == MovedPartitionsOffsetNumber &&
+       ItemPointerGetBlockNumberNoCheck(pointer) == MovedPartitionsBlockNumber;
+}
 
 /*
  * ItemPointerSetMovedPartitions
  *     Indicate that the item referenced by the itempointer has moved into a
  *     different partition.
  */
-#define ItemPointerSetMovedPartitions(pointer) \
-   ItemPointerSet((pointer), MovedPartitionsBlockNumber, MovedPartitionsOffsetNumber)
+static inline void
+ItemPointerSetMovedPartitions(ItemPointerData *pointer)
+{
+   ItemPointerSet(pointer, MovedPartitionsBlockNumber, MovedPartitionsOffsetNumber);
+}
 
 /* ----------------
  *     externs