0026936: Drawbacks of inlining in new type system in OCCT 7.0 -- automatic
[occt.git] / src / Expr / Expr_UnaryExpression.cxx
CommitLineData
b311480e 1// Created on: 1991-04-15
2// Created by: Arnaud BOUZY
3// Copyright (c) 1991-1999 Matra Datavision
973c2be1 4// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 5//
973c2be1 6// This file is part of Open CASCADE Technology software library.
b311480e 7//
d5f74e42 8// This library is free software; you can redistribute it and/or modify it under
9// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 10// by the Free Software Foundation, with special exception defined in the file
11// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12// distribution for complete text of the license and disclaimer of any warranty.
b311480e 13//
973c2be1 14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
7fd59977 16
42cf5bc1 17
18#include <Expr_GeneralExpression.hxx>
7fd59977 19#include <Expr_InvalidOperand.hxx>
42cf5bc1 20#include <Expr_NamedUnknown.hxx>
21#include <Expr_UnaryExpression.hxx>
22#include <Standard_NumericError.hxx>
7fd59977 23#include <Standard_OutOfRange.hxx>
42cf5bc1 24#include <Standard_Type.hxx>
7fd59977 25
92efcf78 26IMPLEMENT_STANDARD_RTTIEXT(Expr_UnaryExpression,Expr_GeneralExpression)
27
7fd59977 28void Expr_UnaryExpression::SetOperand (const Handle(Expr_GeneralExpression)& exp)
29{
30 Handle(Expr_UnaryExpression) me = this;
31 if (exp == me) {
32 Expr_InvalidOperand::Raise();
33 }
34 if (exp->Contains(me)) {
35 Expr_InvalidOperand::Raise();
36 }
37 myOperand = exp;
38}
39
40void Expr_UnaryExpression::CreateOperand (const Handle(Expr_GeneralExpression)& exp)
41{
42 myOperand = exp;
43}
44
45Standard_Integer Expr_UnaryExpression::NbSubExpressions () const
46{
47 return 1;
48}
49
50const Handle(Expr_GeneralExpression)& Expr_UnaryExpression::SubExpression (const Standard_Integer I) const
51{
52 if (I != 1) {
53 Standard_OutOfRange::Raise();
54 }
55 return myOperand;
56}
57
58Standard_Boolean Expr_UnaryExpression::ContainsUnknowns () const
59{
60 if (!myOperand->IsKind(STANDARD_TYPE(Expr_NamedUnknown))) {
61 return myOperand->ContainsUnknowns();
62 }
63 return Standard_True;
64}
65
66Standard_Boolean Expr_UnaryExpression::Contains (const Handle(Expr_GeneralExpression)& exp) const
67{
68 if (myOperand != exp) {
69 return myOperand->Contains(exp);
70 }
71 return Standard_True;
72}
73
74void Expr_UnaryExpression::Replace (const Handle(Expr_NamedUnknown)& var, const Handle(Expr_GeneralExpression)& with)
75{
76 if (myOperand == var) {
77 SetOperand(with);
78 }
79 else {
80 if (myOperand->Contains(var)) {
81 myOperand->Replace(var,with);
82 }
83 }
84}
85
86
87Handle(Expr_GeneralExpression) Expr_UnaryExpression::Simplified() const
88{
89 Handle(Expr_UnaryExpression) cop = Handle(Expr_UnaryExpression)::DownCast(Copy());
90 Handle(Expr_GeneralExpression) op = cop->Operand();
91 cop->SetOperand(op->Simplified());
92 return cop->ShallowSimplified();
93}
94