itemptr.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * itemptr.h
  4.  *   POSTGRES disk item pointer definitions.
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: itemptr.h,v 1.11 1999/05/25 16:14:42 momjian Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. #ifndef ITEMPTR_H
  14. #define ITEMPTR_H
  15. #include <storage/off.h>
  16. #include <storage/block.h>
  17. /*
  18.  * ItemPointer:
  19.  *
  20.  * this is a pointer to an item on another disk page in the same file.
  21.  * blkid tells us which block, posid tells us which entry in the linp
  22.  * (ItemIdData) array we want.
  23.  */
  24. typedef struct ItemPointerData
  25. {
  26. BlockIdData ip_blkid;
  27. OffsetNumber ip_posid;
  28. } ItemPointerData;
  29. typedef ItemPointerData *ItemPointer;
  30. /* ----------------
  31.  * support macros
  32.  * ----------------
  33.  */
  34. /*
  35.  * ItemPointerIsValid
  36.  * True iff the disk item pointer is not NULL.
  37.  */
  38. #define ItemPointerIsValid(pointer) 
  39. ((bool) (PointerIsValid(pointer) && ((pointer)->ip_posid != 0)))
  40. /*
  41.  * ItemPointerGetBlockNumber
  42.  * Returns the block number of a disk item pointer.
  43.  */
  44. #define ItemPointerGetBlockNumber(pointer) 
  45. AssertMacro(ItemPointerIsValid(pointer)), 
  46. BlockIdGetBlockNumber(&(pointer)->ip_blkid) 
  47. )
  48. /*
  49.  * ItemPointerGetOffsetNumber
  50.  * Returns the offset number of a disk item pointer.
  51.  */
  52. #define ItemPointerGetOffsetNumber(pointer) 
  53. AssertMacro(ItemPointerIsValid(pointer)), 
  54. (pointer)->ip_posid 
  55. )
  56. /*
  57.  * ItemPointerSet
  58.  * Sets a disk item pointer to the specified block and offset.
  59.  */
  60. #define ItemPointerSet(pointer, blockNumber, offNum) 
  61. AssertMacro(PointerIsValid(pointer)), 
  62. BlockIdSet(&((pointer)->ip_blkid), blockNumber), 
  63. (pointer)->ip_posid = offNum 
  64. )
  65. /*
  66.  * ItemPointerSetBlockNumber
  67.  * Sets a disk item pointer to the specified block.
  68.  */
  69. #define ItemPointerSetBlockNumber(pointer, blockNumber) 
  70. AssertMacro(PointerIsValid(pointer)), 
  71. BlockIdSet(&((pointer)->ip_blkid), blockNumber) 
  72. )
  73. /*
  74.  * ItemPointerSetOffsetNumber
  75.  * Sets a disk item pointer to the specified offset.
  76.  */
  77. #define ItemPointerSetOffsetNumber(pointer, offsetNumber) 
  78. AssertMacro(PointerIsValid(pointer)), 
  79. (pointer)->ip_posid = (offsetNumber) 
  80. )
  81. /*
  82.  * ItemPointerCopy
  83.  * Copies the contents of one disk item pointer to another.
  84.  */
  85. #define ItemPointerCopy(fromPointer, toPointer) 
  86. AssertMacro(PointerIsValid(toPointer)), 
  87. AssertMacro(PointerIsValid(fromPointer)), 
  88. *(toPointer) = *(fromPointer) 
  89. )
  90. /*
  91.  * ItemPointerSetInvalid
  92.  * Sets a disk item pointer to be invalid.
  93.  */
  94. #define ItemPointerSetInvalid(pointer) 
  95. AssertMacro(PointerIsValid(pointer)), 
  96. BlockIdSet(&((pointer)->ip_blkid), InvalidBlockNumber), 
  97. (pointer)->ip_posid = InvalidOffsetNumber 
  98. )
  99. /* ----------------
  100.  * externs
  101.  * ----------------
  102.  */
  103. extern bool ItemPointerEquals(ItemPointer pointer1, ItemPointer pointer2);
  104. #endif  /* ITEMPTR_H */