|
|
1.1 ! root 1: #include "ideal.h" ! 2: ! 3: ! 4: DEPPTR depadd(dlistone, coeffone, dlisttwo, coefftwo) ! 5: DEPPTR dlistone; ! 6: float coeffone; ! 7: DEPPTR dlisttwo; ! 8: float coefftwo; ! 9: { ! 10: /* produce a dependency list = coeffone*dlistone + coefftwo*dlisttwo */ ! 11: register DEPPTR onewalk, twowalk, newhead, newwalk, prevnew; ! 12: DEPNODE nuhead; ! 13: prevnew = &nuhead; ! 14: prevnew->next = NULL; ! 15: onewalk = dlistone; ! 16: twowalk = dlisttwo; ! 17: while ((onewalk != NULL) || (twowalk != NULL)) { ! 18: if (onewalk != NULL) ! 19: if (twowalk != NULL) ! 20: if (onewalk->var > twowalk ->var) { ! 21: newwalk = depgen ( ! 22: onewalk->var, ! 23: coeffone*onewalk->coeff ! 24: ); ! 25: onewalk = onewalk->next; ! 26: } ! 27: else ! 28: if (onewalk->var == twowalk->var) { ! 29: newwalk = depgen ( ! 30: onewalk->var, ! 31: coeffone*onewalk->coeff ! 32: + coefftwo*twowalk->coeff ! 33: ); ! 34: onewalk = onewalk->next; ! 35: twowalk = twowalk->next; ! 36: } ! 37: else { ! 38: newwalk = depgen ( ! 39: twowalk->var, ! 40: coefftwo*twowalk->coeff ! 41: ); ! 42: twowalk = twowalk->next; ! 43: } ! 44: else { ! 45: newwalk = depgen ( ! 46: onewalk->var, ! 47: coeffone*onewalk->coeff ! 48: ); ! 49: onewalk = onewalk->next; ! 50: } ! 51: else { ! 52: newwalk = depgen ( ! 53: twowalk->var, ! 54: coefftwo*twowalk->coeff ! 55: ); ! 56: twowalk = twowalk->next; ! 57: } ! 58: if (fabs(newwalk->coeff) > EPSILON) { ! 59: prevnew->next = newwalk; ! 60: prevnew = newwalk; ! 61: } else ! 62: depfree (newwalk); ! 63: } ! 64: newhead = nuhead.next; ! 65: if (newhead != NULL) { ! 66: if (dbg) { ! 67: depprint (newhead); ! 68: fprintf (stderr, "\n"); ! 69: } ! 70: return(newhead); ! 71: } ! 72: else { ! 73: dprintf "empty dep rep\n"); ! 74: return (depgen ((VARPTR) NULL, 0.0)); ! 75: } ! 76: } ! 77: ! 78: DEPPTR depsubst(depinto, depfrom, depwho) ! 79: /* substitutes depfrom for depwho in depinto ! 80: /* WARNING: if depinto actually contains depfrom, ! 81: /* depinto is replaced */ ! 82: DEPPTR depinto, ! 83: depfrom; ! 84: VARPTR depwho; ! 85: { ! 86: DEPPTR intowalker, intoparent, temp; ! 87: for (intowalker = depinto; ! 88: intowalker != NULL; ! 89: intowalker = intowalker->next) ! 90: if (intowalker->var == depwho) ! 91: break; ! 92: else ! 93: intoparent = intowalker; ! 94: if (intowalker == NULL) ! 95: return(depinto); ! 96: if (intowalker == depinto) ! 97: depinto = depinto->next; ! 98: else ! 99: intoparent->next = intowalker->next; ! 100: dprintf "Variable substitution proceeding\n"); ! 101: temp = depadd(depinto, 1.0, depfrom, intowalker->coeff); ! 102: depfree (depinto); ! 103: tryfree(intowalker); ! 104: depinto = temp; ! 105: return (temp); ! 106: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.