39cb9a2c52b28198bccdc3311dcf6bea913aa9a2
[occt.git] / src / Expr / Expr_Exponential.cxx
1 // Copyright:   Matra-Datavision 1991
2 // File:        Expr_Exponential.cxx
3 // Created:     Mon May 27 17:30:32 1991
4 // Author:      Arnaud BOUZY
5 //              <adn>
6
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>
12 #include <Expr.hxx>
13
14 Expr_Exponential::Expr_Exponential(const Handle(Expr_GeneralExpression)& exp)
15 {
16   CreateOperand(exp);
17 }
18
19 Handle(Expr_GeneralExpression) Expr_Exponential::ShallowSimplified () const
20 {
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()));
25   }
26   if (myexp->IsKind(STANDARD_TYPE(Expr_LogOfe))) {
27     return myexp->SubExpression(1);
28   }
29   Handle(Expr_Exponential) me = this;
30   return me;
31 }
32
33 Handle(Expr_GeneralExpression) Expr_Exponential::Copy () const
34 {
35   return new Expr_Exponential(Expr::CopyShare(Operand()));
36 }
37
38 Standard_Boolean Expr_Exponential::IsIdentical (const Handle(Expr_GeneralExpression)& Other) const
39 {
40   if (Other->IsKind(STANDARD_TYPE(Expr_Exponential))) {
41     Handle(Expr_GeneralExpression) myexp = Operand();
42     return myexp->IsIdentical(Other->SubExpression(1));
43   }
44   return Standard_False;
45 }
46
47 Standard_Boolean Expr_Exponential::IsLinear () const
48 {
49   return !ContainsUnknowns();
50 }
51
52 Handle(Expr_GeneralExpression) Expr_Exponential::Derivative (const Handle(Expr_NamedUnknown)& X) const
53 {
54   if (!Contains(X)) {
55     return new Expr_NumericValue(0.0);
56   }
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();
61 }
62
63 Standard_Real Expr_Exponential::Evaluate(const Expr_Array1OfNamedUnknown& vars, const TColStd_Array1OfReal& vals) const
64 {
65   return ::Exp(Operand()->Evaluate(vars,vals));
66 }
67
68 TCollection_AsciiString Expr_Exponential::String() const
69 {
70   TCollection_AsciiString str("Exp(");
71   str += Operand()->String();
72   str += ")";
73   return str;
74 }