0022904: Clean up sccsid variables
[occt.git] / src / Expr / Expr_Absolute.cxx
1 // Copyright:   Matra-Datavision 1991
2 // File:        Expr_Absolute.cxx
3 // Created:     Mon May 27 10:13:50 1991
4 // Author:      Arnaud BOUZY
5 //              <adn>
6
7
8 #include <Expr_Absolute.ixx>
9 #include <Expr_NumericValue.hxx>
10 #include <Expr_UnaryMinus.hxx>
11 #include <Expr_Sign.hxx>
12 #include <Expr_Product.hxx>
13 #include <Expr_Operators.hxx>
14 #include <Expr.hxx>
15
16 Expr_Absolute::Expr_Absolute (const Handle(Expr_GeneralExpression)& exp)
17 {
18   CreateOperand(exp);
19 }
20
21 Handle(Expr_GeneralExpression) Expr_Absolute::ShallowSimplified () const
22 {
23   Handle(Expr_GeneralExpression) op = Operand();
24   if (op->IsKind(STANDARD_TYPE(Expr_NumericValue))) {
25     Handle(Expr_NumericValue) valop = Handle(Expr_NumericValue)::DownCast(op);
26     return new Expr_NumericValue(Abs(valop->GetValue()));
27   }
28   if (op->IsKind(STANDARD_TYPE(Expr_UnaryMinus))) {
29     return new Expr_Absolute(op->SubExpression(1));
30   }
31   Handle(Expr_Absolute) me = this;
32   return me;
33 }
34
35 Handle(Expr_GeneralExpression) Expr_Absolute::Copy () const 
36 {
37   return  new Expr_Absolute(Expr::CopyShare(Operand()));
38 }
39
40 Standard_Boolean Expr_Absolute::IsIdentical (const Handle(Expr_GeneralExpression)& Other) const
41 {
42   if (!Other->IsKind(STANDARD_TYPE(Expr_Absolute))) {
43     return Standard_False;
44   }
45   Handle(Expr_GeneralExpression) op = Operand();
46   return op->IsIdentical(Other->SubExpression(1));
47 }
48
49 Standard_Boolean Expr_Absolute::IsLinear () const
50 {
51   return !ContainsUnknowns();
52 }
53
54 Handle(Expr_GeneralExpression) Expr_Absolute::Derivative (const Handle(Expr_NamedUnknown)& X) const
55 {
56   Handle(Expr_GeneralExpression) op = Operand();
57   Handle(Expr_GeneralExpression) derop = op->Derivative(X);
58   Handle(Expr_Sign) myder = new Expr_Sign(Expr::CopyShare(op));
59   Handle(Expr_Product) resul = myder->ShallowSimplified() * derop;
60   return resul->ShallowSimplified();
61 }
62
63
64 Standard_Real Expr_Absolute::Evaluate(const Expr_Array1OfNamedUnknown& vars, const TColStd_Array1OfReal& vals) const
65 {
66   return ::Abs(Operand()->Evaluate(vars,vals));
67 }
68
69 TCollection_AsciiString Expr_Absolute::String() const
70 {
71   TCollection_AsciiString str("Abs(");
72   str += Operand()->String();
73   str += ")";
74   return str;
75 }