Annotation of XNU/bsd/hfs/hfscommon/headers/BTreesPrivate.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
        !             3:  *
        !             4:  * @APPLE_LICENSE_HEADER_START@
        !             5:  * 
        !             6:  * The contents of this file constitute Original Code as defined in and
        !             7:  * are subject to the Apple Public Source License Version 1.1 (the
        !             8:  * "License").  You may not use this file except in compliance with the
        !             9:  * License.  Please obtain a copy of the License at
        !            10:  * http://www.apple.com/publicsource and read it before using this file.
        !            11:  * 
        !            12:  * This Original Code and all software distributed under the License are
        !            13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
        !            14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
        !            15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
        !            16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
        !            17:  * License for the specific language governing rights and limitations
        !            18:  * under the License.
        !            19:  * 
        !            20:  * @APPLE_LICENSE_HEADER_END@
        !            21:  */
        !            22: /*
        !            23:        File:           BTreesPrivate.h
        !            24: 
        !            25:        Contains:       Private interface file for the BTree Module.
        !            26: 
        !            27:        Version:        xxx put the technology version here xxx
        !            28: 
        !            29:        Written by:     Gordon Sheridan and Bill Bruffey
        !            30: 
        !            31:        Copyright:      � 1992-1999 by Apple Computer, Inc., all rights reserved.
        !            32: 
        !            33:        File Ownership:
        !            34: 
        !            35:                DRI:                            Don Brady
        !            36: 
        !            37:                Other Contact:          Mark Day
        !            38: 
        !            39:                Technology:                     File Systems
        !            40: 
        !            41:        Writers:
        !            42: 
        !            43:                (msd)   Mark Day
        !            44:                (DSH)   Deric Horn
        !            45:                (djb)   Don Brady
        !            46:                (ser)   Scott Roberts
        !            47:                (dkh)   Dave Heller
        !            48: 
        !            49:        Change History (most recent first):
        !            50:           <MacOSX>      3/19/99        djb             Disable MoveRecordsLeft/Right macros since bcopy is broken.
        !            51:        
        !            52:           <MacOSX>      8/10/98        djb             Removed unused BTreeIterator from BTreeControlBlock, fixed alignment.
        !            53: 
        !            54:           <CS5>          9/4/97        djb             Convert MoveRecordsLeft and GetLeftSiblingNode to macros.
        !            55:           <CS4>         7/24/97        djb             Add macro for GetRecordAddress (was a function before).
        !            56:           <CS3>         7/21/97        msd             GetRecordByIndex now returns an OSStatus.
        !            57:           <CS2>         7/16/97        DSH             FilesInternal.i renamed FileMgrInternal.i to avoid name
        !            58:                                                                        collision
        !            59:           <CS1>         4/23/97        djb             first checked in
        !            60: 
        !            61:          <HFS6>         3/17/97        DSH             Added a refCon field to BTreeControlBlock, for DFA use, to point
        !            62:                                                                        to additional data.  Fixed Panic macros for use with SC.
        !            63:          <HFS5>         2/19/97        djb             Add InsertKey struct. Moved on-disk definitions to
        !            64:                                                                        HFSBTreesPriv.h
        !            65:          <HFS4>         1/27/97        djb             InsertTree and DeleteTree are now recursive and support variable
        !            66:                                                                        sized index keys.
        !            67:          <HFS3>         1/15/97        djb             Move GetFileRefNumFromFCB macro to FilesInternal.h. Added
        !            68:                                                                        kBTVariableIndexKeysMask.
        !            69:          <HFS2>          1/3/97        djb             Added support for large keys.
        !            70:          <HFS1>        12/19/96        djb             first checked in
        !            71: 
        !            72:        History applicable to original Scarecrow Design:
        !            73: 
        !            74:                 <7>    10/25/96        ser             Changing for new VFPI
        !            75:                 <6>    10/18/96        ser             Converting over VFPI changes
        !            76:                 <5>     9/17/96        dkh             More BTree statistics
        !            77:                 <4>     9/16/96        dkh             Revised BTree statistics
        !            78:                 <3>     6/20/96        dkh             Radar #1358740. Switch from using Pools to debug MemAllocators.
        !            79:                 <2>     12/7/95        dkh             D10E2 build. Changed usage of Ref data type to LogicalAddress.
        !            80:                 <1>    10/18/95        rst             Moved from Scarecrow project.
        !            81: 
        !            82:                <19>    11/22/94        djb             Add prototype for GetMapNode
        !            83:                <18>    11/16/94        prp             Add IsItAHint routine prototype.
        !            84:                <17>     9/30/94        prp             Get in sync with D2 interface changes.
        !            85:                <16>     7/25/94        wjk             Eliminate usage of BytePtr in favor of UInt8 *.
        !            86:                <15>     7/22/94        wjk             Convert to the new set of header files.
        !            87:                <14>     5/31/94        srs             Moved Btree types to public interface
        !            88:                <13>     12/9/93        wjk             Add 68k alignment pragma's around persistent structures.
        !            89:                <12>    11/30/93        wjk             Move from Makefiles to BuildFiles. Fit into the ModernOS and
        !            90:                                                                        NRCmds environments.
        !            91:                <11>    11/23/93        wjk             Changes required to compile on the RS6000.
        !            92:                <10>     8/30/93        CH              Removed the M_ExitOnError and M_ReturnErrorIf macros which were
        !            93:                                                                        already defined in FileSystemPriv.h (included here).
        !            94:                 <9>     8/30/93        CH              Added parens around the M_ReturnErrorIf macro.
        !            95:                 <8>     5/21/93        gs              Add kBadClose flag. Add some prototypes for internal routines.
        !            96:                 <7>     5/10/93        gs              Change Ptr to BytePtr. Move BTreeTypes to BTree.h. Add
        !            97:                                                                        DeleteTree prototype.
        !            98:                 <6>     3/23/93        gs              Remove mysterious "flags" field from HeaderRec structure. Move
        !            99:                                                                        prototypes of private functions to top of respective source
        !           100:                                                                        files.
        !           101:                 <5>      2/8/93        gs              Update to use FSAgent.h Get/Release/SetEOF/SetBlockSize
        !           102:                                                                        procPtrs. Add UpdateNode routine.
        !           103:                 <4>    12/10/92        gs              Add Key Descriptor function declarations.
        !           104:                 <3>     12/8/92        gs              Add HeaderRec structure and incorporate review feedback.
        !           105:                 <2>     12/2/92        gs              Add GetNode and ReleaseNode callback procptrs to BTree CB, and
        !           106:                                                                        add internal function declarations.
        !           107:                 <1>    11/15/92        gs              first checked in
        !           108: 
        !           109: */
        !           110: 
        !           111: #ifndef        __BTREESPRIVATE__
        !           112: #define __BTREESPRIVATE__
        !           113: 
        !           114: /* keep this defined until bcopy correctly handles overlaps */
        !           115: #define BCOPY_BROKEN 1
        !           116: 
        !           117: #include "../../hfs_macos_defs.h"
        !           118: 
        !           119: #ifndef __FILEMGRINTERNAL__
        !           120: #include "FileMgrInternal.h"
        !           121: #endif
        !           122: 
        !           123: #ifndef __BTREESINTERNAL__
        !           124: #include "BTreesInternal.h"
        !           125: #endif
        !           126: 
        !           127: 
        !           128: /////////////////////////////////// Constants ///////////////////////////////////
        !           129: 
        !           130: #define                kBTreeVersion             1
        !           131: #define                kMaxTreeDepth            16
        !           132: 
        !           133: 
        !           134: #define                kHeaderNodeNum            0
        !           135: #define                kKeyDescRecord            1
        !           136: 
        !           137: 
        !           138: // Header Node Record Offsets
        !           139: enum {
        !           140:        kHeaderRecOffset        =       0x000E,
        !           141:        kKeyDescRecOffset       =       0x0078,
        !           142:        kHeaderMapRecOffset     =       0x00F8
        !           143: };
        !           144: 
        !           145: #define                kMinNodeSize            512
        !           146: 
        !           147: #define                kMinRecordSize            6
        !           148:                                                                                //�� where is minimum record size enforced?
        !           149: 
        !           150: // miscellaneous BTree constants
        !           151: enum {
        !           152:                        kOffsetSize                             = 2
        !           153: };
        !           154: 
        !           155: // Insert Operations
        !           156: typedef enum {
        !           157:                        kInsertRecord                   = 0,
        !           158:                        kReplaceRecord                  = 1
        !           159: } InsertType;
        !           160: 
        !           161: // illegal string attribute bits set in mask
        !           162: #define                kBadStrAttribMask               0xCF
        !           163: 
        !           164: 
        !           165: 
        !           166: //////////////////////////////////// Macros /////////////////////////////////////
        !           167: 
        !           168: #define                M_NodesInMap(mapSize)                           ((mapSize) << 3)
        !           169: 
        !           170: #define                M_ClearBitNum(integer,bitNumber)        ((integer) &= (~(1<<(bitNumber))))
        !           171: #define                M_SetBitNum(integer,bitNumber)          ((integer) |= (1<<(bitNumber)))
        !           172: #define                M_IsOdd(integer)                                        (((integer) & 1) != 0)
        !           173: #define                M_IsEven(integer)                                       (((integer) & 1) == 0)
        !           174: #define                M_BTreeHeaderDirty(btreePtr)            btreePtr->flags |= kBTHeaderDirty
        !           175: 
        !           176: #define                M_MapRecordSize(nodeSize)                       (nodeSize - sizeof (BTNodeDescriptor) - 6)
        !           177: #define                M_HeaderMapRecordSize(nodeSize)         (nodeSize - sizeof(BTNodeDescriptor) - sizeof(BTHeaderRec) - 128 - 8)
        !           178: 
        !           179: ///////////////////////////////////// Types /////////////////////////////////////
        !           180: 
        !           181: typedef struct BTreeControlBlock {                                     // fields specific to BTree CBs
        !           182: 
        !           183:        UInt8                                            reserved1;                     // keep for alignment with old style fields
        !           184:        UInt8                                            btreeType;
        !           185:        UInt16                                           treeDepth;
        !           186:        FileReference                            fileRefNum;            // refNum of btree file
        !           187:        KeyCompareProcPtr                        keyCompareProc;
        !           188:        UInt32                                           rootNode;
        !           189:        UInt32                                           leafRecords;
        !           190:        UInt32                                           firstLeafNode;
        !           191:        UInt32                                           lastLeafNode;
        !           192:        UInt16                                           nodeSize;
        !           193:        UInt16                                           maxKeyLength;
        !           194:        UInt32                                           totalNodes;
        !           195:        UInt32                                           freeNodes;
        !           196: 
        !           197:        UInt16                                           reserved3;                     // 4-byte alignment
        !           198: 
        !           199:        // new fields
        !           200:        SInt16                                           version;
        !           201:        UInt32                                           flags;                         // dynamic flags
        !           202:        UInt32                                           attributes;            // persistent flags
        !           203:        UInt32                                           writeCount;
        !           204:        UInt32                                           lastfsync;             /* Last time that this was fsynced  */
        !           205: 
        !           206:        GetBlockProcPtr                          getBlockProc;
        !           207:        ReleaseBlockProcPtr                      releaseBlockProc;
        !           208:        SetEndOfForkProcPtr                      setEndOfForkProc;
        !           209: 
        !           210:        // statistical information
        !           211:        UInt32                                           numGetNodes;
        !           212:        UInt32                                           numGetNewNodes;
        !           213:        UInt32                                           numReleaseNodes;
        !           214:        UInt32                                           numUpdateNodes;
        !           215:        UInt32                                           numMapNodesRead;       // map nodes beyond header node
        !           216:        UInt32                                           numHintChecks;
        !           217:        UInt32                                           numPossibleHints;      // Looks like a formated hint
        !           218:        UInt32                                           numValidHints;         // Hint used to find correct record.
        !           219: 
        !           220: } BTreeControlBlock, *BTreeControlBlockPtr;
        !           221: 
        !           222: 
        !           223: UInt32 CalcKeySize(const BTreeControlBlock *btcb, const BTreeKey *key);
        !           224: #define CalcKeySize(btcb, key)                 ( ((btcb)->attributes & kBTBigKeysMask) ? ((key)->length16 + 2) : ((key)->length8 + 1) )
        !           225: 
        !           226: UInt32 KeyLength(const BTreeControlBlock *btcb, const BTreeKey *key);
        !           227: #define KeyLength(btcb, key)                   ( ((btcb)->attributes & kBTBigKeysMask) ? (key)->length16 : (key)->length8 )
        !           228: 
        !           229: 
        !           230: 
        !           231: typedef enum {
        !           232:                                        kBTHeaderDirty  = 0x00000001
        !           233: }      BTreeFlags;
        !           234: 
        !           235: 
        !           236: typedef        SInt8                           *NodeBuffer;
        !           237: typedef BlockDescriptor                 NodeRec, *NodePtr;             //�� remove this someday...
        !           238: 
        !           239: 
        !           240: 
        !           241: 
        !           242: //// Tree Path Table - constructed by SearchTree, used by InsertTree and DeleteTree
        !           243: 
        !           244: typedef struct {
        !           245:        UInt32                          node;                           // node number
        !           246:        UInt16                          index;
        !           247:        UInt16                          reserved;                       // align size to a power of 2
        !           248: } TreePathRecord, *TreePathRecordPtr;
        !           249: 
        !           250: typedef TreePathRecord         TreePathTable [kMaxTreeDepth];
        !           251: 
        !           252: 
        !           253: //// InsertKey - used by InsertTree, InsertLevel and InsertNode
        !           254: 
        !           255: struct InsertKey {
        !           256:        BTreeKeyPtr             keyPtr;
        !           257:        UInt8 *                 recPtr;
        !           258:        UInt16                  keyLength;
        !           259:        UInt16                  recSize;
        !           260:        Boolean                 replacingKey;
        !           261:        Boolean                 skipRotate;
        !           262: };
        !           263: 
        !           264: typedef struct InsertKey InsertKey;
        !           265: 
        !           266: 
        !           267: //// For Notational Convenience
        !           268: 
        !           269: typedef        BTNodeDescriptor*        NodeDescPtr;
        !           270: typedef UInt8                          *RecordPtr;
        !           271: typedef BTreeKeyPtr                     KeyPtr;
        !           272: 
        !           273: 
        !           274: //////////////////////////////////// Globals ////////////////////////////////////
        !           275: 
        !           276: 
        !           277: //////////////////////////////////// Macros /////////////////////////////////////
        !           278: 
        !           279: #if DEBUG_BUILD
        !           280:        #define Panic( message )                                        DebugStr( (ConstStr255Param) message )
        !           281:        #define PanicIf( condition, message )           if ( condition != 0 )   DebugStr( message )
        !           282: #else
        !           283:        #define Panic( message )
        !           284:        #define PanicIf( condition, message )
        !           285: #endif
        !           286: 
        !           287: //     Exit function on error
        !           288: #define M_ExitOnError( result )        if ( ( result ) != noErr )      goto ErrorExit; else ;
        !           289: 
        !           290: //     Test for passed condition and return if true
        !           291: #define        M_ReturnErrorIf( condition, error )     if ( condition )        return( error )
        !           292: 
        !           293: //////////////////////////////// Key Operations /////////////////////////////////
        !           294: 
        !           295: SInt32         CompareKeys                             (BTreeControlBlockPtr    btreePtr,
        !           296:                                                                         KeyPtr                                  searchKey,
        !           297:                                                                         KeyPtr                                  trialKey );
        !           298: 
        !           299: //////////////////////////////// Map Operations /////////////////////////////////
        !           300: 
        !           301: OSStatus       AllocateNode                    (BTreeControlBlockPtr    btreePtr,
        !           302:                                                                         UInt32                                 *nodeNum);
        !           303: 
        !           304: OSStatus       FreeNode                                (BTreeControlBlockPtr    btreePtr,
        !           305:                                                                         UInt32                                  nodeNum);
        !           306: 
        !           307: OSStatus       ExtendBTree                             (BTreeControlBlockPtr    btreePtr,
        !           308:                                                                         UInt32                                  nodes );
        !           309: 
        !           310: UInt32         CalcMapBits                             (BTreeControlBlockPtr    btreePtr);
        !           311: 
        !           312: 
        !           313: //////////////////////////////// Misc Operations ////////////////////////////////
        !           314: 
        !           315: UInt16         CalcKeyRecordSize               (UInt16                                  keySize,
        !           316:                                                                         UInt16                                  recSize );
        !           317: 
        !           318: OSStatus       VerifyHeader                    (FCB                                    *filePtr,
        !           319:                                                                         BTHeaderRec                            *header );
        !           320: 
        !           321: OSStatus       UpdateHeader                    (BTreeControlBlockPtr    btreePtr );
        !           322: 
        !           323: OSStatus       FindIteratorPosition    (BTreeControlBlockPtr    btreePtr,
        !           324:                                                                         BTreeIteratorPtr                iterator,
        !           325:                                                                         BlockDescriptor                *left,
        !           326:                                                                         BlockDescriptor                *middle,
        !           327:                                                                         BlockDescriptor                *right,
        !           328:                                                                         UInt32                                 *nodeNum,
        !           329:                                                                         UInt16                                 *index,
        !           330:                                                                         Boolean                                *foundRecord );
        !           331: 
        !           332: OSStatus       CheckInsertParams               (FCB                                    *filePtr,
        !           333:                                                                         BTreeIterator                  *iterator,
        !           334:                                                                         FSBufferDescriptor             *record,
        !           335:                                                                         UInt16                                  recordLen );
        !           336: 
        !           337: OSStatus       TrySimpleReplace                (BTreeControlBlockPtr    btreePtr,
        !           338:                                                                         NodeDescPtr                     nodePtr,
        !           339:                                                                         BTreeIterator                  *iterator,
        !           340:                                                                         FSBufferDescriptor             *record,
        !           341:                                                                         UInt16                                  recordLen,
        !           342:                                                                         Boolean                                *recordInserted );
        !           343: 
        !           344: OSStatus       IsItAHint                               (BTreeControlBlockPtr    btreePtr, 
        !           345:                                                                         BTreeIterator                  *iterator, 
        !           346:                                                                         Boolean                                *answer );
        !           347: 
        !           348: //////////////////////////////// Node Operations ////////////////////////////////
        !           349: 
        !           350: //// Node Operations
        !           351: 
        !           352: OSStatus       GetNode                                 (BTreeControlBlockPtr    btreePtr,
        !           353:                                                                         UInt32                                  nodeNum,
        !           354:                                                                         NodeRec                                *returnNodePtr );
        !           355: 
        !           356: OSStatus       GetLeftSiblingNode              (BTreeControlBlockPtr    btreePtr,
        !           357:                                                                         NodeDescPtr                     node,
        !           358:                                                                         NodeRec                                *left );
        !           359: 
        !           360: #define                GetLeftSiblingNode(btree,node,left)                     GetNode ((btree), ((NodeDescPtr)(node))->bLink, (left))
        !           361: 
        !           362: OSStatus       GetRightSiblingNode             (BTreeControlBlockPtr    btreePtr,
        !           363:                                                                         NodeDescPtr                     node,
        !           364:                                                                         NodeRec                                *right );
        !           365: 
        !           366: #define                GetRightSiblingNode(btree,node,right)           GetNode ((btree), ((NodeDescPtr)(node))->fLink, (right))
        !           367: 
        !           368: 
        !           369: OSStatus       GetNewNode                              (BTreeControlBlockPtr    btreePtr,
        !           370:                                                                         UInt32                                  nodeNum,
        !           371:                                                                         NodeRec                                *returnNodePtr );
        !           372: 
        !           373: OSStatus       ReleaseNode                             (BTreeControlBlockPtr    btreePtr,
        !           374:                                                                         NodePtr                                 nodePtr );
        !           375: 
        !           376: OSStatus       UpdateNode                              (BTreeControlBlockPtr    btreePtr,
        !           377:                                                                         NodePtr                                 nodePtr,
        !           378:                                                                         UInt32                                  transactionID,
        !           379:                                                                         UInt32                                  flags );
        !           380: 
        !           381: OSStatus       GetMapNode                              (BTreeControlBlockPtr    btreePtr,
        !           382:                                                                         BlockDescriptor                 *nodePtr,
        !           383:                                                                         UInt16                                  **mapPtr,
        !           384:                                                                         UInt16                                  *mapSize );
        !           385: 
        !           386: //// Node Buffer Operations
        !           387: 
        !           388: OSStatus       CheckNode                               (BTreeControlBlockPtr    btreePtr,
        !           389:                                                                         NodeDescPtr                     node );
        !           390: 
        !           391: void           ClearNode                               (BTreeControlBlockPtr    btreePtr,
        !           392:                                                                         NodeDescPtr                     node );
        !           393: 
        !           394: UInt16         GetNodeDataSize                 (BTreeControlBlockPtr    btreePtr,
        !           395:                                                                         NodeDescPtr                     node );
        !           396: 
        !           397: UInt16         GetNodeFreeSize                 (BTreeControlBlockPtr    btreePtr,
        !           398:                                                                         NodeDescPtr                     node );
        !           399: 
        !           400: 
        !           401: //// Record Operations
        !           402: 
        !           403: Boolean                InsertRecord                    (BTreeControlBlockPtr    btreePtr,
        !           404:                                                                         NodeDescPtr                     node,
        !           405:                                                                         UInt16                                  index,
        !           406:                                                                         RecordPtr                               recPtr,
        !           407:                                                                         UInt16                                  recSize );
        !           408: 
        !           409: Boolean                InsertKeyRecord                 (BTreeControlBlockPtr    btreePtr,
        !           410:                                                                         NodeDescPtr                     node,
        !           411:                                                                         UInt16                                  index,
        !           412:                                                                         KeyPtr                                  keyPtr,
        !           413:                                                                         UInt16                                  keyLength,
        !           414:                                                                         RecordPtr                               recPtr,
        !           415:                                                                         UInt16                                  recSize );
        !           416: 
        !           417: void           DeleteRecord                    (BTreeControlBlockPtr   btree,
        !           418:                                                                         NodeDescPtr                    node,
        !           419:                                                                         UInt16                                 index );
        !           420: 
        !           421: 
        !           422: Boolean                SearchNode                              (BTreeControlBlockPtr    btree,
        !           423:                                                                         NodeDescPtr                     node,
        !           424:                                                                         KeyPtr                                  searchKey,
        !           425:                                                                         UInt16                                 *index );
        !           426: 
        !           427: OSStatus       GetRecordByIndex                (BTreeControlBlockPtr    btree,
        !           428:                                                                         NodeDescPtr                     node,
        !           429:                                                                         UInt16                                  index,
        !           430:                                                                         KeyPtr                                 *keyPtr,
        !           431:                                                                         UInt8 *                                *dataPtr,
        !           432:                                                                         UInt16                                 *dataSize );
        !           433: 
        !           434: UInt8 *                GetRecordAddress                (BTreeControlBlockPtr    btree,
        !           435:                                                                         NodeDescPtr                     node,
        !           436:                                                                         UInt16                                  index );
        !           437: 
        !           438: #define GetRecordAddress(btreePtr,node,index)          ((UInt8 *)(node) + (*(short *) ((UInt8 *)(node) + (btreePtr)->nodeSize - ((index) << 1) - kOffsetSize)))
        !           439: 
        !           440: 
        !           441: UInt16         GetRecordSize                   (BTreeControlBlockPtr    btree,
        !           442:                                                                         NodeDescPtr                     node,
        !           443:                                                                         UInt16                                  index );
        !           444: 
        !           445: UInt32         GetChildNodeNum                 (BTreeControlBlockPtr    btreePtr,
        !           446:                                                                         NodeDescPtr                     nodePtr,
        !           447:                                                                         UInt16                                  index );
        !           448: 
        !           449: void           MoveRecordsLeft                 (UInt8 *                                 src,
        !           450:                                                                         UInt8 *                                 dst,
        !           451:                                                                         UInt16                                  bytesToMove );
        !           452: 
        !           453: #if !BCOPY_BROKEN
        !           454: #define                MoveRecordsLeft(src,dst,bytes)                  BlockMoveData((src),(dst),(bytes))
        !           455: #endif
        !           456: void           MoveRecordsRight                (UInt8 *                                 src,
        !           457:                                                                         UInt8 *                                 dst,
        !           458:                                                                         UInt16                                  bytesToMove );
        !           459: 
        !           460: #if !BCOPY_BROKEN
        !           461: #define                MoveRecordsRight(src,dst,bytes)                 BlockMoveData((src),(dst),(bytes))
        !           462: #endif
        !           463: 
        !           464: 
        !           465: //////////////////////////////// Tree Operations ////////////////////////////////
        !           466: 
        !           467: OSStatus       SearchTree                              (BTreeControlBlockPtr    btreePtr,
        !           468:                                                                         BTreeKeyPtr                     keyPtr,
        !           469:                                                                         TreePathTable                   treePathTable,
        !           470:                                                                         UInt32                                 *nodeNum,
        !           471:                                                                         BlockDescriptor                *nodePtr,
        !           472:                                                                         UInt16                                 *index );
        !           473: 
        !           474: OSStatus       InsertTree                              (BTreeControlBlockPtr    btreePtr,
        !           475:                                                                         TreePathTable                   treePathTable,
        !           476:                                                                         KeyPtr                                  keyPtr,
        !           477:                                                                         UInt8 *                                 recPtr,
        !           478:                                                                         UInt16                                  recSize,
        !           479:                                                                         BlockDescriptor                *targetNode,
        !           480:                                                                         UInt16                                  index,
        !           481:                                                                         UInt16                                  level,
        !           482:                                                                         Boolean                                 replacingKey,
        !           483:                                                                         UInt32                                 *insertNode );
        !           484: 
        !           485: OSStatus       DeleteTree                              (BTreeControlBlockPtr    btreePtr,
        !           486:                                                                         TreePathTable                   treePathTable,
        !           487:                                                                         BlockDescriptor                *targetNode,
        !           488:                                                                         UInt16                                  index,
        !           489:                                                                         UInt16                                  level );
        !           490: 
        !           491: #endif //__BTREESPRIVATE__

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.