Annotation of 43BSD/contrib/B/src/bint/b1btr.h, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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