|
|
1.1 ! root 1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ ! 2: ! 3: /* ! 4: $Header: b1btr.h,v 1.4 85/08/22 16:41:40 timo Exp $ ! 5: */ ! 6: ! 7: /* Private definitions for the b-tree module */ ! 8: ! 9: #ifndef INTEGRATION ! 10: ! 11: extern bool comp_ok; ! 12: #define reqerr(s) error(s) ! 13: ! 14: /*********************************************************************/ ! 15: /* items ! 16: /*********************************************************************/ ! 17: ! 18: typedef char texitem; ! 19: typedef value lisitem; ! 20: typedef struct pair {value k, a;} tabitem; ! 21: typedef struct onpair {value ka, u;} keysitem; ! 22: typedef union itm { ! 23: texitem c; ! 24: lisitem l; ! 25: tabitem t; ! 26: } item, *itemarray, *itemptr; ! 27: ! 28: #define Charval(pitm) ((pitm)->c) ! 29: #define Keyval(pitm) ((pitm)->l) ! 30: #define Ascval(pitm) ((pitm)->t.a) ! 31: ! 32: /* Xt = itemtype, do not change these, their order is used */ ! 33: #define Ct (0) ! 34: #define Lt (1) ! 35: #define Tt (2) ! 36: #define Kt (3) ! 37: ! 38: /* Itemwidth, used for offset in btreenodes */ ! 39: typedef char width; ! 40: #define Itemwidth(it) (itemwidth[it]) ! 41: extern char itemwidth[]; /* uses: */ ! 42: #define Cw (sizeof(texitem)) ! 43: #define Lw (sizeof(lisitem)) ! 44: #define Tw (sizeof(tabitem)) ! 45: #define Kw (sizeof(keysitem)) ! 46: ! 47: /*********************************************************************/ ! 48: /* sizes of btrees ! 49: /*********************************************************************/ ! 50: ! 51: #define Bigsize (-1) ! 52: #define Stail(r,s) ((r) > Maxint - (s) ? Bigsize : (r)+(s)) ! 53: #define Ssum(r,s) ((r) EQ Bigsize || (s) EQ Bigsize ? Bigsize : Stail(r,s)) ! 54: #define Sincr(r) ((r) EQ Bigsize ? Bigsize : Stail(r,1)) ! 55: #define Sadd2(r) ((r) EQ Bigsize ? Bigsize : Stail(r,2)) ! 56: #define Sdiff(r,s) ((r) EQ Bigsize || (s) EQ Bigsize ? Bigsize : (r)-(s)) ! 57: #define Sdecr(r) ((r) EQ Bigsize ? Bigsize : (r)-(1)) ! 58: value treesize(); /* btreeptr pnode */ ! 59: ! 60: /*********************************************************************/ ! 61: /* (A,B)-btrees ! 62: /*********************************************************************/ ! 63: ! 64: /* innernodes: using A=6 B=12 */ ! 65: #define Mininner 5 /* A - 1 */ ! 66: #define Maxinner 11 /* B - 1 */ ! 67: /* bottomnodes */ ! 68: #define Minbottom 11 ! 69: #define Maxbottom 22 ! 70: /* rangenodes */ ! 71: #define Biglim (Maxbottom+1) ! 72: ! 73: typedef struct btrnode { ! 74: HEADER; int size; ! 75: char **g; ! 76: } ! 77: btreenode, *btreeptr; ! 78: ! 79: typedef struct innernode { ! 80: HEADER; int size; ! 81: btreeptr ptr[Maxinner+1]; itemarray iitm; ! 82: } ! 83: innernode, *innerptr; ! 84: ! 85: typedef struct itexnode { ! 86: HEADER; int size; ! 87: btreeptr ptr[Maxinner+1]; texitem icitm[Maxinner]; ! 88: } ! 89: itexnode, *itexptr; ! 90: ! 91: typedef struct ilisnode { ! 92: HEADER; int size; ! 93: btreeptr ptr[Maxinner+1]; lisitem ilitm[Maxinner]; ! 94: } ! 95: ilisnode, *ilisptr; ! 96: ! 97: typedef struct itabnode { ! 98: HEADER; int size; ! 99: btreeptr ptr[Maxinner+1]; tabitem ititm[Maxinner]; ! 100: } ! 101: itabnode, *itabptr; ! 102: ! 103: typedef struct bottomnode { ! 104: HEADER; int size; ! 105: itemarray bitm; ! 106: } ! 107: bottomnode, *bottomptr; ! 108: ! 109: typedef struct btexnode { ! 110: HEADER; int size; ! 111: texitem bcitm[Maxbottom]; ! 112: } ! 113: btexnode, *btexptr; ! 114: ! 115: typedef struct blisnode { ! 116: HEADER; int size; ! 117: lisitem blitm[Maxbottom]; ! 118: } ! 119: blisnode, *blisptr; ! 120: ! 121: typedef struct btabnode { ! 122: HEADER; int size; ! 123: tabitem btitm[Maxbottom]; ! 124: } ! 125: btabnode, *btabptr; ! 126: ! 127: typedef struct rangenode { ! 128: HEADER; int size; ! 129: lisitem lwb, upb; ! 130: } ! 131: rangenode, *rangeptr; ! 132: ! 133: #define Bnil ((btreeptr) 0) ! 134: ! 135: #define Flag(pnode) ((pnode)->type) ! 136: #define Inner 'i' ! 137: #define Bottom 'b' ! 138: #define Irange '.' ! 139: #define Crange '\'' ! 140: ! 141: #define Lim(pnode) ((pnode)->len) ! 142: #define Minlim(pnode) (Flag(pnode) EQ Inner ? Mininner : Minbottom) ! 143: #define Maxlim(pnode) (Flag(pnode) EQ Inner ? Maxinner : Maxbottom) ! 144: #define SetRangeLim(pnode) (Size(pnode) EQ Bigsize || Size(pnode) > Maxbottom\ ! 145: ? Biglim : Size(pnode)) ! 146: ! 147: #define Size(pnode) ((pnode)->size) ! 148: ! 149: #define Ptr(pnode,l) (((innerptr) (pnode))->ptr[l]) ! 150: /* pointer to item in innernode: */ ! 151: #define Piitm(pnode,l,w) ((itemptr) (((char*)&(((innerptr) (pnode))->iitm)) + ((l)*(w)))) ! 152: /* pointer to item in bottomnode: */ ! 153: #define Pbitm(pnode,l,w) ((itemptr) (((char*)&(((bottomptr) (pnode))->bitm)) + ((l)*(w)))) ! 154: #define Ichar(pnode,l) (((itexptr) (pnode))->icitm[l]) ! 155: #define Bchar(pnode,l) (((btexptr) (pnode))->bcitm[l]) ! 156: ! 157: #define Lwbval(pnode) (((rangeptr) (pnode))->lwb) ! 158: #define Upbval(pnode) (((rangeptr) (pnode))->upb) ! 159: #define Lwbchar(pnode) (Bchar(Root(Lwbval(pnode)), 0)) ! 160: #define Upbchar(pnode) (Bchar(Root(Upbval(pnode)), 0)) ! 161: ! 162: #define Maxheight 20 /* should be some function of B */ ! 163: ! 164: /* Procedure merge(); */ ! 165: /* btreeptr pleft; itemptr pitm; btreeptr pright; literal it; */ ! 166: bool rebalance(); ! 167: /* btreeptr *pptr1; itemptr pitm; btreeptr pptr2; ! 168: intlet minlim, maxlim; literal it; */ ! 169: /* Procedure restore_child(); */ ! 170: /* btreeptr pparent; intlet ichild, minl, maxl; literal it; */ ! 171: bool inodeinsert(); ! 172: /* btreeptr pnode, *pptr; itemptr pitm; intlet at; literal it; */ ! 173: bool bnodeinsert(); ! 174: /* btreeptr pnode, *pptr; itemptr pitm; intlet at; literal it; */ ! 175: bool i_search(); ! 176: /* btreeptr pnode; value key; intlet *pl; width iw; */ ! 177: bool b_search(); ! 178: /* btreeptr pnode; value key; intlet *pl; width iw; */ ! 179: ! 180: /*********************************************************************/ ! 181: /* texts only (mbte.c) ! 182: /*********************************************************************/ ! 183: ! 184: btreeptr trimbtextnode(); /* btreeptr pnode, intlet from,to */ ! 185: btreeptr trimitextnode(); /* btreeptr pnode, intlet from,to */ ! 186: bool join_itm(); ! 187: /* btreeptr pnode, *pptr; itemptr pitm; bool after */ ! 188: ! 189: /*********************************************************************/ ! 190: /* lists only (mbli.c) ! 191: /*********************************************************************/ ! 192: ! 193: btreeptr spawncrangenode(); /* value lwb, upb */ ! 194: /* Procedure set_size_and_lim(); */ /* btreeptr pnode */ ! 195: /* PRrocedure ir_to_bottomnode(); */ /* btreeptr *pptr; */ ! 196: bool ins_itm(); ! 197: /* btreeptr *pptr1; itemptr pitm; btreeptr *pptr2; literal it; */ ! 198: /* Procedure rem_greatest(); */ ! 199: /* btreeptr *pptr; itemptr prepl_itm; literal it; */ ! 200: bool rem_itm(); ! 201: /* btreeptr *pptr1; itemptr pitm; ! 202: itemptr p_insitm; btreeptr *pptr2; bool *psplit; ! 203: literal it; */ ! 204: ! 205: /*********************************************************************/ ! 206: /* tables only (mbla.c) ! 207: /*********************************************************************/ ! 208: ! 209: bool rpl_itm(); ! 210: /* btreeptr *pptr1, *pptr2; itemptr pitm; bool *p_added */ ! 211: bool del_itm(); ! 212: /* btreeptr *pptr1; itemptr pitm */ ! 213: value assocval(); /* btreeptr pnode; value key; */ ! 214: bool assocloc(); ! 215: /* value **ploc; btreeptr pnode; value key; */ ! 216: bool u_assoc(); /* btreeptr pnode; value key; */ ! 217: ! 218: /***************** Texts, lists and tables ********************/ ! 219: /* Procedure move_itm(); */ /* itemptr pdes, psrc; literal it; */ ! 220: bool get_th_item(); /* itemptr pitm; value num, v; */ ! 221: ! 222: #endif !INTEGRATION
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.