973c2be1 |
1 | // Copyright (c) 1999-2014 OPEN CASCADE SAS |
b311480e |
2 | // |
973c2be1 |
3 | // This file is part of Open CASCADE Technology software library. |
b311480e |
4 | // |
d5f74e42 |
5 | // This library is free software; you can redistribute it and/or modify it under |
6 | // the terms of the GNU Lesser General Public License version 2.1 as published |
973c2be1 |
7 | // by the Free Software Foundation, with special exception defined in the file |
8 | // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT |
9 | // distribution for complete text of the license and disclaimer of any warranty. |
b311480e |
10 | // |
973c2be1 |
11 | // Alternatively, this file may be used under the terms of Open CASCADE |
12 | // commercial license or contractual agreement. |
b311480e |
13 | |
42cf5bc1 |
14 | |
15 | #include <Interface_Macros.hxx> |
16 | #include <Standard_Transient.hxx> |
7fd59977 |
17 | #include <Standard_TypeMismatch.hxx> |
42cf5bc1 |
18 | #include <StepData_PDescr.hxx> |
19 | #include <StepData_SelectInt.hxx> |
20 | #include <StepData_SelectMember.hxx> |
7fd59977 |
21 | #include <StepData_SelectNamed.hxx> |
22 | #include <StepData_SelectReal.hxx> |
42cf5bc1 |
23 | #include <StepData_SelectType.hxx> |
7fd59977 |
24 | |
b311480e |
25 | Standard_Boolean StepData_SelectType::Matches |
7fd59977 |
26 | (const Handle(Standard_Transient)& ent) const |
27 | { |
28 | if (CaseNum(ent) > 0) return Standard_True; |
29 | DeclareAndCast(StepData_SelectMember,sm,ent); |
30 | if (sm.IsNull()) return Standard_False; |
31 | if (CaseMem(sm) > 0) return Standard_True; |
32 | return Standard_False; |
33 | } |
34 | |
35 | void StepData_SelectType::SetValue (const Handle(Standard_Transient)& ent) |
36 | { |
37 | if (ent.IsNull()) thevalue.Nullify(); |
38 | else if (!Matches(ent)) |
9775fa61 |
39 | throw Standard_TypeMismatch("StepData : SelectType, SetValue"); |
7fd59977 |
40 | else thevalue = ent; |
41 | } |
42 | |
43 | void StepData_SelectType::Nullify () |
44 | { thevalue.Nullify(); } |
45 | |
46 | const Handle(Standard_Transient)& StepData_SelectType::Value () const |
47 | { return thevalue; } |
48 | |
49 | Standard_Boolean StepData_SelectType::IsNull () const |
50 | { return thevalue.IsNull(); } |
51 | |
52 | Handle(Standard_Type) StepData_SelectType::Type () const |
53 | { |
54 | if (thevalue.IsNull()) return STANDARD_TYPE(Standard_Transient); |
55 | return thevalue->DynamicType(); |
56 | } |
57 | |
58 | Standard_Integer StepData_SelectType::CaseNumber () const |
59 | { if (thevalue.IsNull()) return 0; return CaseNum(thevalue); } |
60 | |
61 | |
62 | // ********** Types Immediats *********** |
63 | |
64 | Handle(StepData_PDescr) StepData_SelectType::Description () const |
65 | { Handle(StepData_PDescr) nuldescr; return nuldescr; } |
66 | |
67 | Handle(StepData_SelectMember) StepData_SelectType::NewMember () const |
68 | { Handle(StepData_SelectMember) nulmem; return nulmem; } |
69 | |
35e08fe8 |
70 | Standard_Integer StepData_SelectType::CaseMem (const Handle(StepData_SelectMember)& /*ent*/) const |
7fd59977 |
71 | { return 0; } |
72 | |
73 | Standard_Integer StepData_SelectType::CaseMember () const |
74 | { |
75 | DeclareAndCast(StepData_SelectMember,sm,thevalue); |
76 | if (sm.IsNull()) return 0; |
77 | return CaseMem (sm); |
78 | } |
79 | |
80 | Handle(StepData_SelectMember) StepData_SelectType::Member () const |
81 | { return GetCasted(StepData_SelectMember,thevalue); } |
82 | |
83 | Standard_CString StepData_SelectType::SelectName () const |
84 | { |
85 | DeclareAndCast(StepData_SelectMember,sm,thevalue); |
86 | if (sm.IsNull()) return ""; |
87 | return sm->Name(); |
88 | } |
89 | |
90 | Standard_Integer StepData_SelectType::Int () const |
91 | { |
92 | DeclareAndCast(StepData_SelectMember,sm,thevalue); |
93 | if (sm.IsNull()) return 0; |
94 | return sm->Int(); |
95 | } |
96 | |
97 | void StepData_SelectType::SetInt (const Standard_Integer val) |
98 | { |
99 | DeclareAndCast(StepData_SelectMember,sm,thevalue); |
9775fa61 |
100 | if (sm.IsNull()) throw Standard_TypeMismatch("StepData : SelectType, SetInt"); |
7fd59977 |
101 | sm->SetInt (val); |
102 | } |
103 | |
104 | // ********** Types Immediats : Differents Cas *********** |
105 | |
106 | static Handle(StepData_SelectMember) SelectVal |
107 | (const Handle(Standard_Transient)& thevalue, const Standard_CString name, |
108 | const int mode) |
109 | { |
110 | DeclareAndCast(StepData_SelectMember,sm,thevalue); |
111 | if (!sm.IsNull()) { |
112 | if (name && name[0] != '\0') |
9775fa61 |
113 | if (!sm->SetName(name)) throw Standard_TypeMismatch("StepData : SelectType, SetInteger"); |
7fd59977 |
114 | } |
115 | else if (name && name[0] != '\0') { |
116 | Handle(StepData_SelectNamed) sn = new StepData_SelectNamed; |
117 | sn->SetName (name); |
118 | sm = sn; |
119 | } else { |
120 | if (mode == 0) sm = new StepData_SelectInt; |
121 | if (mode == 1) sm = new StepData_SelectReal; |
122 | } |
123 | return sm; |
124 | } |
125 | |
126 | |
127 | Standard_Integer StepData_SelectType::Integer () const |
128 | { |
129 | DeclareAndCast(StepData_SelectMember,sm,thevalue); |
130 | if (sm.IsNull()) return 0; |
131 | return sm->Integer(); |
132 | } |
133 | |
134 | void StepData_SelectType::SetInteger |
135 | (const Standard_Integer val, const Standard_CString name) |
136 | { |
137 | Handle(StepData_SelectMember) sm = SelectVal (thevalue,name,0); |
138 | sm->SetInteger (val); |
9775fa61 |
139 | if (CaseMem (sm) == 0) throw Standard_TypeMismatch("StepData : SelectType, SetInteger"); |
7fd59977 |
140 | thevalue = sm; |
141 | } |
142 | |
143 | Standard_Boolean StepData_SelectType::Boolean () const |
144 | { |
145 | DeclareAndCast(StepData_SelectMember,sm,thevalue); |
146 | if (sm.IsNull()) return Standard_False; |
147 | return sm->Boolean(); |
148 | } |
149 | |
150 | void StepData_SelectType::SetBoolean |
151 | (const Standard_Boolean val, const Standard_CString name) |
152 | { |
153 | Handle(StepData_SelectMember) sm = SelectVal (thevalue,name,0); |
154 | sm->SetBoolean (val); |
9775fa61 |
155 | if (CaseMem (sm) == 0) throw Standard_TypeMismatch("StepData : SelectType, SetBoolean"); |
7fd59977 |
156 | thevalue = sm; |
157 | } |
158 | |
159 | StepData_Logical StepData_SelectType::Logical () const |
160 | { |
161 | DeclareAndCast(StepData_SelectMember,sm,thevalue); |
162 | if (sm.IsNull()) return StepData_LUnknown; |
163 | return sm->Logical(); |
164 | } |
165 | |
166 | void StepData_SelectType::SetLogical |
167 | (const StepData_Logical val, const Standard_CString name) |
168 | { |
169 | Handle(StepData_SelectMember) sm = SelectVal (thevalue,name,0); |
170 | sm->SetLogical (val); |
9775fa61 |
171 | if (CaseMem (sm) == 0) throw Standard_TypeMismatch("StepData : SelectType, SetLogical"); |
7fd59977 |
172 | thevalue = sm; |
173 | } |
174 | |
175 | Standard_Real StepData_SelectType::Real () const |
176 | { |
177 | DeclareAndCast(StepData_SelectMember,sm,thevalue); |
178 | if (sm.IsNull()) return 0.0; |
179 | return sm->Real(); |
180 | } |
181 | |
182 | void StepData_SelectType::SetReal |
183 | (const Standard_Real val, const Standard_CString name) |
184 | { |
185 | Handle(StepData_SelectMember) sm = SelectVal (thevalue,name,1); |
186 | sm->SetReal (val); |
9775fa61 |
187 | if (CaseMem (sm) == 0) throw Standard_TypeMismatch("StepData : SelectType, SetReal"); |
7fd59977 |
188 | thevalue = sm; |
189 | } |
190 | |
e6f550da |
191 | StepData_SelectType::~StepData_SelectType() |
192 | {} |