// ======================================================== // addVariable // 変数追加メソッド // // @arg // MathOperand* pOperand : 追加するオペランド // // ======================================================== public void addVariable(MathOperand pOperand) throws MathException { /* 重複チェック */ boolean bDuplicate = false; for (MathOperand it : m_vecVariables) { if (it.matches(pOperand)) { bDuplicate = true; break; } } /* 重複しない場合 */ if (!bDuplicate) { /* 変数リストに追加 */ m_vecVariables.add(pOperand); } /* オペランドを追加 */ this.addOperand(pOperand); }
// ======================================================== // addOperand // オペランド追加メソッド // // @arg // MathOperand* pOperand : 追加するオペランド // // @throw // MathException // // ======================================================== public void addOperand(MathOperand pOperand) throws MathException { /* 1変数のみの式を構成する場合 */ if (m_pRootFactor == null) { m_pRootFactor = pOperand; } /* 例外処理 */ if (m_stackCurOperator.empty()) { throw new MathException( "MathExpression", "addOperand", "no operator written before this operand"); } /* 関数構築中の場合 */ if (m_pCurFuncOperator != null && m_stackCurOperator.peek() == m_pFuncParentOperand) { /* 関数引数として要素追加 */ m_pCurFuncOperator.addFactor(pOperand); } /* 関数演算子fnの場合 */ else if (m_stackCurOperator.peek().matches(eMathOperator.MOP_FN)) { /* 変数オペランドMath_ci以外を受理しない */ if (pOperand.matches(eMathOperand.MOPD_CI)) { ((Math_fn) m_stackCurOperator.peek()).setFuncOperand((Math_ci) pOperand); } else { throw new MathException( "MathExpression", "addOperand", "can't use constant number for function operand"); } } /* その他の演算子 */ else { /* 演算子にオペランド追加 */ m_stackCurOperator.peek().addFactor(pOperand); } }