home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / storage / page / itemptr.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  1.9 KB  |  71 lines

  1. /*
  2.  * itemptr.c --
  3.  *    POSTGRES disk item pointer code.
  4.  */
  5.  
  6. #include "tmp/c.h"
  7.  
  8. #include "storage/block.h"
  9. #include "storage/off.h"
  10. #include "storage/page.h"
  11. #include "storage/itemptr.h"
  12. #include "storage/bufpage.h"
  13.  
  14. RcsId("$Header: /private/postgres/src/storage/page/RCS/itemptr.c,v 1.9 1991/05/01 02:51:29 cimarron Exp $");
  15.  
  16. bool
  17. ItemPointerEquals(pointer1, pointer2)
  18.     ItemPointer pointer1;
  19.     ItemPointer    pointer2;
  20. {
  21.     if (ItemPointerGetBlockNumber(pointer1) ==
  22.         ItemPointerGetBlockNumber(pointer2) &&
  23.         ItemPointerGetOffsetNumber(pointer1, SinglePagePartition) ==
  24.         ItemPointerGetOffsetNumber(pointer2, SinglePagePartition))
  25.     return(true);
  26.     else
  27.         return(false);
  28. }
  29.  
  30. LogicalPageNumber
  31. ItemPointerGetLogicalPageNumber(pointer, partition)
  32.     ItemPointer        pointer;
  33.     PagePartition    partition;
  34. {
  35.     int16    pagesPerBlock;    /* XXX use a named type */
  36.     
  37.     Assert(ItemPointerIsValid(pointer));
  38.     
  39.     pagesPerBlock = PagePartitionGetPagesPerBlock(partition);
  40.     if (pagesPerBlock == 1) {
  41.     return (1 + ItemPointerGetBlockNumber(pointer));
  42.     }
  43.     return (1 + ItemPointerGetPageNumber(pointer, partition) +
  44.         pagesPerBlock * ItemPointerGetBlockNumber(pointer));
  45. }
  46.  
  47. void
  48. ItemPointerSetLogicalPageNumber(pointer, partition, pageNumber)
  49.     ItemPointer        pointer;
  50.     PagePartition    partition;
  51.     LogicalPageNumber    pageNumber;
  52. {
  53.     int16    pagesPerBlock;    /* XXX use a named type */
  54.     
  55.     Assert(PointerIsValid(pointer));
  56.     Assert(LogicalPageNumberIsValid(pageNumber));
  57.     
  58.     pagesPerBlock = PagePartitionGetPagesPerBlock(partition);
  59.     
  60.     if (pagesPerBlock == 1) {
  61.     ItemPointerSimpleSet(pointer,
  62.                  (LogicalPageNumber)(-1 + pageNumber),
  63.                  InvalidOffsetNumber);
  64.     } else {
  65.     ItemPointerSet(pointer, partition,
  66.                (LogicalPageNumber)(-1 + pageNumber) / pagesPerBlock,
  67.                (LogicalPageNumber)(-1 + pageNumber) % pagesPerBlock,
  68.                InvalidOffsetNumber);
  69.     }
  70. }
  71.