head     1.5;
branch   ;
access   ;
symbols  Version_2_1:1.5 C_Demo_1:1.3;
locks    ; strict;
comment  @ * @;


1.5
date     90.09.25.16.14.44;  author kemnitz;  state Exp;
branches ;
next     1.4;

1.4
date     90.01.23.16.34.06;  author mao;  state Exp;
branches ;
next     1.3;

1.3
date     89.09.05.16.57.14;  author mao;  state C_Demo_1;
branches ;
next     1.2;

1.2
date     89.03.22.03.19.32;  author muir;  state Stab;
branches ;
next     1.1;

1.1
date     89.01.17.05.52.13;  author cimarron;  state Exp;
branches ;
next     ;


desc
@@


1.5
log
@Updating from revision 1.4 to revision 1.5
@
text
@

/* ----------------------------------------------------------------
 * bthdr.c --
 *	B-Tree node page-header code.
 * ----------------------------------------------------------------
 */

#include "access/btree.h"

RcsId("$Header: RCS/bthdr.c,v 1.5 90/08/13 17:23:38 cimarron Exp $");

/*|----------------------------------------------------------------
 *| bthdr.c --
 *|	Page Get BTreeHeader
 *|	Page Get BTreeHeaderType
 *|	Page IsLeaf BTreePage
 *|	BTreeHeaderGet
 *|	BTreeHeader Get Link ItemPointer
 *|	BTreeHeader Get Prev ItemPointer
 *|     BTreeHeaderSet
 *|	BTreeHeader Set Link ItemPointer
 *|	BTreeHeader Set Prev ItemPointer
 *|----------------------------------------------------------------
 */

/* ----------------------------------------------------------------
 *	page functions
 * ----------------------------------------------------------------
 */

/* ----------------
 *	Page Get BTreeHeader
 * ----------------
 */

/**** xxref:
 *           DumpBTreePage
 *           SimpleDumpBTreePage
 *           BTreeBlockInit
 *           PageGetBTreeHeaderType
 *           PageIsLeafBTreePage
 *           BTreeRearrange
 *           BTreePageGetLinkItemPointer
 *           BTreePageGetPrevItemPointer
 *           BTreePageSetLinkItemPointer
 *           BTreePageSetPrevItemPointer
 *           BTreeSearchKeyScan
 ****/
BTreeHeader
PageGetBTreeHeader(page)
   Page	page;
{
   Assert(PageIsValid(page));
   return (BTreeHeader)
      PageGetSpecialPointer(page);
}

/* ---------------
 *	Page Get BTreeHeaderType
 * ---------------
 */

/**** xxref:
 *           ItemPointerGetBTreeNode
 *           RelationFormBTreeNode
 ****/
BTreeHeaderTypeData
PageGetBTreeHeaderType(page)
   Page page;
{
   BTreeHeader header;

   header = PageGetBTreeHeader(page);
   return (BTreeHeaderTypeData)
      header->type;
}

/* ----------------
 *	Page IsLeaf BTreePage
 * ----------------
 */

/**** xxref:
 *           DumpBTreePage
 *           SimpleDumpBTreePage
 *           BTreeNodeInsert
 ****/
bool
PageIsLeafBTreePage(page)
   Page	page;
{
   BTreeHeader header;

   header = PageGetBTreeHeader(page);
   return (bool)
      (header->type == BTREE_LEAF_HEADER);
}

/* ----------------
 *	BTreeHeaderGet
 *
 *	this is a macro used to simplify the various
 *	header accessor functions below.
 * ----------------
 */

#define BTreeHeaderGet(header, field)			\
{								\
   ItemPointer pointer;						\
   pointer = LintCast(ItemPointer, palloc(sizeof *pointer));	\
   MemoryCopy((char *) pointer,		      /* to */		\
	      (char *) &((header)->field),    /* from */	\
	      (int) sizeof(ItemPointerData)); /* size */	\
   return pointer;						\
}

/* ----------------
 *	BTreeHeader Get Link ItemPointer
 * ----------------
 */

