Annotation of 43BSD/ingres/source/iutil/btreerange.c, revision 1.1.1.1

1.1       root        1: # include      <ingres.h>
                      2: # include      <btree.h>
                      3: # include      <sccs.h>
                      4: 
                      5: SCCSID(@(#)btreerange.c        8.1     12/31/84)
                      6: 
                      7: /*
                      8: **     Btreerange finds the smallest and largest tids corresponding to
                      9: **     the lids found between two given lids.
                     10: */
                     11: 
                     12: btreerange(d, low_lid, high_lid, lotid, hitid)
                     13: 
                     14: DESC *d;
                     15: long low_lid[], high_lid[];
                     16: register TID *lotid, *hitid;
                     17: {
                     18:        register int    i;
                     19:        long            l, h, tid, temp;
                     20:        struct locator  block;
                     21:        long            page, t, last, hbtid, last_lid();
                     22:        int             done, first;
                     23:        long            start, next;
                     24: 
                     25:        /* find tid corresponding to high lid */
                     26:        page = RT;
                     27:        for (i = 0; i < d->reldum.reldim; ++i)
                     28:        {
                     29:                if ((t = get_tid(page, high_lid[i], &block)) < 0)
                     30:                        syserr("get_tid error in btreerange, lid = %ld\n", high_lid[i]);
                     31:                page = t;
                     32:        }
                     33:        hbtid = page;
                     34:        /* find starting point of scan */
                     35:        page = RT;
                     36:        for (i = 0; i < d->reldum.reldim - 1; ++i)
                     37:        {
                     38:                last = last_lid(page) - 1;
                     39:                if (low_lid[i] > last)
                     40:                        low_lid[i] = last;
                     41:                if ((t = get_tid(page, low_lid[i], &block)) < 0)
                     42:                        syserr("get_tid error in btreerange, lid = %ld\n", low_lid[i]);
                     43:                page = t;
                     44:        }
                     45:        first = 1;
                     46:        last = last_lid(page) - 1;
                     47:        if (low_lid[d->reldum.reldim - 1] > last)
                     48:                low_lid[d->reldum.reldim - 1] = last;
                     49:        start = low_lid[d->reldum.reldim - 1];
                     50:        do
                     51:        {
                     52:                get_node(page, &block.page);
                     53:                next = block.page.nexttree;
                     54:                if ((tid = get_tid(page, start, &block)) < 0)
                     55:                        syserr("get_tid error in btreerange, lid = %ld\n", low_lid[d->reldum.reldim - 1]);
                     56:                /* set high and low to intial value */
                     57:                if (first)
                     58:                {
                     59:                        first = 0;
                     60:                        pluck_page(&tid, &l);
                     61:                        pluck_page(&tid, &h);
                     62:                }
                     63:                page = block.pageno;
                     64:                done = 0;
                     65:                while (done == 0)
                     66:                {
                     67:                        for (i = 0; i < block.page.nelmts && done == 0; ++i)
                     68:                        {
                     69:                                tid = block.page.node.leafnode.tid_pos[block.page.node.leafnode.tid_loc[i]];
                     70:                                pluck_page(&tid, &temp);
                     71:                                if (temp > h)
                     72:                                        h = temp;
                     73:                                else if (temp < l)
                     74:                                        l = temp;
                     75:                                if (tid == hbtid)
                     76:                                        done = 1;
                     77:                        }
                     78:                        page = block.page.node.leafnode.nextleaf;
                     79:                        if (page == NULL)
                     80:                                done = 1;
                     81:                        else
                     82:                                get_node(page, &block.page);
                     83:                }
                     84:                start = 1;
                     85:        } while (page = next && !done);
                     86:        stuff_page(lotid, &l);
                     87:        stuff_page(hitid, &h);
                     88:        lotid->line_id = hitid->line_id = -1;
                     89: }

unix.superglobalmegacorp.com

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