Annotation of 43BSD/ingres/source/decomp/setvar.c, revision 1.1.1.1

1.1       root        1: # include      <ingres.h>
                      2: # include      <aux.h>
                      3: # include      <tree.h>
                      4: # include      <symbol.h>
                      5: # include      "globs.h"
                      6: # include      <sccs.h>
                      7: 
                      8: SCCSID(@(#)setvar.c    8.1     12/31/84)
                      9: 
                     10: /*
                     11: ** SETVAR -- Routines to convert a VAR to a constant and back to a VAR
                     12: **
                     13: **     This file contains the routines for tuple substitution.
                     14: **
                     15: **     Setvar -- Make a VAR node reference its position in the tuple.
                     16: **
                     17: **     Clrvar -- Make the VAR node refer back to a VAR
                     18: */
                     19: /*
                     20: **  SETVAR
                     21: **
                     22: **     Var's are changed to reference their values in a tuple.
                     23: **     ROOT and AND nodes are changed to update the variable maps.
                     24: **
                     25: **     Trace Flags:
                     26: **             53
                     27: */
                     28: 
                     29: setvar(tree, var, intid, tuple)
                     30: register QTREE         *tree;
                     31: int            var;
                     32: TID            *intid;
                     33: char           *tuple;
                     34: {
                     35:        register int    mask, nvc;
                     36:        DESC            *readopen();
                     37:        extern QTREE    *ckvar();
                     38: 
                     39:        if (tree == NULL) 
                     40:                return;
                     41:        switch (tree->sym.type)
                     42:        {
                     43:          case VAR:
                     44:                if ((tree=ckvar(tree))->sym.value.sym_var.varno == var)
                     45:                {
                     46: #                      ifdef xDTR1
                     47:                        if (tTf(53, 0))
                     48:                        {
                     49:                                printf("setvar:%d;tree:", var);
                     50:                                nodepr(tree);
                     51:                        }
                     52: #                      endif
                     53:                        if (tree->sym.value.sym_var.attno)
                     54:                                tree->sym.value.sym_var.valptr =
                     55:                                    (ANYTYPE *) (tuple + readopen(var)->reloff[tree->sym.value.sym_var.attno]);
                     56:                        else
                     57:                                tree->sym.value.sym_var.valptr = (ANYTYPE *) intid;
                     58:                }
                     59:                return;
                     60: 
                     61:          case ROOT:
                     62:          case AND:
                     63:                mask = 01 << var;
                     64:                nvc = tree->sym.value.sym_root.tvarc;
                     65:                if (tree->sym.value.sym_root.lvarm & mask)
                     66:                {
                     67:                        setvar(tree->left, var, intid, tuple);
                     68:                        tree->sym.value.sym_root.lvarm &=  ~mask;
                     69:                        --tree->sym.value.sym_root.lvarc;
                     70:                        nvc = tree->sym.value.sym_root.tvarc - 1;
                     71:                }
                     72:                if (tree->sym.value.sym_root.rvarm & mask)
                     73:                {
                     74:                        setvar(tree->right, var, intid, tuple);
                     75:                        tree->sym.value.sym_root.rvarm &=  ~mask;
                     76:                        nvc = tree->sym.value.sym_root.tvarc - 1;
                     77:                }
                     78:                tree->sym.value.sym_root.tvarc = nvc;
                     79:                return;
                     80: 
                     81:          default:
                     82:                setvar(tree->left, var, intid, tuple);
                     83:                setvar(tree->right, var, intid, tuple);
                     84:                return;
                     85:        }
                     86: }
                     87: /*
                     88: **     Clearvar is the opposite of setvar. For
                     89: **     each occurence of var1 in the tree, clear
                     90: **     the valptr.
                     91: */
                     92: 
                     93: clearvar(tree, var)
                     94: register QTREE *tree;
                     95: register int   var;
                     96: {
                     97:        extern QTREE    *ckvar();
                     98: 
                     99:        if (tree == NULL)
                    100:                return;
                    101: 
                    102:        if (tree->sym.type == VAR)
                    103:        {
                    104:                if ((tree = ckvar(tree))->sym.value.sym_var.varno == var)
                    105:                        tree->sym.value.sym_var.valptr = 0;
                    106:                return;
                    107:        }
                    108:        clearvar(tree->left, var);
                    109:        clearvar(tree->right, var);
                    110: }

unix.superglobalmegacorp.com

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