1*16467b97STreehugger Robot // 2*16467b97STreehugger Robot // ACBtree.h 3*16467b97STreehugger Robot // ST4 4*16467b97STreehugger Robot // 5*16467b97STreehugger Robot // Created by Alan Condit on 4/18/11. 6*16467b97STreehugger Robot // Copyright 2011 Alan Condit. All rights reserved. 7*16467b97STreehugger Robot // 8*16467b97STreehugger Robot 9*16467b97STreehugger Robot typedef enum { 10*16467b97STreehugger Robot BTNODE, 11*16467b97STreehugger Robot LEAF 12*16467b97STreehugger Robot } NodeType; 13*16467b97STreehugger Robot 14*16467b97STreehugger Robot #import <Foundation/Foundation.h> 15*16467b97STreehugger Robot 16*16467b97STreehugger Robot @class AMutableDictionary; 17*16467b97STreehugger Robot 18*16467b97STreehugger Robot #define BTNODESIZE 11 19*16467b97STreehugger Robot #define BTHNODESIZE ((BTNODESIZE-1)/2) 20*16467b97STreehugger Robot #define BTKeySize 38 21*16467b97STreehugger Robot #if defined FAILURE 22*16467b97STreehugger Robot #undef FAILURE 23*16467b97STreehugger Robot #endif 24*16467b97STreehugger Robot #define FAILURE -1 25*16467b97STreehugger Robot #if defined SUCCESS 26*16467b97STreehugger Robot #undef SUCCESS 27*16467b97STreehugger Robot #endif 28*16467b97STreehugger Robot #define SUCCESS 0 29*16467b97STreehugger Robot 30*16467b97STreehugger Robot @interface ACBKey : NSObject { 31*16467b97STreehugger Robot NSInteger recnum; /* record number */ 32*16467b97STreehugger Robot __strong NSString *key; /* key pointer id */ 33*16467b97STreehugger Robot char kstr[BTKeySize]; /* key entry */ 34*16467b97STreehugger Robot } 35*16467b97STreehugger Robot 36*16467b97STreehugger Robot @property (assign) NSInteger recnum; 37*16467b97STreehugger Robot @property (retain) NSString *key; 38*16467b97STreehugger Robot 39*16467b97STreehugger Robot + (ACBKey *)newKey; 40*16467b97STreehugger Robot + (ACBKey *)newKeyWithKStr:(NSString *)aKey; 41*16467b97STreehugger Robot - (id) init; 42*16467b97STreehugger Robot - (id) initWithKStr:(NSString *)aKey; 43*16467b97STreehugger Robot - (void)dealloc; 44*16467b97STreehugger Robot - (NSString *) description; 45*16467b97STreehugger Robot @end 46*16467b97STreehugger Robot 47*16467b97STreehugger Robot @interface ACBTree : NSObject { 48*16467b97STreehugger Robot __strong AMutableDictionary *dict; /* The dictionary that this node belongs to */ 49*16467b97STreehugger Robot __strong ACBTree *lnode; /* pointer to left node */ 50*16467b97STreehugger Robot __strong ACBTree *rnode; /* pointer to right node */ 51*16467b97STreehugger Robot __strong ACBKey **keys; /* pointer to keys */ 52*16467b97STreehugger Robot __strong ACBTree **btNodes; /* pointers to btNodes */ 53*16467b97STreehugger Robot __strong ACBKey *keyArray[BTNODESIZE]; 54*16467b97STreehugger Robot __strong ACBTree *btNodeArray[BTNODESIZE]; 55*16467b97STreehugger Robot NSInteger lnodeid; /* nodeid of left node */ 56*16467b97STreehugger Robot NSInteger rnodeid; /* nodeid of right node */ 57*16467b97STreehugger Robot NSInteger nodeid; /* node id */ 58*16467b97STreehugger Robot NSInteger nodeType; /* 1 = node, 2 = leaf, -1 = unused */ 59*16467b97STreehugger Robot NSInteger numkeys; /* number of active entries */ 60*16467b97STreehugger Robot NSInteger numrecs; /* number of records */ 61*16467b97STreehugger Robot NSInteger updtd; /* modified since update flag */ 62*16467b97STreehugger Robot NSInteger keylen; /* length of key */ 63*16467b97STreehugger Robot NSInteger kidx; 64*16467b97STreehugger Robot } 65*16467b97STreehugger Robot 66*16467b97STreehugger Robot @property (retain) AMutableDictionary *dict; 67*16467b97STreehugger Robot @property (retain) ACBTree *lnode; 68*16467b97STreehugger Robot @property (retain) ACBTree *rnode; 69*16467b97STreehugger Robot @property (assign) ACBKey **keys; 70*16467b97STreehugger Robot @property (assign) ACBTree **btNodes; 71*16467b97STreehugger Robot @property (assign) NSInteger lnodeid; 72*16467b97STreehugger Robot @property (assign) NSInteger rnodeid; 73*16467b97STreehugger Robot @property (assign) NSInteger nodeid; 74*16467b97STreehugger Robot @property (assign) NSInteger nodeType; 75*16467b97STreehugger Robot @property (assign) NSInteger numkeys; 76*16467b97STreehugger Robot @property (assign) NSInteger numrecs; 77*16467b97STreehugger Robot @property (assign) NSInteger updtd; 78*16467b97STreehugger Robot @property (assign) NSInteger keylen; 79*16467b97STreehugger Robot @property (assign) NSInteger kidx; 80*16467b97STreehugger Robot 81*16467b97STreehugger Robot + (ACBTree *) newNodeWithDictionary:(AMutableDictionary *)theDict; 82*16467b97STreehugger Robot 83*16467b97STreehugger Robot - (id)initWithDictionary:(AMutableDictionary *)theDict; 84*16467b97STreehugger Robot - (void)dealloc; 85*16467b97STreehugger Robot 86*16467b97STreehugger Robot - (ACBTree *)createnode:(ACBKey *)kp0; 87*16467b97STreehugger Robot - (ACBTree *)deletekey:(NSString *)dkey; 88*16467b97STreehugger Robot - (ACBTree *)insertkey:(ACBKey *)ikp value:(id)value; 89*16467b97STreehugger Robot - (ACBKey *)internaldelete:(ACBKey *)dkp; 90*16467b97STreehugger Robot - (ACBTree *) internalinsert:(ACBKey *)key value:(id)value split:(NSInteger *)h; 91*16467b97STreehugger Robot - (ACBTree *) insert:(ACBKey *)key value:(id)value index:(NSInteger)hi split:(NSInteger *)h; 92*16467b97STreehugger Robot - (NSInteger)delfrmnode:(ACBKey *)ikp; 93*16467b97STreehugger Robot - (NSInteger)insinnode:(ACBKey *)key value:(id)value; 94*16467b97STreehugger Robot - (void)mergenode:(NSInteger)i; 95*16467b97STreehugger Robot - (ACBTree *)splitnode:(NSInteger)idx; 96*16467b97STreehugger Robot - (ACBTree *)search:(id)key; 97*16467b97STreehugger Robot - (NSInteger)searchnode:(id)key match:(BOOL)match; 98*16467b97STreehugger Robot - (void)borrowleft:(NSInteger)i; 99*16467b97STreehugger Robot - (void)borrowright:(NSInteger)i; 100*16467b97STreehugger Robot - (void)rotateleft:(NSInteger)j; 101*16467b97STreehugger Robot - (void)rotateright:(NSInteger)j; 102*16467b97STreehugger Robot - (NSInteger) keyWalkLeaves; 103*16467b97STreehugger Robot - (NSInteger) objectWalkLeaves; 104*16467b97STreehugger Robot - (NSString *) description; 105*16467b97STreehugger Robot @end 106