| /*------------------------------------------------------------------------- |
| * |
| * pos.h |
| * POSTGRES "position" definitions. |
| * |
| * |
| * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group |
| * Portions Copyright (c) 1994, Regents of the University of California |
| * |
| * $PostgreSQL: pgsql/src/include/storage/pos.h,v 1.23 2009/01/01 17:24:01 momjian Exp $ |
| * |
| *------------------------------------------------------------------------- |
| */ |
| #ifndef POS_H |
| #define POS_H |
| |
| |
| /* |
| * a 'position' used to be <pagenumber, offset> in postgres. this has |
| * been changed to just <offset> as the notion of having multiple pages |
| * within a block has been removed. |
| * |
| * the 'offset' abstraction is somewhat confusing. it is NOT a byte |
| * offset within the page; instead, it is an offset into the line |
| * pointer array contained on every page that store (heap or index) |
| * tuples. |
| */ |
| typedef bits16 PositionIdData; |
| typedef PositionIdData *PositionId; |
| |
| /* ---------------- |
| * support macros |
| * ---------------- |
| */ |
| |
| /* |
| * PositionIdIsValid |
| * True iff the position identifier is valid. |
| */ |
| #define PositionIdIsValid(positionId) \ |
| PointerIsValid(positionId) |
| |
| /* |
| * PositionIdSetInvalid |
| * Make an invalid position. |
| */ |
| #define PositionIdSetInvalid(positionId) \ |
| *(positionId) = (bits16) 0 |
| |
| /* |
| * PositionIdSet |
| * Sets a position identifier to the specified value. |
| */ |
| #define PositionIdSet(positionId, offsetNumber) \ |
| *(positionId) = (offsetNumber) |
| |
| /* |
| * PositionIdGetOffsetNumber |
| * Retrieve the offset number from a position identifier. |
| */ |
| #define PositionIdGetOffsetNumber(positionId) \ |
| ((OffsetNumber) *(positionId)) |
| |
| #endif /* POS_H */ |