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
* 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