0026937: Eliminate NO_CXX_EXCEPTION macro support
[occt.git] / src / Expr / Expr_SingleRelation.cxx
1 // Created on: 1991-06-10
2 // Created by: Arnaud BOUZY
3 // Copyright (c) 1991-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
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
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.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17
18 #include <Expr_GeneralExpression.hxx>
19 #include <Expr_GeneralRelation.hxx>
20 #include <Expr_NamedUnknown.hxx>
21 #include <Expr_SingleRelation.hxx>
22 #include <Standard_OutOfRange.hxx>
23 #include <Standard_Type.hxx>
24
25 IMPLEMENT_STANDARD_RTTIEXT(Expr_SingleRelation,Expr_GeneralRelation)
26
27 void Expr_SingleRelation::SetFirstMember (const Handle(Expr_GeneralExpression)& exp)
28 {
29   myFirstMember = exp;
30 }
31
32 void Expr_SingleRelation::SetSecondMember (const Handle(Expr_GeneralExpression)& exp)
33 {
34   mySecondMember = exp;
35 }
36
37 Handle(Expr_GeneralExpression) Expr_SingleRelation::FirstMember () const
38 {
39   return myFirstMember;
40 }
41
42 Handle(Expr_GeneralExpression) Expr_SingleRelation::SecondMember () const
43 {
44   return mySecondMember;
45 }
46
47 Standard_Boolean Expr_SingleRelation::IsLinear () const
48 {
49   if (!myFirstMember->IsLinear()) {
50     return Standard_False;
51   }
52   if (!mySecondMember->IsLinear()) {
53     return Standard_False;
54   }
55   return Standard_True;
56 }
57
58 Standard_Boolean Expr_SingleRelation::Contains(const Handle(Expr_GeneralExpression)& exp) const
59 {
60   if (myFirstMember == exp) {
61     return Standard_True;
62   }
63   if (mySecondMember == exp) {
64     return Standard_True;
65   }
66   if (myFirstMember->Contains(exp)) {
67     return Standard_True;
68   }
69   return mySecondMember->Contains(exp);
70 }
71
72 void Expr_SingleRelation::Replace(const Handle(Expr_NamedUnknown)& var, const Handle(Expr_GeneralExpression)& with)
73 {
74   if (myFirstMember == var) {
75     SetFirstMember(with);
76   }
77   else {
78     if (myFirstMember->Contains(var)) {
79       myFirstMember->Replace(var,with);
80     }
81   }
82   if (mySecondMember == var) {
83     SetSecondMember(with);
84   }
85   else {
86     if (mySecondMember->Contains(var)) {
87       mySecondMember->Replace(var,with);
88     }
89   }
90 }
91
92 Standard_Integer Expr_SingleRelation::NbOfSubRelations () const
93 {
94   return 0;
95 }
96
97 Handle(Expr_GeneralRelation) Expr_SingleRelation::SubRelation (const Standard_Integer ) const
98 {
99  throw Standard_OutOfRange();
100 }
101
102 Standard_Integer Expr_SingleRelation::NbOfSingleRelations() const
103 {
104   return 1;
105 }