1 // Copyright: Matra-Datavision 1991
2 // File: Expr_Exponential.cxx
3 // Created: Mon May 27 17:30:32 1991
4 // Author: Arnaud BOUZY
7 #include <Expr_Exponential.ixx>
8 #include <Expr_NumericValue.hxx>
9 #include <Expr_LogOfe.hxx>
10 #include <Expr_Product.hxx>
11 #include <Expr_Operators.hxx>
14 Expr_Exponential::Expr_Exponential(const Handle(Expr_GeneralExpression)& exp)
19 Handle(Expr_GeneralExpression) Expr_Exponential::ShallowSimplified () const
21 Handle(Expr_GeneralExpression) myexp = Operand();
22 if (myexp->IsKind(STANDARD_TYPE(Expr_NumericValue))) {
23 Handle(Expr_NumericValue) myNVexp = Handle(Expr_NumericValue)::DownCast(myexp);
24 return new Expr_NumericValue(Exp(myNVexp->GetValue()));
26 if (myexp->IsKind(STANDARD_TYPE(Expr_LogOfe))) {
27 return myexp->SubExpression(1);
29 Handle(Expr_Exponential) me = this;
33 Handle(Expr_GeneralExpression) Expr_Exponential::Copy () const
35 return new Expr_Exponential(Expr::CopyShare(Operand()));
38 Standard_Boolean Expr_Exponential::IsIdentical (const Handle(Expr_GeneralExpression)& Other) const
40 if (Other->IsKind(STANDARD_TYPE(Expr_Exponential))) {
41 Handle(Expr_GeneralExpression) myexp = Operand();
42 return myexp->IsIdentical(Other->SubExpression(1));
44 return Standard_False;
47 Standard_Boolean Expr_Exponential::IsLinear () const
49 return !ContainsUnknowns();
52 Handle(Expr_GeneralExpression) Expr_Exponential::Derivative (const Handle(Expr_NamedUnknown)& X) const
55 return new Expr_NumericValue(0.0);
57 Handle(Expr_GeneralExpression) myexp = Operand();
58 Handle(Expr_GeneralExpression) myder = myexp->Derivative(X);
59 Handle(Expr_Product) resu = Expr::CopyShare(this) * myder;
60 return resu->ShallowSimplified();
63 Standard_Real Expr_Exponential::Evaluate(const Expr_Array1OfNamedUnknown& vars, const TColStd_Array1OfReal& vals) const
65 return ::Exp(Operand()->Evaluate(vars,vals));
68 TCollection_AsciiString Expr_Exponential::String() const
70 TCollection_AsciiString str("Exp(");
71 str += Operand()->String();