<> <> <> <> <> <<>> <> <> <> DIRECTORY DBCommon USING[DBPage, Segment, TID], DBIndex USING [Core, Page, RealIndexHandle, ItemHandle, IndexKey], DBStorage USING[TupleHandle], Rope USING[ROPE]; DBIndexPage: CEDAR DEFINITIONS = BEGIN Page: TYPE = DBIndex.Page; IndexKey: TYPE = DBIndex.IndexKey; TupleTree: TYPE = REF TupleTreeRecord; TupleTreeRecord: TYPE = MACHINE DEPENDENT RECORD[ <> rootPA: DBCommon.DBPage, <> depth: CARDINAL, <> tid: DBCommon.TID, <> segment: DBCommon.DBPage, <> padding: ARRAY[0..13) OF CARDINAL_ ALL[0] <> ];--TupleTreeRecord <> BadPage: SIGNAL; -- if page is not a B-Tree page DestroyPageList: PROC [s: DBCommon.Segment]; <> DestroyPage: PROC [segment: DBCommon.DBPage, p: DBIndex.Page, db: DBCommon.DBPage]; <> UnlockPage: PROC [p: DBIndex.Page]; <> WritePage: PROC [p: DBIndex.Page]; <> WriteAndUnlockPage: PROC [p: DBIndex.Page]; <> CreateEmptyPage: PROC [tree: DBIndex.RealIndexHandle, level: CARDINAL, s: DBCommon.DBPage] RETURNS [DBIndex.Page]; <> GetPage: PROC [tree: DBIndex.RealIndexHandle, db: DBCommon.DBPage, level: CARDINAL] RETURNS [DBIndex.Page]; <> CheckTag: PROC[LONG POINTER TO DBIndex.Core]; <> SetSize: PROC [p: Page, i: CARDINAL]; <> FreeSpace: PROC [p: Page] RETURNS [CARDINAL]; <> FrontSize: PROC [p: Page, index: CARDINAL] RETURNS [CARDINAL]; <> CoreAddr: PROC [p: Page, i: CARDINAL] RETURNS [DBIndex.ItemHandle]; <> EndAddr: PROC [p: Page] RETURNS [LONG POINTER]; <<(Address of the word of the end of the page)+1>> SizeOfEntries: PROC [page: Page, from: CARDINAL, to: CARDINAL] RETURNS [CARDINAL]; <> <> <> Value: PROC [p: Page, index: CARDINAL] RETURNS [DBCommon.DBPage]; Tid: PROC [p: Page, index: CARDINAL] RETURNS [DBCommon.TID]; Key: PROC [page: Page, index: CARDINAL] RETURNS [IndexKey]; <> <> GreaterEq: PROC [left: Rope.ROPE, right: IndexKey] RETURNS [BOOLEAN]; <=right>> LessEq: PROC [left: Rope.ROPE, right: IndexKey] RETURNS [BOOLEAN]; <> Less: PROC [left: Rope.ROPE, right: IndexKey] RETURNS [BOOLEAN]; Greater: PROC [left: Rope.ROPE, right: IndexKey] RETURNS [BOOLEAN]; <> FindTheFirstLeafKey: PROC [p: Page, key: REF TEXT] RETURNS [CARDINAL]; <> FindTheLastLeafKey: PROC [p: Page, key: REF TEXT] RETURNS [CARDINAL]; <> FindTheFirstInternalKey: PROC [page: Page, key: REF TEXT] RETURNS [CARDINAL] = <> INLINE BEGIN RETURN[FindTheInternalKey[page, key, Greater, LessEq]]; END; FindTheLastInternalKey: PROC [page: Page, key: REF TEXT] RETURNS [CARDINAL] = <> INLINE BEGIN RETURN[FindTheInternalKey[page, key, GreaterEq, Less]]; END; FindTheInternalKey: PROC [page: Page, key: REF TEXT, Upper, Lower: PROC [Rope.ROPE, IndexKey] RETURNS [BOOLEAN]] RETURNS [CARDINAL]; JustOver: PROC [p: Page, size: CARDINAL] RETURNS [CARDINAL]; <> <> <> ReadIndexObject: PUBLIC PROC[t: DBStorage.TupleHandle, result: TupleTree]; <> <> WriteIndexObject: PUBLIC PROC[t: DBStorage.TupleHandle, val: TupleTree]; <> <> END. Change Log By Cattell September 22, 1982 12:57 pm: Changed names to be clearer. Use UnlockPage instead of FreePage, GetPage instead of CreateOldPage, etc. Changed by Willie-Sue on February 15, 1985 <>