head 1.12; access; symbols Version_2_1:1.8 Version_2:1.7 C_Demo_1:1.4; locks; strict; comment @ * @; 1.12 date 92.03.04.22.44.55; author mer; state Exp; branches; next 1.11; 1.11 date 91.07.29.07.09.45; author mer; state Exp; branches; next 1.10; 1.10 date 91.05.01.02.50.25; author cimarron; state Exp; branches; next 1.9; 1.9 date 91.04.28.09.15.25; author cimarron; state Exp; branches; next 1.8; 1.8 date 90.08.17.08.53.28; author cimarron; state Exp; branches; next 1.7; 1.7 date 90.02.08.14.44.21; author hong; state Version_2; branches; next 1.6; 1.6 date 89.09.25.11.25.43; author cimarron; state Exp; branches; next 1.5; 1.5 date 89.09.21.19.12.41; author hirohama; state Exp; branches; next 1.4; 1.4 date 89.09.05.17.07.23; author mao; state C_Demo_1; branches; next 1.3; 1.3 date 89.04.12.19.54.43; author dillon; state Exp; branches; next 1.2; 1.2 date 89.02.02.17.49.20; author hirohama; state Stab; branches; next 1.1; 1.1 date 89.01.17.05.54.21; author cimarron; state Exp; branches; next ; desc @@ 1.12 log @initialize all bytes when setting an item pointer to invalid @ text @/* ---------------------------------------------------------------- * FILE * itemptr.h * * DESCRIPTION * POSTGRES disk item pointer definitions. * * IDENTIFICATION * $Header: /users/mer/pg/src/lib/H/storage/RCS/itemptr.h,v 1.11 1991/07/29 07:09:45 mer Exp mer $ * ---------------------------------------------------------------- */ #ifndef ItemPtrIncluded /* Include this file only once */ #define ItemPtrIncluded 1 #define ITEMPTR_H "$Header: /users/mer/pg/src/lib/H/storage/RCS/itemptr.h,v 1.11 1991/07/29 07:09:45 mer Exp mer $" #include "tmp/c.h" #include "storage/block.h" #include "storage/off.h" #include "storage/pagenum.h" #include "storage/page.h" #include "storage/part.h" #include "storage/pos.h" typedef struct ItemPointerData { BlockIdData blockData; PositionIdData positionData; } ItemPointerData; typedef ItemPointerData *ItemPointer; /* ---------------- * support macros * ---------------- */ /* * ItemPointerIsUserDefined -- * True iff the disk item pointer is in a user defined format. */ #define ItemPointerIsUserDefined(pointer) \ ((bool) ((pointer)->blockData.data[0] & 0x8000)) /* * ItemPointerIsValid -- * True iff the disk item pointer is not NULL. * * Note: * Assumes that the disk item pointer is not in a user defined format. */ #define ItemPointerIsValid(pointer) \ ((bool) (PointerIsValid(pointer) && \ (! ItemPointerIsUserDefined(pointer)) && \ ((pointer)->positionData != 0))) /* * ItemPointerGetBlockNumber -- * Returns the block number of a disk item pointer. * * Note: * Assumes that the disk item pointer is not in a user defined format. */ #define ItemPointerGetBlockNumber(pointer) \ (AssertMacro(ItemPointerIsValid(pointer)) ? \ BlockIdGetBlockNumber(&(pointer)->blockData) : (BlockNumber) 0) /* * ItemPointerGetPageNumber -- * Returns the page number of a disk item pointer. * * Note: * Assumes that the disk item pointer is not in a user defined format. */ #define ItemPointerGetPageNumber(pointer, partition) \ (AssertMacro(ItemPointerIsValid(pointer)) ? \ PositionIdGetPageNumber(&(pointer)->positionData, partition) : \ (PageNumber) 0) /* * ItemPointerGetOffsetNumber -- * Returns the offset number of a disk item pointer. * * Note: * Assumes that the disk item pointer is not in a user defined format. */ #define ItemPointerGetOffsetNumber(pointer, partition) \ (AssertMacro(ItemPointerIsValid(pointer)) ? \ PositionIdGetOffsetNumber(&(pointer)->positionData, partition) : \ (OffsetNumber) 0) /* * ItemPointerGetOffsetIndex -- * Returns the offset index of a disk item pointer. * * Note: * Assumes that the disk item pointer is not in a user defined format. */ #define ItemPointerGetOffsetIndex(pointer, partition) \ (AssertMacro(ItemPointerIsValid(pointer)) ? \ ItemPointerGetOffsetNumber(pointer, partition) - 1 : \ (OffsetIndex) 0) /* * ItemPointerSet -- * Sets a disk item pointer to the specified block, page, and offset. * * Note: * Assumes that the disk item pointer is not NULL. */ #define ItemPointerSet(pointer, partition, blockNumber, pageNumber, offNum) \ Assert(PointerIsValid(pointer)); \ BlockIdSet(&(pointer)->blockData, blockNumber); \ PositionIdSet(&(pointer)->positionData, partition, pageNumber, offNum) /* * ItemPointerCopy -- * Copies the contents of one disk item pointer to another. * * Note: * Assumes that the disk item pointer is not NULL. */ #define ItemPointerCopy(fromPointer, toPointer) \ Assert(PointerIsValid(toPointer)); \ Assert(PointerIsValid(fromPointer)); \ *(toPointer) = *(fromPointer) /* * ItemPointerSetInvalid -- * Sets a disk item pointer to be invalid. * * Note: * Assumes that the disk item pointer is not NULL. * * XXX byte ordering */ #define ItemPointerSetInvalid(pointer) \ Assert(PointerIsValid(pointer)); \ (pointer)->blockData.data[0] &= 0x7fff; \ (pointer)->blockData.data[1] = 0; \ (pointer)->positionData = 0 /* * ItemPointerSimpleGetPageNumber -- * Returns the page number of a "simple" disk item pointer. * * Note: * Assumes that the disk item pointer is not in a user defined format. */ #define ItemPointerSimpleGetPageNumber(pointer) \ ItemPointerGetPageNumber(pointer, SinglePagePartition) /* * ItemPointerSimpleGetOffsetNumber -- * Returns the offset number of a "simple" disk item pointer. * * Note: * Assumes that the disk item pointer is not in a user defined format. */ #define ItemPointerSimpleGetOffsetNumber(pointer) \ ItemPointerGetOffsetNumber(pointer, SinglePagePartition) /* * ItemPointerSimpleGetOffsetIndex -- * Returns the offset index of a "simple" disk item pointer. * * Note: * Assumes that the disk item pointer is not in a user defined format. */ #define ItemPointerSimpleGetOffsetIndex(pointer) \ ItemPointerGetOffsetIndex(pointer, SinglePagePartition) /* * ItemPointerSimpleSet -- * Sets a disk item pointer to the specified block and offset. * * Note: * Assumes that the disk item pointer is not NULL. */ #define ItemPointerSimpleSet(pointer, blockNumber, offsetNumber) \ ItemPointerSet(pointer, SinglePagePartition, blockNumber, \ FirstPageNumber, offsetNumber) /* * Macros ItemPointerGetBlockP ItemPointerGetPositionP are used to * to set block and position data to invalid in the lock managaer */ #define ItemPointerBlockId(pointer) &((pointer)->blockData) #define ItemPointerPositionId(pointer) &((pointer)->positionData) /* ---------------- * externs * ---------------- */ /* * ItemPointerEquals -- * Returns true if both item pointers point to the same item, * otherwise returns false. * * Note: * Assumes that the disk item pointers are not NULL. */ extern bool ItemPointerEquals ARGS(( ItemPointer pointer1, ItemPointer pointer2 )); /* * ItemPointerGetLogicalPageNumber -- * Returns the logical page number in a disk item pointer. * * Note: * Assumes that the disk item pointer is not in a user defined format. */ extern LogicalPageNumber ItemPointerGetLogicalPageNumber ARGS(( ItemPointer pointer, PagePartition partition )); /* * ItemPointerSetLogicalPageNumber -- * Sets a disk item pointer to the specified logical page number. * * Note: * Assumes that the disk item pointer is not NULL. */ extern void ItemPointerSetLogicalPageNumber ARGS(( ItemPointer pointer, PagePartition partition, LogicalPageNumber pageNumber )); #endif /* !defined(ItemPtrIncluded) */ @ 1.11 log @BlockId and PositionId macros @ text @d9 1 a9 1 * $Header: /users/mer/postgres/src/lib/H/storage/RCS/itemptr.h,v 1.10 91/05/01 02:50:25 cimarron Exp Locker: mer $ d16 1 a16 1 #define ITEMPTR_H "$Header: /users/mer/postgres/src/lib/H/storage/RCS/itemptr.h,v 1.10 91/05/01 02:50:25 cimarron Exp Locker: mer $" d140 1 @ 1.10 log @round II of converting simple functions to macros + code cleaning in general @ text @d9 1 a9 1 * $Header$ d16 1 a16 1 #define ITEMPTR_H "$Header: RCS/itemptr.h,v 1.9 91/04/28 09:15:25 cimarron Exp Locker: cimarron $" d182 8 @ 1.9 log @Converted IsValid code into macros and added an improved NodeIsType scheme @ text @d1 5 a5 2 /* * itemptr.h -- d7 4 d16 1 a16 4 /* * Identification: */ #define ITEMPTR_H "$Header: RCS/itemptr.h,v 1.8 90/08/17 08:53:28 cimarron Exp Locker: cimarron $" a17 1 d34 4 d64 3 a66 5 extern BlockNumber ItemPointerGetBlockNumber ARGS(( ItemPointer pointer )); d75 4 a78 6 extern PageNumber ItemPointerGetPageNumber ARGS(( ItemPointer pointer, PagePartition partition )); d87 4 a90 6 extern OffsetNumber ItemPointerGetOffsetNumber ARGS(( ItemPointer pointer, PagePartition partition )); d99 4 a102 6 extern OffsetIndex ItemPointerGetOffsetIndex ARGS(( ItemPointer pointer, PagePartition partition )); d111 4 a114 9 extern void ItemPointerSet ARGS(( ItemPointer pointer, PagePartition partition, BlockNumber blockNumber, PageNumber pageNumber, OffsetNumber offsetNumber )); d123 4 a126 6 extern void ItemPointerCopy ARGS(( ItemPointer fromPointer, ItemPointer toPointer )); d134 2 d137 4 a140 5 extern void ItemPointerSetInvalid ARGS(( ItemPointer pointer )); d149 2 a150 5 extern PageNumber ItemPointerSimpleGetPageNumber ARGS(( ItemPointer pointer )); d159 2 a160 5 extern OffsetNumber ItemPointerSimpleGetOffsetNumber ARGS(( ItemPointer pointer )); d169 2 a170 5 extern OffsetIndex ItemPointerSimpleGetOffsetIndex ARGS(( ItemPointer pointer )); d179 3 a181 7 extern void ItemPointerSimpleSet ARGS(( ItemPointer pointer, BlockNumber blockNumber, OffsetNumber offsetNumber )); d183 4 @ 1.8 log @added pathnames to #include statements @ text @d12 1 a12 1 #define ITEMPTR_H "$Header: RCS/itemptr.h,v 1.7 90/02/08 14:44:21 hong Version_2 Locker: cimarron $" d35 2 a36 5 extern bool ItemPointerIsUserDefined ARGS(( ItemPointer pointer )); d45 4 a48 5 extern bool ItemPointerIsValid ARGS(( ItemPointer pointer )); @ 1.7 log @fix for hermes to reduce levels of #include nesting. @ text @d12 1 a12 1 #define ITEMPTR_H "$Header: RCS/itemptr.h,v 1.6 89/09/25 11:25:43 cimarron Exp $" a13 3 #ifndef C_H #include "c.h" #endif d15 8 a22 18 #ifndef BLOCK_H # include "block.h" #endif #ifndef OFF_H # include "off.h" #endif #ifndef PAGENUM_H # include "pagenum.h" #endif #ifndef PAGE_H # include "page.h" #endif #ifndef PART_H # include "part.h" #endif #ifndef POS_H # include "pos.h" #endif @ 1.6 log @moved dynamic symbol stuff to syms.h @ text @d12 1 a12 1 #define ITEMPTR_H "$Header: RCS/itemptr.h,v 1.5 89/09/21 19:12:41 hirohama Exp $" d26 3 @ 1.5 log @added ...SYMBOLS declarations miscellaneous cleanup @ text @d12 1 a12 1 #define ITEMPTR_H "$Header: RCS/itemptr.h,v 1.4 89/09/05 17:07:23 mao C_Demo_1 Locker: hirohama $" a259 18 #define ITEMPTR_SYMBOLS \ SymbolDecl(ItemPointerIsUserDefined, "_ItemPointerIsUserDefined"), \ SymbolDecl(ItemPointerIsValid, "_ItemPointerIsValid"), \ SymbolDecl(ItemPointerGetBlockNumber, "_ItemPointerGetBlockNumber"), \ SymbolDecl(ItemPointerGetPageNumber, "_ItemPointerGetPageNumber"), \ SymbolDecl(ItemPointerGetOffsetNumber, "_ItemPointerGetOffsetNumber"), \ SymbolDecl(ItemPointerGetOffsetIndex, "_ItemPointerGetOffsetIndex"), \ SymbolDecl(ItemPointerSet, "_ItemPointerSet"), \ SymbolDecl(ItemPointerCopy, "_ItemPointerCopy"), \ SymbolDecl(ItemPointerSetInvalid, "_ItemPointerSetInvalid"), \ SymbolDecl(ItemPointerSimpleGetPageNumber, "_ItemPointerSimpleGetPageNumber"), \ SymbolDecl(ItemPointerSimpleGetOffsetNumber, "_ItemPointerSimpleGetOffsetNumber"), \ SymbolDecl(ItemPointerSimpleGetOffsetIndex, "_ItemPointerSimpleGetOffsetIndex"), \ SymbolDecl(ItemPointerSimpleSet, "_ItemPointerSimpleSet"), \ SymbolDecl(ItemPointerEquals, "_ItemPointerEquals"), \ SymbolDecl(ItemPointerGetLogicalPageNumber, "_ItemPointerGetLogicalPageNumber"), \ SymbolDecl(ItemPointerSetLogicalPageNumber, "_ItemPointerSetLogicalPageNumber") @ 1.4 log @Working version of C-only demo @ text @d4 6 a9 1 * a10 1 * $Header: /usr6/postgres/mao/postgres/src/lib/H/RCS/itemptr.h,v 1.3 89/04/12 19:54:43 dillon Exp $ d12 1 a13 3 #ifndef ObjPtrIncluded /* Include this file only once. */ #define ObjPtrIncluded 1 d18 15 a32 5 #include "block.h" #include "off.h" #include "pagenum.h" #include "part.h" #include "pos.h" d261 19 a279 1 #endif /* !defined(ObjPtrIncluded) */ @ 1.3 log @c.h @ text @d6 1 a6 1 * $Header: /usr6/postgres/dillon/ptree/src/lib/H/RCS/itemptr.h,v 1.2 89/02/02 17:49:20 hirohama Stab $ @ 1.2 log @removed copyright @ text @d6 1 a6 1 * $Header: itemptr.h,v 1.1 89/01/17 05:54:21 hirohama Locked $ d12 1 d14 1 @ 1.1 log @Initial revision @ text @a0 27 ; /* ; * ; * POSTGRES Data Base Management System ; * ; * Copyright (c) 1988 Regents of the University of California ; * ; * Permission to use, copy, modify, and distribute this software and its ; * documentation for educational, research, and non-profit purposes and ; * without fee is hereby granted, provided that the above copyright ; * notice appear in all copies and that both that copyright notice and ; * this permission notice appear in supporting documentation, and that ; * the name of the University of California not be used in advertising ; * or publicity pertaining to distribution of the software without ; * specific, written prior permission. Permission to incorporate this ; * software into commercial products can be obtained from the Campus ; * Software Office, 295 Evans Hall, University of California, Berkeley, ; * Ca., 94720 provided only that the the requestor give the University ; * of California a free licence to any derived software for educational ; * and research purposes. The University of California makes no ; * representations about the suitability of this software for any ; * purpose. It is provided "as is" without express or implied warranty. ; * ; */ d6 1 a6 1 * $Header: itemptr.h,v 1.1 88/11/11 16:37:11 postgres Exp $ @