off.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*-------------------------------------------------------------------------
  2. *
  3. * off.h
  4. * POSTGRES disk "offset" definitions.
  5. *
  6. *
  7. * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
  8. * Portions Copyright (c) 1994, Regents of the University of California
  9. *
  10. * src/include/storage/off.h
  11. *
  12. *-------------------------------------------------------------------------
  13. */
  14. #ifndef OFF_H
  15. #define OFF_H
  16. #include "storage/itemid.h"
  17. /*
  18. * OffsetNumber:
  19. *
  20. * this is a 1-based index into the linp (ItemIdData) array in the
  21. * header of each disk page.
  22. */
  23. typedef uint16 OffsetNumber;
  24. #define InvalidOffsetNumber ((OffsetNumber) 0)
  25. #define FirstOffsetNumber ((OffsetNumber) 1)
  26. #define MaxOffsetNumber ((OffsetNumber) (BLCKSZ / sizeof(ItemIdData)))
  27. /* ----------------
  28. * support macros
  29. * ----------------
  30. */
  31. /*
  32. * OffsetNumberIsValid
  33. * True iff the offset number is valid.
  34. */
  35. #define OffsetNumberIsValid(offsetNumber) \
  36. ((bool) ((offsetNumber != InvalidOffsetNumber) && \
  37. (offsetNumber <= MaxOffsetNumber)))
  38. /*
  39. * OffsetNumberNext
  40. * OffsetNumberPrev
  41. * Increments/decrements the argument. These macros look pointless
  42. * but they help us disambiguate the different manipulations on
  43. * OffsetNumbers (e.g., sometimes we subtract one from an
  44. * OffsetNumber to move back, and sometimes we do so to form a
  45. * real C array index).
  46. */
  47. #define OffsetNumberNext(offsetNumber) \
  48. ((OffsetNumber) (1 + (offsetNumber)))
  49. #define OffsetNumberPrev(offsetNumber) \
  50. ((OffsetNumber) (-1 + (offsetNumber)))
  51. #endif /* OFF_H */