-- File DBStorageTID.mesa
-- Last edited by
-- MBrown on 1-Mar-81 11:21:34
-- Cattell on January 14, 1983 2:09 pm


DIRECTORY
Basics,
DBCommon,
DBEnvironment USING[InternalError],
PrincOpsUtils;


DBStorageTID: DEFINITIONS
IMPORTS DBEnvironment, PrincOpsUtils = BEGIN
-- This interface contains definitions that relate to tuple IDs (TIDs).


TID: TYPE = LONG CARDINAL;
-- "Pointer" to a tuple in the database. Structure is given by the procedures
--below:

DecomposeTID: PROCEDURE[tid: TID]
RETURNS[--p-- DBCommon.DBPage, --slotIndex-- CARDINAL] = INLINE BEGIN
-- Breaks a TID into the DBPage where the tuple's slot is, and the number of
--the slot on that page.
slotIndex: CARDINAL ←
PrincOpsUtils.BITAND[LOOPHOLE[tid, num Basics.LongNumber].lowbits, TIDSlotMask];
LOOPHOLE[tid, num Basics.LongNumber].lowbits ←
PrincOpsUtils.BITAND[LOOPHOLE[tid, num Basics.LongNumber].lowbits, TIDLowPageMask];
RETURN[tid, slotIndex];
END;--DecomposeTID

ConsTID: PROCEDURE[p: DBCommon.DBPage, slotIndex: CARDINAL]
RETURNS[--tid-- TID] = INLINE BEGIN
-- Makes a TID from the DBPage where the tuple's slot is, and the number of
--the slot on that page.
IF slotIndex > TIDSlotMask THEN ERROR DBEnvironment.InternalError; -- BadSlotIndex
RETURN[p + slotIndex];
END;--ConsTID

NullTID: TID = 0;

-- Masks that define the maximum number of slots allowed per page.
--Must agree with DBSegmentPrivate.BitsUnused.

DBPageIncrement: CARDINAL = 100B;
TIDSlotMask: CARDINAL = DBPageIncrement - 1; --000077B
TIDLowPageMask: CARDINAL = LAST[CARDINAL] - TIDSlotMask; --177700B


END.--DBStorageTID


-- Module History

Created by MBrown on June 10, 1980 3:56 PM
-- Moved TID-related stuff here from DBStoragePrivateA.

Changed by MBrown on September 26, 1980 11:13 AM
-- Defined error code BadSlotIndex.

Changed by MBrown on December 8, 1980 1:48 PM
-- Defined DBPageIncrement, for use in Segment block allocator.

Changed by MBrown on 1-Mar-81 11:22:17
-- InlineDefs -> Inline.

Changed by Cattell on November 10, 1983 2:14 am
-- Inline is gone.