off.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*-------------------------------------------------------------------------
  2. *
  3. * off.h
  4. * POSTGRES disk "offset" definitions.
  5. *
  6. *
  7. * Portions Copyright (c) 1996-2016, 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. #define OffsetNumberMask (0xffff) /* valid uint16 bits */
  28. /* ----------------
  29. * support macros
  30. * ----------------
  31. */
  32. /*
  33. * OffsetNumberIsValid
  34. * True iff the offset number is valid.
  35. */
  36. #define OffsetNumberIsValid(offsetNumber) \
  37. ((bool) ((offsetNumber != InvalidOffsetNumber) && \
  38. (offsetNumber <= MaxOffsetNumber)))
  39. /*
  40. * OffsetNumberNext
  41. * OffsetNumberPrev
  42. * Increments/decrements the argument. These macros look pointless
  43. * but they help us disambiguate the different manipulations on
  44. * OffsetNumbers (e.g., sometimes we subtract one from an
  45. * OffsetNumber to move back, and sometimes we do so to form a
  46. * real C array index).
  47. */
  48. #define OffsetNumberNext(offsetNumber) \
  49. ((OffsetNumber) (1 + (offsetNumber)))
  50. #define OffsetNumberPrev(offsetNumber) \
  51. ((OffsetNumber) (-1 + (offsetNumber)))
  52. #endif /* OFF_H */