/**** xxref:
 *           DumpBTreePage
 *           SimpleDumpBTreePage
 *           BTreeRearrange
 *           BTreePageGetLinkItemPointer
 *           BTreeSearchKeyScan
 ****/
ItemPointer
BTreeHeaderGetLinkItemPointer(header)
   BTreeHeader	header;
{
   BTreeHeaderGet(header,linkData);
}

/* ----------------
 *	BTreeHeader Get Prev ItemPointer
 * ----------------
 */

/**** xxref:
 *           DumpBTreePage
 *           SimpleDumpBTreePage
 *           BTreePageGetPrevItemPointer
 ****/
ItemPointer
BTreeHeaderGetPrevItemPointer(header)
   BTreeHeader	header;
{
   BTreeHeaderGet(header,prevData);
}

/* ----------------
 *      BTreeHeaderSet
 *
 *	this is a macro used to simplify the 
 *	header field assignment functions below.
 * ----------------
 */

#define	BTreeHeaderSet(header,link,field)			\
{								\
   if (ItemPointerIsValid(link))				\
      MemoryCopy((char *) &((header)->field), 			\
		 (char *) link,					\
		 (int) sizeof(ItemPointerData));		\
   else								\
      ItemPointerSetInvalid(&((header)->field));		\
}

/* ----------------
 *	BTreeHeader Set Link ItemPointer
 * ----------------
 */

/**** xxref:
 *           BTreeBlockInit
 *           BTreeRearrange
 *           BTreePageSetLinkItemPointer
 ****/
void
BTreeHeaderSetLinkItemPointer(header, link)
   BTreeHeader	header;
   ItemPointer	link;
{
   BTreeHeaderSet(header,link,linkData);
}


/* ----------------
 *	BTreeHeader Set Prev ItemPointer
 * ----------------
 */

/**** xxref:
 *           BTreeBlockInit
 *           BTreeRearrange
 *           BTreePageSetPrevItemPointer
 ****/
void
BTreeHeaderSetPrevItemPointer(header, link)
   BTreeHeader	header;
   ItemPointer	link;
{
   BTreeHeaderSet(header,link,prevData);
}
@


1.4
log
@fix white space so vi -t works
@
text
@d9 1
a9 1
#include "btree.h"
d11 1
a11 1
RcsId("$Header: RCS/bthdr.c,v 1.3 89/09/05 16:57:14 mao C_Demo_1 Locker: mao $");
@


1.3
log
@Working version of C-only demo
@
text
@d11 1
a11 1
RcsId("$Header: /usr6/postgres/mao/postgres/src/access/index-btree/RCS/bthdr.c,v 1.2 89/03/22 03:19:32 muir Stab $");
d50 3
a52 3
BTreeHeader FUNCTION
   PageGetBTreeHeader(page)
Page	page;
d68 3
a70 3
BTreeHeaderTypeData FUNCTION
   PageGetBTreeHeaderType(page)
Page page;
d89 3
a91 3
bool FUNCTION
   PageIsLeafBTreePage(page)
Page	page;
d130 3
a132 3
ItemPointer FUNCTION
   BTreeHeaderGetLinkItemPointer(header)
BTreeHeader	header;
d147 3
a149 3
ItemPointer FUNCTION
   BTreeHeaderGetPrevItemPointer(header)
BTreeHeader	header;
d182 4
a185 4
void FUNCTION
   BTreeHeaderSetLinkItemPointer(header, link)
BTreeHeader	header;
ItemPointer	link;
d201 4
a204 4
void FUNCTION
   BTreeHeaderSetPrevItemPointer(header, link)
BTreeHeader	header;
ItemPointer	link;
@


1.2
log
@copyright delete
@
text
@d11 1
a11 1
RcsId("$Header: bthdr.c,v 1.1 89/01/17 05:52:13 muir Locked $");
@


1.1
log
@Initial revision
@
text
@a1 23
/*
 * 
 * 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.
 * 
 */
a2 2


d11 1
a11 1
RcsId("$Header: bthdr.c,v 1.1 88/11/11 16:35:50 postgres Exp $");
@
