예제 #1
0
파일: UnitExpr.java 프로젝트: sf577/Project
  // /////////////////////////////////////////////////////////////////
  // // private methods ////
  private void _flatten() {
    if (_isFlat) {
      return;
    }

    Vector newUTerms = new Vector();

    for (int i = 0; i < _uTerms.size(); i++) {
      UnitTerm unitTerm = (UnitTerm) (_uTerms.elementAt(i));

      if (unitTerm.isUnitExpr()) {
        UnitExpr uExpr = unitTerm.getUnitExpr();

        if (uExpr != null) {
          uExpr._flatten();
          newUTerms.addAll(uExpr.getUTerms());
        }
      } else {
        newUTerms.add(unitTerm);
      }
    }

    _isFlat = true;
    _setUTerms(newUTerms);
  }
예제 #2
0
파일: UnitExpr.java 프로젝트: sf577/Project
  /**
   * Reduce a UnitExpr to produce a UnitExpr that has at most one Unit. Any embedded UnitExpr is
   * first transformed so that all embedded UnitExprs are replaced with Units. This intermediate
   * result is a mixture of Units and variables. The Units are then replaced with their product. The
   * result is a single Unit and all of the original variables.
   *
   * @return The reduced UnitExpr.
   */
  public UnitExpr reduce() {
    _flatten();

    Unit reductionUnit = UnitLibrary.Identity.copy();
    Vector newUTerms = new Vector();

    for (int i = 0; i < _uTerms.size(); i++) {
      UnitTerm unitTerm = (UnitTerm) (_uTerms.elementAt(i));

      if (unitTerm.isUnit()) {
        reductionUnit = reductionUnit.multiplyBy(unitTerm.getUnit().pow(unitTerm.getExponent()));
      } else {
        newUTerms.add(unitTerm);
      }
    }

    newUTerms.add(new UnitTerm(reductionUnit));

    UnitExpr retv = new UnitExpr();
    retv._setUTerms(newUTerms);
    return retv;
  }