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
This commit is contained in:
Peter Eisentraut 2022-07-13 14:33:03 +02:00
parent e1df03b80d
commit aeb767ca0b

View File

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