<> <> <> <<>> <> <> <> DIRECTORY DBCommon USING[DBPage], DBStorageInternal USING[TID], DBIndex USING[Page, IndexKey, ItemHandle], PrincOpsUtils USING[LongCopy], Rope USING[ROPE]; DBIndexFilePage: CEDAR DEFINITIONS IMPORTS PrincOpsUtils = BEGIN Page: TYPE = DBIndex.Page; IndexKey: TYPE = DBIndex.IndexKey; ROPE: TYPE = Rope.ROPE; <> 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 [DBStorageInternal.TID]; Key: PROC [page: Page, index: CARDINAL] RETURNS [IndexKey]; <> CopyKey: PROC[key: IndexKey] RETURNS [IndexKey]; <> FreeKey: PROC [key: IndexKey]; <<"Deallocates" key>> CreateIndexKey: PROC [s: ROPE] RETURNS [IndexKey]; <> AllocateIndexKey: PUBLIC PROC [bytes: INT] RETURNS[key: IndexKey]; <> <> GreaterEq: PROC [left, right: IndexKey] RETURNS [BOOLEAN]; <=right>> LessEq: PROC [left, right: IndexKey] RETURNS [BOOLEAN]; <> Less: PROC [left, right: IndexKey] RETURNS [BOOLEAN]; Greater: PROC [left, right: IndexKey] RETURNS [BOOLEAN]; <> LongCOPY: PROC [from, to: LONG POINTER, nwords: CARDINAL] = TRUSTED INLINE BEGIN i: CARDINAL; IF nwords > 256 THEN ERROR; IF LOOPHOLE[to, LONG CARDINAL] IN (LOOPHOLE[from, LONG CARDINAL]..LOOPHOLE[from, LONG CARDINAL] + nwords) THEN FOR i DECREASING IN [0..nwords) DO (to + i)^ _ (from + i)^; ENDLOOP ELSE PrincOpsUtils.LongCopy[from: from, nwords: nwords, to: to]; END; <> FindTheFirstLeafKey: PROC [p: Page, key: IndexKey] RETURNS [CARDINAL]; <> FindTheLastLeafKey: PROC [p: Page, key: IndexKey] RETURNS [CARDINAL]; <> <> FindTheFirstInternalKey: PROC [page: Page, key: IndexKey] RETURNS [CARDINAL] = <> INLINE BEGIN RETURN[FindTheInternalKey[page, key, Greater, LessEq]]; END; FindTheLastInternalKey: PROC [page: Page, key: IndexKey] RETURNS [CARDINAL] = <> INLINE BEGIN RETURN[FindTheInternalKey[page, key, GreaterEq, Less]]; END; FindTheInternalKey: PROC [ page: Page, key: IndexKey, Upper, Lower: PROC [IndexKey, IndexKey] RETURNS [BOOLEAN]] RETURNS [CARDINAL]; JustOver: PROC [p: Page, size: CARDINAL] RETURNS [CARDINAL]; <> <> END. CHANGE LOG Created by Suzuki Changed by MBrown on 17-Jun-81 9:55:35 < DBIndexInternal.>> Changed by Cattell on June 20, 1982 6:33 pm < CreateIndexKey. Add ERROR KeyTooBig. Rope.Ref -> ROPE.>> Changed by Cattell on September 21, 1982 8:34 pm <> Changed by Cattell on January 17, 1983 6:09 pm <> Changed by Willie-Sue on February 15, 1985 <>